diff options
| author | Ray <[email protected]> | 2019-05-20 16:40:30 +0200 |
|---|---|---|
| committer | Ray <[email protected]> | 2019-05-20 16:40:30 +0200 |
| commit | 3d7d174c70b2d00fd879ade64c5085d4ff34d4aa (patch) | |
| tree | 3b690948f186f855aa2ee8bab312b3ca28a56200 /examples/web/models | |
| parent | 0b56b996bd053ec875c229e9793f7806b666839c (diff) | |
| download | raylib.com-3d7d174c70b2d00fd879ade64c5085d4ff34d4aa.tar.gz raylib.com-3d7d174c70b2d00fd879ade64c5085d4ff34d4aa.zip | |
Review and recompile ALL examples
Diffstat (limited to 'examples/web/models')
63 files changed, 37099 insertions, 294 deletions
diff --git a/examples/web/models/models_animation.c b/examples/web/models/models_animation.c index 10e2425..dfafbd2 100644 --- a/examples/web/models/models_animation.c +++ b/examples/web/models/models_animation.c @@ -27,7 +27,7 @@ Camera camera = { 0 }; Model model = { 0 }; Texture2D texture = { 0 }; - + Vector3 position = { 0.0f, 0.0f, 0.0f }; // Load animation data @@ -43,7 +43,7 @@ void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- // Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -70,7 +70,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -82,7 +82,7 @@ int main() //-------------------------------------------------------------------------------------- // Unload model animations data for (int i = 0; i < animsCount; i++) UnloadModelAnimation(anims[i]); - + UnloadModel(model); // Unload model CloseWindow(); // Close window and OpenGL context diff --git a/examples/web/models/models_animation.data b/examples/web/models/models_animation.data Binary files differnew file mode 100644 index 0000000..087b208 --- /dev/null +++ b/examples/web/models/models_animation.data diff --git a/examples/web/models/models_animation.html b/examples/web/models/models_animation.html new file mode 100644 index 0000000..fb57b0b --- /dev/null +++ b/examples/web/models/models_animation.html @@ -0,0 +1 @@ +<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/games property=og:url><meta content=raylib.com property=og:site_name><meta content="New hmtl5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:url><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header_part{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(https://www.raylib.com/common/img/raylib_logo_64x64.png)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}#emscripten_logo{display:inline-block;margin:0}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:20px;width:30px}#controls{display:inline-block;float:right;vertical-align:top;margin-top:30px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}</style></head><body><div id=header_part><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value=Fullscreen></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault()></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function SaveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var t=document.querySelector("#output");return t&&(t.value=""),function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.log(e),t&&(t.value+=e+"\n",t.scrollTop=t.scrollHeight)}}(),printErr:function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()},!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Date.now()<30||(t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!1,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(e){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script src=models_animation.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_animation.js b/examples/web/models/models_animation.js new file mode 100644 index 0000000..24ac6ee --- /dev/null +++ b/examples/web/models/models_animation.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_animation.data";var REMOTE_PACKAGE_BASE="models_animation.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);Module["FS_createPath"]("/resources","guy",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i<files.length;++i){new DataRequest(files[i].start,files[i].end,files[i].audio).open("GET",files[i].filename)}function processPackageData(arrayBuffer){Module.finishedDataFileDownloads++;assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);var ptr=Module["getMemory"](byteArray.length);Module["HEAPU8"].set(byteArray,ptr);DataRequest.prototype.byteArray=Module["HEAPU8"].subarray(ptr,ptr+byteArray.length);var files=metadata.files;for(var i=0;i<files.length;++i){DataRequest.prototype.requests[files[i].filename].onload()}Module["removeRunDependency"]("datafile_models/models_animation.data")}Module["addRunDependency"]("datafile_models/models_animation.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[{"start":0,"audio":0,"end":39408,"filename":"/resources/guy/guy.iqm"},{"start":39408,"audio":0,"end":341796,"filename":"/resources/guy/guytex.png"},{"start":341796,"audio":0,"end":360040,"filename":"/resources/guy/guyanim.iqm"}],"remote_package_size":360040,"package_uuid":"b81f0ce1-015c-4381-9847-589645fb0462"})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];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 require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;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)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["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);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["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"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}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=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["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)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];type=singleType||types[i];if(type===0){i++;continue}if(type=="i64")type="i32";setValue(ret+i,curr,type);if(previousType!==type){typeSize=getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}function getMemory(size){if(!runtimeInitialized)return dynamicAlloc(size);return _malloc(size)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(u8Array[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=u8Array[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[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<str.length;++i){var u=str.charCodeAt(i);if(u>=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 allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__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(0)}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)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5279488,DYNAMICTOP_PTR=36576;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;if(INITIAL_TOTAL_MEMORY<TOTAL_STACK)err("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+INITIAL_TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{if(typeof WebAssembly==="object"&&typeof WebAssembly.Memory==="function"){wasmMemory=new WebAssembly.Memory({"initial":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE});buffer=wasmMemory.buffer}else{buffer=new ArrayBuffer(INITIAL_TOTAL_MEMORY)}}updateGlobalBufferViews();HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();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 __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=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 ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}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"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_animation.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){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(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};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 ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}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)},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.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(19)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(6)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(6)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(5)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var isPosixPlatform=process.platform!="win32";var fd=process.stdin.fd;if(isPosixPlatform){var usingDevice=false;try{fd=fs.openSync("/dev/stdin","r");usingDevice=true}catch(e){}}try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(usingDevice){fs.closeSync(fd)}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}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(1)}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<node.usedBytes;++i)arr.push(node.contents[i]);return arr}return node.contents},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array;if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|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(new ArrayBuffer(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<newSize)node.contents.push(0);node.usedBytes=newSize},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[2]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(39)}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name]},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(39)}delete parent.contents[name]},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(22)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(22)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(12)}buffer.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var IDBFS={dbs:{},indexedDB:function(){if(typeof indexedDB!=="undefined")return indexedDB;var ret=null;if(typeof window==="object")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,"IDBFS used, but indexedDB not supported");return ret},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function(mount){return MEMFS.mount.apply(null,arguments)},syncfs:function(mount,populate,callback){IDBFS.getLocalSet(mount,function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},getDB:function(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback("Unable to connect to IndexedDB")}req.onupgradeneeded=function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}};req.onsuccess=function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db)};req.onerror=function(e){callback(this.error);e.preventDefault()}},getLocalSet:function(mount,callback){var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return function(p){return PATH.join2(root,p)}}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:"local",entries:entries})},getRemoteSet:function(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,function(err,db){if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=function(e){callback(this.error);e.preventDefault()};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db:db,entries:entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()}}catch(e){return callback(e)}})},loadLocalEntry:function(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error("node type not supported"))}},storeLocalEntry:function(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode)}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp)}catch(e){return callback(e)}callback(null)},removeLocalEntry:function(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:function(store,path,callback){var req=store.get(path);req.onsuccess=function(event){callback(null,event.target.result)};req.onerror=function(e){callback(this.error);e.preventDefault()}},storeRemoteEntry:function(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},removeRemoteEntry:function(store,path,callback){var req=store.delete(path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},reconcile:function(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join("/");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,parts[i],WORKERFS.DIR_MODE,0)}parent=createdParents[curr]}return parent}function base(path){var parts=path.split("/");return parts[parts.length-1]}Array.prototype.forEach.call(mount.opts["files"]||[],function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate)});(mount.opts["blobs"]||[]).forEach(function(obj){WORKERFS.createNode(ensureParent(obj["name"]),base(obj["name"]),WORKERFS.FILE_MODE,0,obj["data"])});(mount.opts["packages"]||[]).forEach(function(pack){pack["metadata"].files.forEach(function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack["blob"].slice(file.start,file.end))})});return root},createNode:function(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents}else{node.size=4096;node.contents={}}if(parent){parent.contents[name]=node}return node},node_ops:{getattr:function(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)}},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}},lookup:function(parent,name){throw new FS.ErrnoError(2)},mknod:function(parent,name,mode,dev){throw new FS.ErrnoError(1)},rename:function(oldNode,newDir,newName){throw new FS.ErrnoError(1)},unlink:function(parent,name){throw new FS.ErrnoError(1)},rmdir:function(parent,name){throw new FS.ErrnoError(1)},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newName,oldPath){throw new FS.ErrnoError(1)},readlink:function(node){throw new FS.ErrnoError(1)}},stream_ops:{read:function(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(40)}}}}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<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>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 err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,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){if(!FS.FSNode){FS.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};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.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)}}})}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 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}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 err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}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(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}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(29)}},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){console.log("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(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}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(16)}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(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}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(22)}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(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}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;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=17)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(2)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(2)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(1)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(16)}if(!old_dir||!new_dir)throw new FS.ErrnoError(2);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(18)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(22)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(39)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(1)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(16)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(20)}return node.node_ops.readdir(node)},unlink:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(2)}if(!link.node_ops.readlink){throw new FS.ErrnoError(22)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(2)}if(!node.node_ops.getattr){throw new FS.ErrnoError(1)}return node.node_ops.getattr(node)},lstat:function(path){return FS.stat(path,true)},chmod:function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chmod(stream.node,mode)},chown:function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chown(stream.node,uid,gid)},truncate:function(path,len){if(len<0){throw new FS.ErrnoError(22)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(21)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(22)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(22)}FS.truncate(stream.node,len)},utime:function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(2)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(17)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(2)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;console.log("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:function(stream){return stream.fd===null},llseek:function(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(29)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(22)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.read){throw new FS.ErrnoError(22)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.write){throw new FS.ErrnoError(22)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(offset<0||length<=0){throw new FS.ErrnoError(22)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(19)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(95)}stream.stream_ops.allocate(stream,offset,length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(13)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(19)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(25)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:function(path,data,opts){opts=opts||{};opts.flags=opts.flags||"w";var stream=FS.open(path,opts.flags,opts.mode);if(typeof data==="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:function(){return FS.currentPath},chdir:function(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(2)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(20)}var err=FS.nodePermissions(lookup.node,"x");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path},createDefaultDirectories:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return length}});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device;if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);random_device=function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");random_device=function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}else{}if(!random_device){random_device=function(){abort("random_device")}}FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode("/proc/self","fd",16384|511,73);node.node_ops={lookup:function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(9);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin","r");var stdout=FS.open("/dev/stdout","w");var stderr=FS.open("/dev/stderr","w")},ensureErrnoError:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error";if(this.stack)Object.defineProperty(this,"stack",{value:(new Error).stack,writable:true})};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[2].forEach(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS}},init:function(input,output,error){FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},joinPath:function(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]=="/")path=path.substr(1);return path},absolutePath:function(relative,base){return PATH.resolve(base,relative)},standardizePath:function(path){return PATH.normalize(path)},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{___setErrNo(ret.error);return null}},analyzePath:function(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createFolder:function(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode)},createPath:function(parent,path,canRead,canWrite){parent=typeof parent==="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:function(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data==="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,"w");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(5)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},createLink:function(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);return FS.symlink(target,path)},forceLoadFile:function(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!=="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(Module["read"]){try{obj.contents=intArrayFromString(Module["read"](obj.url),true);obj.usedBytes=obj.contents.length}catch(e){success=false}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}if(!success)___setErrNo(5);return success},createLazyFile:function(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=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;console.log("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(5)}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(5)}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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function(dirfd,path){if(path[0]!=="/"){var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path}path=PATH.join2(dir,path)}return path},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR}throw e}HEAP32[buf>>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){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,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-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;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-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}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<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;if(typeof SDL==="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["preloadPlugins"].push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("warning: browser could not fully decode audio "+name+", trying slower base64 approach");function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};var EGL={errorCode:12288,defaultDisplayInitialized:false,currentContext:0,currentReadSurface:0,currentDrawSurface:0,contextAttributes:{alpha:false,depth:false,stencil:false,antialias:false},stringCache:{},setErrorCode:function(code){EGL.errorCode=code},chooseConfig:function(display,attribList,config,config_size,numConfigs){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(attribList){for(;;){var param=HEAP32[attribList>>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(this,call.argsList)}},inEventHandler:0,currentEventHandler:null,eventHandlers:[],isInternetExplorer:function(){return navigator.userAgent.indexOf("MSIE")!==-1||navigator.appVersion.indexOf("Trident/")>0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getBoundingClientRectOrZeros:function(target){return target.getBoundingClientRect?target.getBoundingClientRect():{left:0,top:0}},pageScrollPos:function(){if(window.pageXOffset>0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i<GL.MINI_TEMP_BUFFER_SIZE;i++){GL.miniTempBufferViews[i]=GL.miniTempBuffer.subarray(0,i+1)}},recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i<ret;i++){table[i]=null}return ret},MINI_TEMP_BUFFER_SIZE:256,miniTempBuffer:null,miniTempBufferViews:[0],getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i<result.length;++i){switch(type){case"Integer":HEAP32[p+i*4>>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[location]);if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i<e.touches.length;++i){var touch=e.touches[i];touches[touch.identifier]=touch}for(var i=0;i<e.changedTouches.length;++i){var touch=e.changedTouches[i];touches[touch.identifier]=touch;touch.changed=true}for(var i=0;i<e.targetTouches.length;++i){var touch=e.targetTouches[i];touches[touch.identifier].onTarget=true}var touchEvent=JSEvents.touchEvent;var ptr=touchEvent;HEAP32[ptr+4>>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;dynCall_vidd(GLFW.active.cursorPosFunc,GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;dynCall_viiii(GLFW.active.mouseButtonFunc,GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),"i8",ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),"i8",ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),"float",ALLOC_NORMAL)};if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.keyFunc=cbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.charFunc=cbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.mouseButtonFunc=cbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorPosFunc=cbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.scrollFunc=cbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.dropFunc=cbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowSizeFunc=cbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowCloseFunc=cbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowRefreshFunc=cbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++);if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++);if(i==GLFW.windows.length){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetCursorPos(winid,x,y){GLFW.getCursorPos(winid,x,y)}function _glfwGetKey(winid,key){return GLFW.getKey(winid,key)}function _glfwGetMouseButton(winid,button){return GLFW.getMouseButton(winid,button)}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorEnterFunc=cbfun}function _glfwSetCursorPosCallback(winid,cbfun){GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){GLFW.errorFunc=cbfun}function _glfwSetKeyCallback(winid,cbfun){GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowIconifyFunc=cbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _llvm_stackrestore(p){var self=_llvm_stacksave;var ret=self.LLVM_SAVEDSTACKS[p];self.LLVM_SAVEDSTACKS.splice(p,1);stackRestore(ret)}function _llvm_stacksave(){var self=_llvm_stacksave;if(!self.LLVM_SAVEDSTACKS){self.LLVM_SAVEDSTACKS=[]}self.LLVM_SAVEDSTACKS.push(stackSave());return self.LLVM_SAVEDSTACKS.length-1}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function _usleep(useconds){var msec=useconds/1e3;if((ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self["performance"]&&self["performance"]["now"]){var start=self["performance"]["now"]();while(self["performance"]["now"]()-start<msec){}}else{var start=Date.now();while(Date.now()-start<msec){}}return 0}function _nanosleep(rqtp,rmtp){var seconds=HEAP32[rqtp>>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));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 asmGlobalArg={};var asmLibraryArg={"d":abort,"b":___assert_fail,"qc":___lock,"F":___setErrNo,"fb":___syscall140,"Wa":___syscall145,"E":___syscall146,"q":___syscall221,"ra":___syscall5,"D":___syscall54,"Y":___syscall6,"C":___unlock,"B":_eglGetProcAddress,"X":_emscripten_exit_pointerlock,"vd":_emscripten_get_gamepad_status,"kd":_emscripten_get_heap_size,"$c":_emscripten_get_num_gamepads,"W":_emscripten_get_pointerlock_status,"Gc":_emscripten_glActiveTexture,"wc":_emscripten_glAttachShader,"pc":_emscripten_glBeginQueryEXT,"ic":_emscripten_glBindAttribLocation,"fc":_emscripten_glBindBuffer,"ac":_emscripten_glBindFramebuffer,"Vb":_emscripten_glBindRenderbuffer,"Qb":_emscripten_glBindTexture,"Gb":_emscripten_glBindVertexArrayOES,"vb":_emscripten_glBlendColor,"rb":_emscripten_glBlendEquation,"qb":_emscripten_glBlendEquationSeparate,"pb":_emscripten_glBlendFunc,"ob":_emscripten_glBlendFuncSeparate,"nb":_emscripten_glBufferData,"mb":_emscripten_glBufferSubData,"lb":_emscripten_glCheckFramebufferStatus,"kb":_emscripten_glClear,"jb":_emscripten_glClearColor,"ib":_emscripten_glClearDepthf,"hb":_emscripten_glClearStencil,"gb":_emscripten_glColorMask,"eb":_emscripten_glCompileShader,"db":_emscripten_glCompressedTexImage2D,"cb":_emscripten_glCompressedTexSubImage2D,"bb":_emscripten_glCopyTexImage2D,"ab":_emscripten_glCopyTexSubImage2D,"$a":_emscripten_glCreateProgram,"_a":_emscripten_glCreateShader,"Za":_emscripten_glCullFace,"Ya":_emscripten_glDeleteBuffers,"Xa":_emscripten_glDeleteFramebuffers,"Va":_emscripten_glDeleteProgram,"Ua":_emscripten_glDeleteQueriesEXT,"Ta":_emscripten_glDeleteRenderbuffers,"Sa":_emscripten_glDeleteShader,"Ra":_emscripten_glDeleteTextures,"Qa":_emscripten_glDeleteVertexArraysOES,"Pa":_emscripten_glDepthFunc,"Oa":_emscripten_glDepthMask,"Na":_emscripten_glDepthRangef,"Ma":_emscripten_glDetachShader,"La":_emscripten_glDisable,"Ka":_emscripten_glDisableVertexAttribArray,"Ja":_emscripten_glDrawArrays,"Ia":_emscripten_glDrawArraysInstancedANGLE,"Ha":_emscripten_glDrawBuffersWEBGL,"Ga":_emscripten_glDrawElements,"Fa":_emscripten_glDrawElementsInstancedANGLE,"Ea":_emscripten_glEnable,"Da":_emscripten_glEnableVertexAttribArray,"Ca":_emscripten_glEndQueryEXT,"Ba":_emscripten_glFinish,"Aa":_emscripten_glFlush,"za":_emscripten_glFramebufferRenderbuffer,"ya":_emscripten_glFramebufferTexture2D,"xa":_emscripten_glFrontFace,"wa":_emscripten_glGenBuffers,"va":_emscripten_glGenFramebuffers,"ua":_emscripten_glGenQueriesEXT,"ta":_emscripten_glGenRenderbuffers,"sa":_emscripten_glGenTextures,"qa":_emscripten_glGenVertexArraysOES,"pa":_emscripten_glGenerateMipmap,"oa":_emscripten_glGetActiveAttrib,"na":_emscripten_glGetActiveUniform,"ma":_emscripten_glGetAttachedShaders,"la":_emscripten_glGetAttribLocation,"ka":_emscripten_glGetBooleanv,"ja":_emscripten_glGetBufferParameteriv,"ia":_emscripten_glGetError,"ha":_emscripten_glGetFloatv,"ga":_emscripten_glGetFramebufferAttachmentParameteriv,"fa":_emscripten_glGetIntegerv,"ea":_emscripten_glGetProgramInfoLog,"da":_emscripten_glGetProgramiv,"ca":_emscripten_glGetQueryObjecti64vEXT,"ba":_emscripten_glGetQueryObjectivEXT,"aa":_emscripten_glGetQueryObjectui64vEXT,"$":_emscripten_glGetQueryObjectuivEXT,"_":_emscripten_glGetQueryivEXT,"Z":_emscripten_glGetRenderbufferParameteriv,"he":_emscripten_glGetShaderInfoLog,"ge":_emscripten_glGetShaderPrecisionFormat,"fe":_emscripten_glGetShaderSource,"ee":_emscripten_glGetShaderiv,"de":_emscripten_glGetString,"ce":_emscripten_glGetTexParameterfv,"be":_emscripten_glGetTexParameteriv,"ae":_emscripten_glGetUniformLocation,"$d":_emscripten_glGetUniformfv,"_d":_emscripten_glGetUniformiv,"Zd":_emscripten_glGetVertexAttribPointerv,"Yd":_emscripten_glGetVertexAttribfv,"Xd":_emscripten_glGetVertexAttribiv,"Wd":_emscripten_glHint,"Vd":_emscripten_glIsBuffer,"Ud":_emscripten_glIsEnabled,"Td":_emscripten_glIsFramebuffer,"Sd":_emscripten_glIsProgram,"Rd":_emscripten_glIsQueryEXT,"Qd":_emscripten_glIsRenderbuffer,"Pd":_emscripten_glIsShader,"Od":_emscripten_glIsTexture,"Nd":_emscripten_glIsVertexArrayOES,"Md":_emscripten_glLineWidth,"Ld":_emscripten_glLinkProgram,"Kd":_emscripten_glPixelStorei,"Jd":_emscripten_glPolygonOffset,"Id":_emscripten_glQueryCounterEXT,"Hd":_emscripten_glReadPixels,"Gd":_emscripten_glReleaseShaderCompiler,"Fd":_emscripten_glRenderbufferStorage,"Ed":_emscripten_glSampleCoverage,"Dd":_emscripten_glScissor,"Cd":_emscripten_glShaderBinary,"Bd":_emscripten_glShaderSource,"Ad":_emscripten_glStencilFunc,"zd":_emscripten_glStencilFuncSeparate,"yd":_emscripten_glStencilMask,"xd":_emscripten_glStencilMaskSeparate,"wd":_emscripten_glStencilOp,"ud":_emscripten_glStencilOpSeparate,"td":_emscripten_glTexImage2D,"sd":_emscripten_glTexParameterf,"rd":_emscripten_glTexParameterfv,"qd":_emscripten_glTexParameteri,"pd":_emscripten_glTexParameteriv,"od":_emscripten_glTexSubImage2D,"nd":_emscripten_glUniform1f,"md":_emscripten_glUniform1fv,"ld":_emscripten_glUniform1i,"jd":_emscripten_glUniform1iv,"id":_emscripten_glUniform2f,"hd":_emscripten_glUniform2fv,"gd":_emscripten_glUniform2i,"fd":_emscripten_glUniform2iv,"ed":_emscripten_glUniform3f,"dd":_emscripten_glUniform3fv,"cd":_emscripten_glUniform3i,"bd":_emscripten_glUniform3iv,"ad":_emscripten_glUniform4f,"_c":_emscripten_glUniform4fv,"Zc":_emscripten_glUniform4i,"Yc":_emscripten_glUniform4iv,"Xc":_emscripten_glUniformMatrix2fv,"Wc":_emscripten_glUniformMatrix3fv,"Vc":_emscripten_glUniformMatrix4fv,"Uc":_emscripten_glUseProgram,"Tc":_emscripten_glValidateProgram,"Sc":_emscripten_glVertexAttrib1f,"Rc":_emscripten_glVertexAttrib1fv,"Qc":_emscripten_glVertexAttrib2f,"Pc":_emscripten_glVertexAttrib2fv,"Oc":_emscripten_glVertexAttrib3f,"Nc":_emscripten_glVertexAttrib3fv,"Mc":_emscripten_glVertexAttrib4f,"Lc":_emscripten_glVertexAttrib4fv,"Kc":_emscripten_glVertexAttribDivisorANGLE,"Jc":_emscripten_glVertexAttribPointer,"Ic":_emscripten_glViewport,"Hc":_emscripten_memcpy_big,"Fc":_emscripten_request_pointerlock,"Ec":_emscripten_resize_heap,"V":_emscripten_run_script,"Dc":_emscripten_sample_gamepad_data,"Cc":_emscripten_set_click_callback_on_thread,"Bc":_emscripten_set_fullscreenchange_callback_on_thread,"Ac":_emscripten_set_gamepadconnected_callback_on_thread,"zc":_emscripten_set_gamepaddisconnected_callback_on_thread,"yc":_emscripten_set_keypress_callback_on_thread,"xc":_emscripten_set_main_loop,"vc":_emscripten_set_touchcancel_callback_on_thread,"uc":_emscripten_set_touchend_callback_on_thread,"tc":_emscripten_set_touchmove_callback_on_thread,"sc":_emscripten_set_touchstart_callback_on_thread,"rc":_exit,"A":_glActiveTexture,"U":_glAttachShader,"n":_glBindAttribLocation,"c":_glBindBuffer,"j":_glBindTexture,"oc":_glBlendFunc,"h":_glBufferData,"s":_glBufferSubData,"T":_glClear,"S":_glClearColor,"nc":_glClearDepthf,"mc":_glCompileShader,"lc":_glCompressedTexImage2D,"kc":_glCreateProgram,"jc":_glCreateShader,"hc":_glCullFace,"p":_glDeleteBuffers,"z":_glDeleteProgram,"R":_glDeleteShader,"Q":_glDeleteTextures,"gc":_glDepthFunc,"P":_glDetachShader,"O":_glDisable,"i":_glDisableVertexAttribArray,"N":_glDrawArrays,"M":_glDrawElements,"y":_glEnable,"f":_glEnableVertexAttribArray,"ec":_glFrontFace,"g":_glGenBuffers,"dc":_glGenTextures,"x":_glGetAttribLocation,"cc":_glGetFloatv,"bc":_glGetProgramInfoLog,"L":_glGetProgramiv,"$b":_glGetShaderInfoLog,"K":_glGetShaderiv,"o":_glGetString,"w":_glGetUniformLocation,"_b":_glLinkProgram,"Zb":_glPixelStorei,"Yb":_glReadPixels,"Xb":_glShaderSource,"Wb":_glTexImage2D,"m":_glTexParameteri,"J":_glUniform1i,"v":_glUniform4f,"u":_glUniformMatrix4fv,"l":_glUseProgram,"Ub":_glVertexAttrib2f,"Tb":_glVertexAttrib3f,"t":_glVertexAttrib4f,"e":_glVertexAttribPointer,"Sb":_glViewport,"Rb":_glfwCreateWindow,"Pb":_glfwDefaultWindowHints,"Ob":_glfwDestroyWindow,"Nb":_glfwGetCursorPos,"Mb":_glfwGetKey,"Lb":_glfwGetMouseButton,"r":_glfwGetTime,"Kb":_glfwInit,"Jb":_glfwMakeContextCurrent,"Ib":_glfwSetCharCallback,"Hb":_glfwSetCursorEnterCallback,"Fb":_glfwSetCursorPosCallback,"Eb":_glfwSetDropCallback,"Db":_glfwSetErrorCallback,"Cb":_glfwSetKeyCallback,"Bb":_glfwSetMouseButtonCallback,"Ab":_glfwSetScrollCallback,"zb":_glfwSetWindowIconifyCallback,"yb":_glfwSetWindowShouldClose,"xb":_glfwSetWindowSizeCallback,"wb":_glfwSwapBuffers,"I":_glfwTerminate,"k":_glfwWindowHint,"H":_llvm_stackrestore,"G":_llvm_stacksave,"ub":_nanosleep,"tb":_time,"sb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["we"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i<argc;i++){HEAP32[(argv>>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_animation.wasm b/examples/web/models/models_animation.wasm Binary files differnew file mode 100644 index 0000000..aedee06 --- /dev/null +++ b/examples/web/models/models_animation.wasm diff --git a/examples/web/models/models_billboard.c b/examples/web/models/models_billboard.c index ea64d03..cd83e33 100644 --- a/examples/web/models/models_billboard.c +++ b/examples/web/models/models_billboard.c @@ -18,22 +18,22 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world -Camera camera = {{ 5.0f, 4.0f, 5.0f }, { 0.0f, 2.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; +Camera camera = { 0 }; -Texture2D bill; // Our texture billboard +Texture2D bill = { 0 }; // Our texture billboard Vector3 billPosition = { 0.0f, 2.0f, 0.0f }; // Position where draw billboard - + //---------------------------------------------------------------------------------- // Module Functions Declaration //---------------------------------------------------------------------------------- void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -41,8 +41,14 @@ int main(void) //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [models] example - drawing billboards"); + camera.position = (Vector3){ 5.0f, 4.0f, 5.0f }; + camera.target = (Vector3){ 0.0f, 2.0f, 0.0f }; + camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; + camera.fovy = 45.0f; + camera.type = CAMERA_PERSPECTIVE; + bill = LoadTexture("resources/billboard.png"); // Our texture billboard - + SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode #if defined(PLATFORM_WEB) @@ -50,7 +56,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -84,13 +90,12 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - Begin3dMode(camera); - - DrawBillboard(camera, bill, billPosition, 2.0f, WHITE); + BeginMode3D(camera); DrawGrid(10, 1.0f); // Draw a grid + DrawBillboard(camera, bill, billPosition, 2.0f, WHITE); - End3dMode(); + EndMode3D(); DrawFPS(10, 10); diff --git a/examples/web/models/models_billboard.data b/examples/web/models/models_billboard.data Binary files differnew file mode 100644 index 0000000..e2fe398 --- /dev/null +++ b/examples/web/models/models_billboard.data diff --git a/examples/web/models/models_billboard.html b/examples/web/models/models_billboard.html new file mode 100644 index 0000000..842297e --- /dev/null +++ b/examples/web/models/models_billboard.html @@ -0,0 +1 @@ +<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/games property=og:url><meta content=raylib.com property=og:site_name><meta content="New hmtl5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:url><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header_part{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(https://www.raylib.com/common/img/raylib_logo_64x64.png)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}#emscripten_logo{display:inline-block;margin:0}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:20px;width:30px}#controls{display:inline-block;float:right;vertical-align:top;margin-top:30px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}</style></head><body><div id=header_part><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value=Fullscreen></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault()></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function SaveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var t=document.querySelector("#output");return t&&(t.value=""),function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.log(e),t&&(t.value+=e+"\n",t.scrollTop=t.scrollHeight)}}(),printErr:function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()},!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Date.now()<30||(t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!1,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(e){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script src=models_billboard.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_billboard.js b/examples/web/models/models_billboard.js new file mode 100644 index 0000000..177e3a7 --- /dev/null +++ b/examples/web/models/models_billboard.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_billboard.data";var REMOTE_PACKAGE_BASE="models_billboard.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i<files.length;++i){new DataRequest(files[i].start,files[i].end,files[i].audio).open("GET",files[i].filename)}function processPackageData(arrayBuffer){Module.finishedDataFileDownloads++;assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);var ptr=Module["getMemory"](byteArray.length);Module["HEAPU8"].set(byteArray,ptr);DataRequest.prototype.byteArray=Module["HEAPU8"].subarray(ptr,ptr+byteArray.length);var files=metadata.files;for(var i=0;i<files.length;++i){DataRequest.prototype.requests[files[i].filename].onload()}Module["removeRunDependency"]("datafile_models/models_billboard.data")}Module["addRunDependency"]("datafile_models/models_billboard.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[{"start":0,"audio":0,"end":22439,"filename":"/resources/billboard.png"}],"remote_package_size":22439,"package_uuid":"cd282d08-c683-44a1-8cb6-f0c0fbaa40c4"})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];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 require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;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)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["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);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["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"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}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=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["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)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];type=singleType||types[i];if(type===0){i++;continue}if(type=="i64")type="i32";setValue(ret+i,curr,type);if(previousType!==type){typeSize=getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}function getMemory(size){if(!runtimeInitialized)return dynamicAlloc(size);return _malloc(size)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(u8Array[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=u8Array[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[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<str.length;++i){var u=str.charCodeAt(i);if(u>=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 allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__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(0)}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)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5273104,DYNAMICTOP_PTR=30192;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY<TOTAL_STACK)err("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+INITIAL_TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{if(typeof WebAssembly==="object"&&typeof WebAssembly.Memory==="function"){wasmMemory=new WebAssembly.Memory({"initial":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE});buffer=wasmMemory.buffer}else{buffer=new ArrayBuffer(INITIAL_TOTAL_MEMORY)}}updateGlobalBufferViews();HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();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 __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=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 ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}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"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_billboard.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){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(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};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 ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}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)},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.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(19)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(6)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(6)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(5)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var isPosixPlatform=process.platform!="win32";var fd=process.stdin.fd;if(isPosixPlatform){var usingDevice=false;try{fd=fs.openSync("/dev/stdin","r");usingDevice=true}catch(e){}}try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(usingDevice){fs.closeSync(fd)}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}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(1)}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<node.usedBytes;++i)arr.push(node.contents[i]);return arr}return node.contents},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array;if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|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(new ArrayBuffer(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<newSize)node.contents.push(0);node.usedBytes=newSize},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[2]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(39)}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name]},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(39)}delete parent.contents[name]},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(22)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(22)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(12)}buffer.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var IDBFS={dbs:{},indexedDB:function(){if(typeof indexedDB!=="undefined")return indexedDB;var ret=null;if(typeof window==="object")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,"IDBFS used, but indexedDB not supported");return ret},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function(mount){return MEMFS.mount.apply(null,arguments)},syncfs:function(mount,populate,callback){IDBFS.getLocalSet(mount,function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},getDB:function(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback("Unable to connect to IndexedDB")}req.onupgradeneeded=function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}};req.onsuccess=function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db)};req.onerror=function(e){callback(this.error);e.preventDefault()}},getLocalSet:function(mount,callback){var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return function(p){return PATH.join2(root,p)}}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:"local",entries:entries})},getRemoteSet:function(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,function(err,db){if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=function(e){callback(this.error);e.preventDefault()};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db:db,entries:entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()}}catch(e){return callback(e)}})},loadLocalEntry:function(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error("node type not supported"))}},storeLocalEntry:function(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode)}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp)}catch(e){return callback(e)}callback(null)},removeLocalEntry:function(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:function(store,path,callback){var req=store.get(path);req.onsuccess=function(event){callback(null,event.target.result)};req.onerror=function(e){callback(this.error);e.preventDefault()}},storeRemoteEntry:function(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},removeRemoteEntry:function(store,path,callback){var req=store.delete(path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},reconcile:function(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join("/");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,parts[i],WORKERFS.DIR_MODE,0)}parent=createdParents[curr]}return parent}function base(path){var parts=path.split("/");return parts[parts.length-1]}Array.prototype.forEach.call(mount.opts["files"]||[],function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate)});(mount.opts["blobs"]||[]).forEach(function(obj){WORKERFS.createNode(ensureParent(obj["name"]),base(obj["name"]),WORKERFS.FILE_MODE,0,obj["data"])});(mount.opts["packages"]||[]).forEach(function(pack){pack["metadata"].files.forEach(function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack["blob"].slice(file.start,file.end))})});return root},createNode:function(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents}else{node.size=4096;node.contents={}}if(parent){parent.contents[name]=node}return node},node_ops:{getattr:function(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)}},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}},lookup:function(parent,name){throw new FS.ErrnoError(2)},mknod:function(parent,name,mode,dev){throw new FS.ErrnoError(1)},rename:function(oldNode,newDir,newName){throw new FS.ErrnoError(1)},unlink:function(parent,name){throw new FS.ErrnoError(1)},rmdir:function(parent,name){throw new FS.ErrnoError(1)},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newName,oldPath){throw new FS.ErrnoError(1)},readlink:function(node){throw new FS.ErrnoError(1)}},stream_ops:{read:function(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(40)}}}}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<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>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 err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,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){if(!FS.FSNode){FS.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};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.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)}}})}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 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}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 err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}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(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}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(29)}},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){console.log("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(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}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(16)}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(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}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(22)}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(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}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;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=17)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(2)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(2)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(1)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(16)}if(!old_dir||!new_dir)throw new FS.ErrnoError(2);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(18)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(22)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(39)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(1)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(16)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(20)}return node.node_ops.readdir(node)},unlink:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(2)}if(!link.node_ops.readlink){throw new FS.ErrnoError(22)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(2)}if(!node.node_ops.getattr){throw new FS.ErrnoError(1)}return node.node_ops.getattr(node)},lstat:function(path){return FS.stat(path,true)},chmod:function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chmod(stream.node,mode)},chown:function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chown(stream.node,uid,gid)},truncate:function(path,len){if(len<0){throw new FS.ErrnoError(22)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(21)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(22)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(22)}FS.truncate(stream.node,len)},utime:function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(2)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(17)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(2)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;console.log("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:function(stream){return stream.fd===null},llseek:function(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(29)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(22)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.read){throw new FS.ErrnoError(22)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.write){throw new FS.ErrnoError(22)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(offset<0||length<=0){throw new FS.ErrnoError(22)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(19)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(95)}stream.stream_ops.allocate(stream,offset,length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(13)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(19)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(25)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:function(path,data,opts){opts=opts||{};opts.flags=opts.flags||"w";var stream=FS.open(path,opts.flags,opts.mode);if(typeof data==="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:function(){return FS.currentPath},chdir:function(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(2)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(20)}var err=FS.nodePermissions(lookup.node,"x");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path},createDefaultDirectories:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return length}});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device;if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);random_device=function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");random_device=function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}else{}if(!random_device){random_device=function(){abort("random_device")}}FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode("/proc/self","fd",16384|511,73);node.node_ops={lookup:function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(9);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin","r");var stdout=FS.open("/dev/stdout","w");var stderr=FS.open("/dev/stderr","w")},ensureErrnoError:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error";if(this.stack)Object.defineProperty(this,"stack",{value:(new Error).stack,writable:true})};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[2].forEach(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS}},init:function(input,output,error){FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},joinPath:function(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]=="/")path=path.substr(1);return path},absolutePath:function(relative,base){return PATH.resolve(base,relative)},standardizePath:function(path){return PATH.normalize(path)},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{___setErrNo(ret.error);return null}},analyzePath:function(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createFolder:function(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode)},createPath:function(parent,path,canRead,canWrite){parent=typeof parent==="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:function(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data==="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,"w");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(5)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},createLink:function(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);return FS.symlink(target,path)},forceLoadFile:function(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!=="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(Module["read"]){try{obj.contents=intArrayFromString(Module["read"](obj.url),true);obj.usedBytes=obj.contents.length}catch(e){success=false}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}if(!success)___setErrNo(5);return success},createLazyFile:function(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=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;console.log("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(5)}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(5)}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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function(dirfd,path){if(path[0]!=="/"){var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path}path=PATH.join2(dir,path)}return path},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR}throw e}HEAP32[buf>>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){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,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-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;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-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}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<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;if(typeof SDL==="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["preloadPlugins"].push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("warning: browser could not fully decode audio "+name+", trying slower base64 approach");function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};var EGL={errorCode:12288,defaultDisplayInitialized:false,currentContext:0,currentReadSurface:0,currentDrawSurface:0,contextAttributes:{alpha:false,depth:false,stencil:false,antialias:false},stringCache:{},setErrorCode:function(code){EGL.errorCode=code},chooseConfig:function(display,attribList,config,config_size,numConfigs){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(attribList){for(;;){var param=HEAP32[attribList>>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(this,call.argsList)}},inEventHandler:0,currentEventHandler:null,eventHandlers:[],isInternetExplorer:function(){return navigator.userAgent.indexOf("MSIE")!==-1||navigator.appVersion.indexOf("Trident/")>0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getBoundingClientRectOrZeros:function(target){return target.getBoundingClientRect?target.getBoundingClientRect():{left:0,top:0}},pageScrollPos:function(){if(window.pageXOffset>0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i<GL.MINI_TEMP_BUFFER_SIZE;i++){GL.miniTempBufferViews[i]=GL.miniTempBuffer.subarray(0,i+1)}},recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i<ret;i++){table[i]=null}return ret},MINI_TEMP_BUFFER_SIZE:256,miniTempBuffer:null,miniTempBufferViews:[0],getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i<result.length;++i){switch(type){case"Integer":HEAP32[p+i*4>>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[location]);if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i<e.touches.length;++i){var touch=e.touches[i];touches[touch.identifier]=touch}for(var i=0;i<e.changedTouches.length;++i){var touch=e.changedTouches[i];touches[touch.identifier]=touch;touch.changed=true}for(var i=0;i<e.targetTouches.length;++i){var touch=e.targetTouches[i];touches[touch.identifier].onTarget=true}var touchEvent=JSEvents.touchEvent;var ptr=touchEvent;HEAP32[ptr+4>>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;dynCall_vidd(GLFW.active.cursorPosFunc,GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;dynCall_viiii(GLFW.active.mouseButtonFunc,GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),"i8",ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),"i8",ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),"float",ALLOC_NORMAL)};if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.keyFunc=cbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.charFunc=cbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.mouseButtonFunc=cbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorPosFunc=cbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.scrollFunc=cbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.dropFunc=cbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowSizeFunc=cbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowCloseFunc=cbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowRefreshFunc=cbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++);if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++);if(i==GLFW.windows.length){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetCursorPos(winid,x,y){GLFW.getCursorPos(winid,x,y)}function _glfwGetKey(winid,key){return GLFW.getKey(winid,key)}function _glfwGetMouseButton(winid,button){return GLFW.getMouseButton(winid,button)}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorEnterFunc=cbfun}function _glfwSetCursorPosCallback(winid,cbfun){GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){GLFW.errorFunc=cbfun}function _glfwSetKeyCallback(winid,cbfun){GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowIconifyFunc=cbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _llvm_stackrestore(p){var self=_llvm_stacksave;var ret=self.LLVM_SAVEDSTACKS[p];self.LLVM_SAVEDSTACKS.splice(p,1);stackRestore(ret)}function _llvm_stacksave(){var self=_llvm_stacksave;if(!self.LLVM_SAVEDSTACKS){self.LLVM_SAVEDSTACKS=[]}self.LLVM_SAVEDSTACKS.push(stackSave());return self.LLVM_SAVEDSTACKS.length-1}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function _usleep(useconds){var msec=useconds/1e3;if((ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self["performance"]&&self["performance"]["now"]){var start=self["performance"]["now"]();while(self["performance"]["now"]()-start<msec){}}else{var start=Date.now();while(Date.now()-start<msec){}}return 0}function _nanosleep(rqtp,rmtp){var seconds=HEAP32[rqtp>>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));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 asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"mc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"l":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"sd":_emscripten_get_gamepad_status,"hd":_emscripten_get_heap_size,"Yc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Dc":_emscripten_glActiveTexture,"tc":_emscripten_glAttachShader,"lc":_emscripten_glBeginQueryEXT,"ec":_emscripten_glBindAttribLocation,"ac":_emscripten_glBindBuffer,"Wb":_emscripten_glBindFramebuffer,"Pb":_emscripten_glBindRenderbuffer,"Gb":_emscripten_glBindTexture,"wb":_emscripten_glBindVertexArrayOES,"ob":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"ee":_emscripten_glGetShaderInfoLog,"de":_emscripten_glGetShaderPrecisionFormat,"ce":_emscripten_glGetShaderSource,"be":_emscripten_glGetShaderiv,"ae":_emscripten_glGetString,"$d":_emscripten_glGetTexParameterfv,"_d":_emscripten_glGetTexParameteriv,"Zd":_emscripten_glGetUniformLocation,"Yd":_emscripten_glGetUniformfv,"Xd":_emscripten_glGetUniformiv,"Wd":_emscripten_glGetVertexAttribPointerv,"Vd":_emscripten_glGetVertexAttribfv,"Ud":_emscripten_glGetVertexAttribiv,"Td":_emscripten_glHint,"Sd":_emscripten_glIsBuffer,"Rd":_emscripten_glIsEnabled,"Qd":_emscripten_glIsFramebuffer,"Pd":_emscripten_glIsProgram,"Od":_emscripten_glIsQueryEXT,"Nd":_emscripten_glIsRenderbuffer,"Md":_emscripten_glIsShader,"Ld":_emscripten_glIsTexture,"Kd":_emscripten_glIsVertexArrayOES,"Jd":_emscripten_glLineWidth,"Id":_emscripten_glLinkProgram,"Hd":_emscripten_glPixelStorei,"Gd":_emscripten_glPolygonOffset,"Fd":_emscripten_glQueryCounterEXT,"Ed":_emscripten_glReadPixels,"Dd":_emscripten_glReleaseShaderCompiler,"Cd":_emscripten_glRenderbufferStorage,"Bd":_emscripten_glSampleCoverage,"Ad":_emscripten_glScissor,"zd":_emscripten_glShaderBinary,"yd":_emscripten_glShaderSource,"xd":_emscripten_glStencilFunc,"wd":_emscripten_glStencilFuncSeparate,"vd":_emscripten_glStencilMask,"ud":_emscripten_glStencilMaskSeparate,"td":_emscripten_glStencilOp,"rd":_emscripten_glStencilOpSeparate,"qd":_emscripten_glTexImage2D,"pd":_emscripten_glTexParameterf,"od":_emscripten_glTexParameterfv,"nd":_emscripten_glTexParameteri,"md":_emscripten_glTexParameteriv,"ld":_emscripten_glTexSubImage2D,"kd":_emscripten_glUniform1f,"jd":_emscripten_glUniform1fv,"id":_emscripten_glUniform1i,"gd":_emscripten_glUniform1iv,"fd":_emscripten_glUniform2f,"ed":_emscripten_glUniform2fv,"dd":_emscripten_glUniform2i,"cd":_emscripten_glUniform2iv,"bd":_emscripten_glUniform3f,"ad":_emscripten_glUniform3fv,"$c":_emscripten_glUniform3i,"_c":_emscripten_glUniform3iv,"Zc":_emscripten_glUniform4f,"Xc":_emscripten_glUniform4fv,"Wc":_emscripten_glUniform4i,"Vc":_emscripten_glUniform4iv,"Uc":_emscripten_glUniformMatrix2fv,"Tc":_emscripten_glUniformMatrix3fv,"Sc":_emscripten_glUniformMatrix4fv,"Rc":_emscripten_glUseProgram,"Qc":_emscripten_glValidateProgram,"Pc":_emscripten_glVertexAttrib1f,"Oc":_emscripten_glVertexAttrib1fv,"Nc":_emscripten_glVertexAttrib2f,"Mc":_emscripten_glVertexAttrib2fv,"Lc":_emscripten_glVertexAttrib3f,"Kc":_emscripten_glVertexAttrib3fv,"Jc":_emscripten_glVertexAttrib4f,"Ic":_emscripten_glVertexAttrib4fv,"Hc":_emscripten_glVertexAttribDivisorANGLE,"Gc":_emscripten_glVertexAttribPointer,"Fc":_emscripten_glViewport,"Ec":_emscripten_memcpy_big,"Cc":_emscripten_request_pointerlock,"Bc":_emscripten_resize_heap,"O":_emscripten_run_script,"Ac":_emscripten_sample_gamepad_data,"zc":_emscripten_set_click_callback_on_thread,"yc":_emscripten_set_fullscreenchange_callback_on_thread,"xc":_emscripten_set_gamepadconnected_callback_on_thread,"wc":_emscripten_set_gamepaddisconnected_callback_on_thread,"vc":_emscripten_set_keypress_callback_on_thread,"uc":_emscripten_set_main_loop,"sc":_emscripten_set_touchcancel_callback_on_thread,"rc":_emscripten_set_touchend_callback_on_thread,"qc":_emscripten_set_touchmove_callback_on_thread,"pc":_emscripten_set_touchstart_callback_on_thread,"oc":_exit,"nc":_glActiveTexture,"N":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"kc":_glBlendFunc,"q":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"jc":_glClearDepthf,"ic":_glCompileShader,"hc":_glCompressedTexImage2D,"gc":_glCreateProgram,"fc":_glCreateShader,"dc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"cc":_glDepthFunc,"H":_glDetachShader,"G":_glDisable,"o":_glDisableVertexAttribArray,"bc":_glDrawArrays,"$b":_glDrawElements,"u":_glEnable,"h":_glEnableVertexAttribArray,"_b":_glFrontFace,"n":_glGenBuffers,"Zb":_glGenTextures,"t":_glGetAttribLocation,"Yb":_glGetFloatv,"Xb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Vb":_glGetShaderInfoLog,"E":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Ub":_glLinkProgram,"Tb":_glPixelStorei,"Sb":_glReadPixels,"Rb":_glShaderSource,"Qb":_glTexImage2D,"g":_glTexParameteri,"Ob":_glUniform1i,"Nb":_glUniform4f,"Mb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Lb":_glViewport,"Kb":_glfwCreateWindow,"Jb":_glfwDefaultWindowHints,"Ib":_glfwDestroyWindow,"Hb":_glfwGetCursorPos,"Fb":_glfwGetKey,"Eb":_glfwGetMouseButton,"m":_glfwGetTime,"Db":_glfwInit,"Cb":_glfwMakeContextCurrent,"Bb":_glfwSetCharCallback,"Ab":_glfwSetCursorEnterCallback,"zb":_glfwSetCursorPosCallback,"yb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"tb":_glfwSetScrollCallback,"sb":_glfwSetWindowIconifyCallback,"rb":_glfwSetWindowShouldClose,"qb":_glfwSetWindowSizeCallback,"pb":_glfwSwapBuffers,"D":_glfwTerminate,"e":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"nb":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["le"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["te"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i<argc;i++){HEAP32[(argv>>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_billboard.wasm b/examples/web/models/models_billboard.wasm Binary files differnew file mode 100644 index 0000000..2ed68df --- /dev/null +++ b/examples/web/models/models_billboard.wasm diff --git a/examples/web/models/models_box_collisions.c b/examples/web/models/models_box_collisions.c index 71fe55f..9aa63db 100644 --- a/examples/web/models/models_box_collisions.c +++ b/examples/web/models/models_box_collisions.c @@ -18,23 +18,23 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world Camera camera = {{ 0.0f, 10.0f, 10.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; - + Vector3 playerPosition = { 0.0f, 1.0f, 2.0f }; Vector3 playerSize = { 1.0f, 2.0f, 1.0f }; -Color playerColor; - +Color playerColor = GREEN; + Vector3 enemyBoxPos = { -4.0f, 1.0f, 0.0f }; Vector3 enemyBoxSize = { 2.0f, 2.0f, 2.0f }; - + Vector3 enemySpherePos = { 4.0f, 0.0f, 0.0f }; float enemySphereSize = 1.5f; - + bool collision = false; //---------------------------------------------------------------------------------- @@ -43,7 +43,7 @@ bool collision = false; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -51,14 +51,12 @@ int main(void) //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [models] example - box collisions"); - playerColor = GREEN; - #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -81,40 +79,40 @@ void UpdateDrawFrame(void) { // Update //---------------------------------------------------------------------------------- - + // Move player if (IsKeyDown(KEY_RIGHT)) playerPosition.x += 0.2f; else if (IsKeyDown(KEY_LEFT)) playerPosition.x -= 0.2f; else if (IsKeyDown(KEY_DOWN)) playerPosition.z += 0.2f; else if (IsKeyDown(KEY_UP)) playerPosition.z -= 0.2f; - + collision = false; - + // Check collisions player vs enemy-box if (CheckCollisionBoxes( - (BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2, - playerPosition.y - playerSize.y/2, - playerPosition.z - playerSize.z/2 }, + (BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2, + playerPosition.y - playerSize.y/2, + playerPosition.z - playerSize.z/2 }, (Vector3){ playerPosition.x + playerSize.x/2, - playerPosition.y + playerSize.y/2, + playerPosition.y + playerSize.y/2, playerPosition.z + playerSize.z/2 }}, - (BoundingBox){(Vector3){ enemyBoxPos.x - enemyBoxSize.x/2, - enemyBoxPos.y - enemyBoxSize.y/2, - enemyBoxPos.z - enemyBoxSize.z/2 }, + (BoundingBox){(Vector3){ enemyBoxPos.x - enemyBoxSize.x/2, + enemyBoxPos.y - enemyBoxSize.y/2, + enemyBoxPos.z - enemyBoxSize.z/2 }, (Vector3){ enemyBoxPos.x + enemyBoxSize.x/2, - enemyBoxPos.y + enemyBoxSize.y/2, + enemyBoxPos.y + enemyBoxSize.y/2, enemyBoxPos.z + enemyBoxSize.z/2 }})) collision = true; - + // Check collisions player vs enemy-sphere if (CheckCollisionBoxSphere( - (BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2, - playerPosition.y - playerSize.y/2, - playerPosition.z - playerSize.z/2 }, + (BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2, + playerPosition.y - playerSize.y/2, + playerPosition.z - playerSize.z/2 }, (Vector3){ playerPosition.x + playerSize.x/2, - playerPosition.y + playerSize.y/2, - playerPosition.z + playerSize.z/2 }}, + playerPosition.y + playerSize.y/2, + playerPosition.z + playerSize.z/2 }}, enemySpherePos, enemySphereSize)) collision = true; - + if (collision) playerColor = RED; else playerColor = GREEN; //---------------------------------------------------------------------------------- @@ -125,23 +123,23 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - Begin3dMode(camera); + BeginMode3D(camera); // Draw enemy-box DrawCube(enemyBoxPos, enemyBoxSize.x, enemyBoxSize.y, enemyBoxSize.z, GRAY); DrawCubeWires(enemyBoxPos, enemyBoxSize.x, enemyBoxSize.y, enemyBoxSize.z, DARKGRAY); - + // Draw enemy-sphere DrawSphere(enemySpherePos, enemySphereSize, GRAY); DrawSphereWires(enemySpherePos, enemySphereSize, 16, 16, DARKGRAY); - + // Draw player DrawCubeV(playerPosition, playerSize, playerColor); DrawGrid(10, 1.0f); // Draw a grid - End3dMode(); - + EndMode3D(); + DrawText("Move player with cursors to collide", 220, 40, 20, GRAY); DrawFPS(10, 10); diff --git a/examples/web/models/models_box_collisions.html b/examples/web/models/models_box_collisions.html new file mode 100644 index 0000000..255e55b --- /dev/null +++ b/examples/web/models/models_box_collisions.html @@ -0,0 +1 @@ +<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/games property=og:url><meta content=raylib.com property=og:site_name><meta content="New hmtl5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:url><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header_part{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(https://www.raylib.com/common/img/raylib_logo_64x64.png)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}#emscripten_logo{display:inline-block;margin:0}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:20px;width:30px}#controls{display:inline-block;float:right;vertical-align:top;margin-top:30px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}</style></head><body><div id=header_part><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value=Fullscreen></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault()></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function SaveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var t=document.querySelector("#output");return t&&(t.value=""),function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.log(e),t&&(t.value+=e+"\n",t.scrollTop=t.scrollHeight)}}(),printErr:function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()},!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Date.now()<30||(t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!1,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(e){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script src=models_box_collisions.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_box_collisions.js b/examples/web/models/models_box_collisions.js new file mode 100644 index 0000000..aad0cf4 --- /dev/null +++ b/examples/web/models/models_box_collisions.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];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 require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;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)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["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);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["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"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}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=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["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)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];type=singleType||types[i];if(type===0){i++;continue}if(type=="i64")type="i32";setValue(ret+i,curr,type);if(previousType!==type){typeSize=getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(u8Array[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=u8Array[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[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<str.length;++i){var u=str.charCodeAt(i);if(u>=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 allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__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(0)}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)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269728,DYNAMICTOP_PTR=26816;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY<TOTAL_STACK)err("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+INITIAL_TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{if(typeof WebAssembly==="object"&&typeof WebAssembly.Memory==="function"){wasmMemory=new WebAssembly.Memory({"initial":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE});buffer=wasmMemory.buffer}else{buffer=new ArrayBuffer(INITIAL_TOTAL_MEMORY)}}updateGlobalBufferViews();HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();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 __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=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 ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}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"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_box_collisions.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){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(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};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 ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}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)},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.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(19)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(6)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(6)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(5)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var isPosixPlatform=process.platform!="win32";var fd=process.stdin.fd;if(isPosixPlatform){var usingDevice=false;try{fd=fs.openSync("/dev/stdin","r");usingDevice=true}catch(e){}}try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(usingDevice){fs.closeSync(fd)}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}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(1)}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<node.usedBytes;++i)arr.push(node.contents[i]);return arr}return node.contents},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array;if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|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(new ArrayBuffer(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<newSize)node.contents.push(0);node.usedBytes=newSize},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[2]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(39)}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name]},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(39)}delete parent.contents[name]},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(22)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(22)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(12)}buffer.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var IDBFS={dbs:{},indexedDB:function(){if(typeof indexedDB!=="undefined")return indexedDB;var ret=null;if(typeof window==="object")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,"IDBFS used, but indexedDB not supported");return ret},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function(mount){return MEMFS.mount.apply(null,arguments)},syncfs:function(mount,populate,callback){IDBFS.getLocalSet(mount,function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},getDB:function(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback("Unable to connect to IndexedDB")}req.onupgradeneeded=function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}};req.onsuccess=function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db)};req.onerror=function(e){callback(this.error);e.preventDefault()}},getLocalSet:function(mount,callback){var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return function(p){return PATH.join2(root,p)}}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:"local",entries:entries})},getRemoteSet:function(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,function(err,db){if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=function(e){callback(this.error);e.preventDefault()};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db:db,entries:entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()}}catch(e){return callback(e)}})},loadLocalEntry:function(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error("node type not supported"))}},storeLocalEntry:function(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode)}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp)}catch(e){return callback(e)}callback(null)},removeLocalEntry:function(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:function(store,path,callback){var req=store.get(path);req.onsuccess=function(event){callback(null,event.target.result)};req.onerror=function(e){callback(this.error);e.preventDefault()}},storeRemoteEntry:function(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},removeRemoteEntry:function(store,path,callback){var req=store.delete(path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},reconcile:function(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join("/");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,parts[i],WORKERFS.DIR_MODE,0)}parent=createdParents[curr]}return parent}function base(path){var parts=path.split("/");return parts[parts.length-1]}Array.prototype.forEach.call(mount.opts["files"]||[],function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate)});(mount.opts["blobs"]||[]).forEach(function(obj){WORKERFS.createNode(ensureParent(obj["name"]),base(obj["name"]),WORKERFS.FILE_MODE,0,obj["data"])});(mount.opts["packages"]||[]).forEach(function(pack){pack["metadata"].files.forEach(function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack["blob"].slice(file.start,file.end))})});return root},createNode:function(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents}else{node.size=4096;node.contents={}}if(parent){parent.contents[name]=node}return node},node_ops:{getattr:function(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)}},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}},lookup:function(parent,name){throw new FS.ErrnoError(2)},mknod:function(parent,name,mode,dev){throw new FS.ErrnoError(1)},rename:function(oldNode,newDir,newName){throw new FS.ErrnoError(1)},unlink:function(parent,name){throw new FS.ErrnoError(1)},rmdir:function(parent,name){throw new FS.ErrnoError(1)},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newName,oldPath){throw new FS.ErrnoError(1)},readlink:function(node){throw new FS.ErrnoError(1)}},stream_ops:{read:function(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(40)}}}}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<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>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 err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,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){if(!FS.FSNode){FS.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};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.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)}}})}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 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}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 err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}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(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}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(29)}},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){console.log("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(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}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(16)}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(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}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(22)}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(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}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;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=17)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(2)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(2)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(1)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(16)}if(!old_dir||!new_dir)throw new FS.ErrnoError(2);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(18)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(22)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(39)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(1)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(16)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(20)}return node.node_ops.readdir(node)},unlink:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(2)}if(!link.node_ops.readlink){throw new FS.ErrnoError(22)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(2)}if(!node.node_ops.getattr){throw new FS.ErrnoError(1)}return node.node_ops.getattr(node)},lstat:function(path){return FS.stat(path,true)},chmod:function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chmod(stream.node,mode)},chown:function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chown(stream.node,uid,gid)},truncate:function(path,len){if(len<0){throw new FS.ErrnoError(22)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(21)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(22)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(22)}FS.truncate(stream.node,len)},utime:function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(2)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(17)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(2)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;console.log("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:function(stream){return stream.fd===null},llseek:function(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(29)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(22)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.read){throw new FS.ErrnoError(22)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.write){throw new FS.ErrnoError(22)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(offset<0||length<=0){throw new FS.ErrnoError(22)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(19)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(95)}stream.stream_ops.allocate(stream,offset,length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(13)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(19)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(25)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:function(path,data,opts){opts=opts||{};opts.flags=opts.flags||"w";var stream=FS.open(path,opts.flags,opts.mode);if(typeof data==="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:function(){return FS.currentPath},chdir:function(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(2)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(20)}var err=FS.nodePermissions(lookup.node,"x");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path},createDefaultDirectories:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return length}});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device;if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);random_device=function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");random_device=function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}else{}if(!random_device){random_device=function(){abort("random_device")}}FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode("/proc/self","fd",16384|511,73);node.node_ops={lookup:function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(9);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin","r");var stdout=FS.open("/dev/stdout","w");var stderr=FS.open("/dev/stderr","w")},ensureErrnoError:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error";if(this.stack)Object.defineProperty(this,"stack",{value:(new Error).stack,writable:true})};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[2].forEach(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS}},init:function(input,output,error){FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},joinPath:function(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]=="/")path=path.substr(1);return path},absolutePath:function(relative,base){return PATH.resolve(base,relative)},standardizePath:function(path){return PATH.normalize(path)},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{___setErrNo(ret.error);return null}},analyzePath:function(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createFolder:function(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode)},createPath:function(parent,path,canRead,canWrite){parent=typeof parent==="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:function(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data==="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,"w");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(5)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},createLink:function(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);return FS.symlink(target,path)},forceLoadFile:function(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!=="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(Module["read"]){try{obj.contents=intArrayFromString(Module["read"](obj.url),true);obj.usedBytes=obj.contents.length}catch(e){success=false}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}if(!success)___setErrNo(5);return success},createLazyFile:function(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=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;console.log("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(5)}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(5)}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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function(dirfd,path){if(path[0]!=="/"){var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path}path=PATH.join2(dir,path)}return path},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR}throw e}HEAP32[buf>>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){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,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-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;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-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}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<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;if(typeof SDL==="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["preloadPlugins"].push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("warning: browser could not fully decode audio "+name+", trying slower base64 approach");function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};var EGL={errorCode:12288,defaultDisplayInitialized:false,currentContext:0,currentReadSurface:0,currentDrawSurface:0,contextAttributes:{alpha:false,depth:false,stencil:false,antialias:false},stringCache:{},setErrorCode:function(code){EGL.errorCode=code},chooseConfig:function(display,attribList,config,config_size,numConfigs){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(attribList){for(;;){var param=HEAP32[attribList>>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(this,call.argsList)}},inEventHandler:0,currentEventHandler:null,eventHandlers:[],isInternetExplorer:function(){return navigator.userAgent.indexOf("MSIE")!==-1||navigator.appVersion.indexOf("Trident/")>0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getBoundingClientRectOrZeros:function(target){return target.getBoundingClientRect?target.getBoundingClientRect():{left:0,top:0}},pageScrollPos:function(){if(window.pageXOffset>0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i<GL.MINI_TEMP_BUFFER_SIZE;i++){GL.miniTempBufferViews[i]=GL.miniTempBuffer.subarray(0,i+1)}},recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i<ret;i++){table[i]=null}return ret},MINI_TEMP_BUFFER_SIZE:256,miniTempBuffer:null,miniTempBufferViews:[0],getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i<result.length;++i){switch(type){case"Integer":HEAP32[p+i*4>>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[location]);if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i<e.touches.length;++i){var touch=e.touches[i];touches[touch.identifier]=touch}for(var i=0;i<e.changedTouches.length;++i){var touch=e.changedTouches[i];touches[touch.identifier]=touch;touch.changed=true}for(var i=0;i<e.targetTouches.length;++i){var touch=e.targetTouches[i];touches[touch.identifier].onTarget=true}var touchEvent=JSEvents.touchEvent;var ptr=touchEvent;HEAP32[ptr+4>>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;dynCall_vidd(GLFW.active.cursorPosFunc,GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;dynCall_viiii(GLFW.active.mouseButtonFunc,GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),"i8",ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),"i8",ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),"float",ALLOC_NORMAL)};if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.keyFunc=cbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.charFunc=cbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.mouseButtonFunc=cbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorPosFunc=cbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.scrollFunc=cbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.dropFunc=cbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowSizeFunc=cbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowCloseFunc=cbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowRefreshFunc=cbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++);if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++);if(i==GLFW.windows.length){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetCursorPos(winid,x,y){GLFW.getCursorPos(winid,x,y)}function _glfwGetKey(winid,key){return GLFW.getKey(winid,key)}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorEnterFunc=cbfun}function _glfwSetCursorPosCallback(winid,cbfun){GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){GLFW.errorFunc=cbfun}function _glfwSetKeyCallback(winid,cbfun){GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowIconifyFunc=cbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _llvm_stackrestore(p){var self=_llvm_stacksave;var ret=self.LLVM_SAVEDSTACKS[p];self.LLVM_SAVEDSTACKS.splice(p,1);stackRestore(ret)}function _llvm_stacksave(){var self=_llvm_stacksave;if(!self.LLVM_SAVEDSTACKS){self.LLVM_SAVEDSTACKS=[]}self.LLVM_SAVEDSTACKS.push(stackSave());return self.LLVM_SAVEDSTACKS.length-1}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function _usleep(useconds){var msec=useconds/1e3;if((ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self["performance"]&&self["performance"]["now"]){var start=self["performance"]["now"]();while(self["performance"]["now"]()-start<msec){}}else{var start=Date.now();while(Date.now()-start<msec){}}return 0}function _nanosleep(rqtp,rmtp){var seconds=HEAP32[rqtp>>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));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 asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"lc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"l":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"rd":_emscripten_get_gamepad_status,"gd":_emscripten_get_heap_size,"Xc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Cc":_emscripten_glActiveTexture,"sc":_emscripten_glAttachShader,"kc":_emscripten_glBeginQueryEXT,"dc":_emscripten_glBindAttribLocation,"$b":_emscripten_glBindBuffer,"Vb":_emscripten_glBindFramebuffer,"Ob":_emscripten_glBindRenderbuffer,"Fb":_emscripten_glBindTexture,"vb":_emscripten_glBindVertexArrayOES,"ob":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"de":_emscripten_glGetShaderInfoLog,"ce":_emscripten_glGetShaderPrecisionFormat,"be":_emscripten_glGetShaderSource,"ae":_emscripten_glGetShaderiv,"$d":_emscripten_glGetString,"_d":_emscripten_glGetTexParameterfv,"Zd":_emscripten_glGetTexParameteriv,"Yd":_emscripten_glGetUniformLocation,"Xd":_emscripten_glGetUniformfv,"Wd":_emscripten_glGetUniformiv,"Vd":_emscripten_glGetVertexAttribPointerv,"Ud":_emscripten_glGetVertexAttribfv,"Td":_emscripten_glGetVertexAttribiv,"Sd":_emscripten_glHint,"Rd":_emscripten_glIsBuffer,"Qd":_emscripten_glIsEnabled,"Pd":_emscripten_glIsFramebuffer,"Od":_emscripten_glIsProgram,"Nd":_emscripten_glIsQueryEXT,"Md":_emscripten_glIsRenderbuffer,"Ld":_emscripten_glIsShader,"Kd":_emscripten_glIsTexture,"Jd":_emscripten_glIsVertexArrayOES,"Id":_emscripten_glLineWidth,"Hd":_emscripten_glLinkProgram,"Gd":_emscripten_glPixelStorei,"Fd":_emscripten_glPolygonOffset,"Ed":_emscripten_glQueryCounterEXT,"Dd":_emscripten_glReadPixels,"Cd":_emscripten_glReleaseShaderCompiler,"Bd":_emscripten_glRenderbufferStorage,"Ad":_emscripten_glSampleCoverage,"zd":_emscripten_glScissor,"yd":_emscripten_glShaderBinary,"xd":_emscripten_glShaderSource,"wd":_emscripten_glStencilFunc,"vd":_emscripten_glStencilFuncSeparate,"ud":_emscripten_glStencilMask,"td":_emscripten_glStencilMaskSeparate,"sd":_emscripten_glStencilOp,"qd":_emscripten_glStencilOpSeparate,"pd":_emscripten_glTexImage2D,"od":_emscripten_glTexParameterf,"nd":_emscripten_glTexParameterfv,"md":_emscripten_glTexParameteri,"ld":_emscripten_glTexParameteriv,"kd":_emscripten_glTexSubImage2D,"jd":_emscripten_glUniform1f,"id":_emscripten_glUniform1fv,"hd":_emscripten_glUniform1i,"fd":_emscripten_glUniform1iv,"ed":_emscripten_glUniform2f,"dd":_emscripten_glUniform2fv,"cd":_emscripten_glUniform2i,"bd":_emscripten_glUniform2iv,"ad":_emscripten_glUniform3f,"$c":_emscripten_glUniform3fv,"_c":_emscripten_glUniform3i,"Zc":_emscripten_glUniform3iv,"Yc":_emscripten_glUniform4f,"Wc":_emscripten_glUniform4fv,"Vc":_emscripten_glUniform4i,"Uc":_emscripten_glUniform4iv,"Tc":_emscripten_glUniformMatrix2fv,"Sc":_emscripten_glUniformMatrix3fv,"Rc":_emscripten_glUniformMatrix4fv,"Qc":_emscripten_glUseProgram,"Pc":_emscripten_glValidateProgram,"Oc":_emscripten_glVertexAttrib1f,"Nc":_emscripten_glVertexAttrib1fv,"Mc":_emscripten_glVertexAttrib2f,"Lc":_emscripten_glVertexAttrib2fv,"Kc":_emscripten_glVertexAttrib3f,"Jc":_emscripten_glVertexAttrib3fv,"Ic":_emscripten_glVertexAttrib4f,"Hc":_emscripten_glVertexAttrib4fv,"Gc":_emscripten_glVertexAttribDivisorANGLE,"Fc":_emscripten_glVertexAttribPointer,"Ec":_emscripten_glViewport,"Dc":_emscripten_memcpy_big,"Bc":_emscripten_request_pointerlock,"Ac":_emscripten_resize_heap,"O":_emscripten_run_script,"zc":_emscripten_sample_gamepad_data,"yc":_emscripten_set_click_callback_on_thread,"xc":_emscripten_set_fullscreenchange_callback_on_thread,"wc":_emscripten_set_gamepadconnected_callback_on_thread,"vc":_emscripten_set_gamepaddisconnected_callback_on_thread,"uc":_emscripten_set_keypress_callback_on_thread,"tc":_emscripten_set_main_loop,"rc":_emscripten_set_touchcancel_callback_on_thread,"qc":_emscripten_set_touchend_callback_on_thread,"pc":_emscripten_set_touchmove_callback_on_thread,"oc":_emscripten_set_touchstart_callback_on_thread,"nc":_exit,"mc":_glActiveTexture,"N":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"jc":_glBlendFunc,"q":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"ic":_glClearDepthf,"hc":_glCompileShader,"gc":_glCompressedTexImage2D,"fc":_glCreateProgram,"ec":_glCreateShader,"cc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"bc":_glDepthFunc,"H":_glDetachShader,"G":_glDisable,"o":_glDisableVertexAttribArray,"ac":_glDrawArrays,"_b":_glDrawElements,"u":_glEnable,"h":_glEnableVertexAttribArray,"Zb":_glFrontFace,"n":_glGenBuffers,"Yb":_glGenTextures,"t":_glGetAttribLocation,"Xb":_glGetFloatv,"Wb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Ub":_glGetShaderInfoLog,"E":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Tb":_glLinkProgram,"Sb":_glPixelStorei,"Rb":_glReadPixels,"Qb":_glShaderSource,"Pb":_glTexImage2D,"g":_glTexParameteri,"Nb":_glUniform1i,"Mb":_glUniform4f,"Lb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Kb":_glViewport,"Jb":_glfwCreateWindow,"Ib":_glfwDefaultWindowHints,"Hb":_glfwDestroyWindow,"Gb":_glfwGetCursorPos,"Eb":_glfwGetKey,"m":_glfwGetTime,"Db":_glfwInit,"Cb":_glfwMakeContextCurrent,"Bb":_glfwSetCharCallback,"Ab":_glfwSetCursorEnterCallback,"zb":_glfwSetCursorPosCallback,"yb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"wb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"tb":_glfwSetScrollCallback,"sb":_glfwSetWindowIconifyCallback,"rb":_glfwSetWindowShouldClose,"qb":_glfwSetWindowSizeCallback,"pb":_glfwSwapBuffers,"D":_glfwTerminate,"e":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"nb":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i<argc;i++){HEAP32[(argv>>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_box_collisions.wasm b/examples/web/models/models_box_collisions.wasm Binary files differnew file mode 100644 index 0000000..d15a7a2 --- /dev/null +++ b/examples/web/models/models_box_collisions.wasm diff --git a/examples/web/models/models_cubicmap.c b/examples/web/models/models_cubicmap.c index 9f87992..a4cb271 100644 --- a/examples/web/models/models_cubicmap.c +++ b/examples/web/models/models_cubicmap.c @@ -18,14 +18,14 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world Camera camera = {{ 16.0f, 14.0f, 16.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; -Texture2D cubicmap; -Model map; +Texture2D cubicmap = { 0 }; +Model model = { 0 }; Vector3 mapPosition = { -16.0f, 0.0f, -8.0f }; // Set model position @@ -35,7 +35,7 @@ Vector3 mapPosition = { -16.0f, 0.0f, -8.0f }; // Set model posi void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -45,16 +45,16 @@ int main(void) Image image = LoadImage("resources/cubicmap.png"); // Load cubicmap image (RAM) cubicmap = LoadTextureFromImage(image); // Convert image to texture to display (VRAM) - + Mesh mesh = GenMeshCubicmap(image, (Vector3){ 1.0f, 1.0f, 1.0f }); - map = LoadModelFromMesh(mesh); - + model = LoadModelFromMesh(mesh); + // NOTE: By default each cube is mapped to one part of texture atlas Texture2D texture = LoadTexture("resources/cubicmap_atlas.png"); // Load map texture - map.material.maps[MAP_DIFFUSE].texture = texture; // Set map diffuse texture + model.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set map diffuse texture UnloadImage(image); // Unload cubesmap image from RAM, already uploaded to VRAM - + SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode #if defined(PLATFORM_WEB) @@ -62,7 +62,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -74,7 +74,7 @@ int main(void) //-------------------------------------------------------------------------------------- UnloadTexture(cubicmap); // Unload cubicmap texture UnloadTexture(texture); // Unload map texture - UnloadModel(map); // Unload map model + UnloadModel(model); // Unload map model CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -98,15 +98,15 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - Begin3dMode(camera); + BeginMode3D(camera); + + DrawModel(model, mapPosition, 1.0f, WHITE); - DrawModel(map, mapPosition, 1.0f, WHITE); + EndMode3D(); - End3dMode(); - DrawTextureEx(cubicmap, (Vector2){ screenWidth - cubicmap.width*4 - 20, 20 }, 0.0f, 4.0f, WHITE); DrawRectangleLines(screenWidth - cubicmap.width*4 - 20, 20, cubicmap.width*4, cubicmap.height*4, GREEN); - + DrawText("cubicmap image used to", 658, 90, 10, GRAY); DrawText("generate map 3d model", 658, 104, 10, GRAY); diff --git a/examples/web/models/models_cubicmap.data b/examples/web/models/models_cubicmap.data Binary files differnew file mode 100644 index 0000000..c7df666 --- /dev/null +++ b/examples/web/models/models_cubicmap.data diff --git a/examples/web/models/models_cubicmap.html b/examples/web/models/models_cubicmap.html new file mode 100644 index 0000000..7ad93af --- /dev/null +++ b/examples/web/models/models_cubicmap.html @@ -0,0 +1 @@ +<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/games property=og:url><meta content=raylib.com property=og:site_name><meta content="New hmtl5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:url><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header_part{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(https://www.raylib.com/common/img/raylib_logo_64x64.png)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}#emscripten_logo{display:inline-block;margin:0}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:20px;width:30px}#controls{display:inline-block;float:right;vertical-align:top;margin-top:30px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}</style></head><body><div id=header_part><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value=Fullscreen></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault()></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function SaveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var t=document.querySelector("#output");return t&&(t.value=""),function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.log(e),t&&(t.value+=e+"\n",t.scrollTop=t.scrollHeight)}}(),printErr:function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()},!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Date.now()<30||(t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!1,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(e){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script src=models_cubicmap.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_cubicmap.js b/examples/web/models/models_cubicmap.js new file mode 100644 index 0000000..29f3080 --- /dev/null +++ b/examples/web/models/models_cubicmap.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_cubicmap.data";var REMOTE_PACKAGE_BASE="models_cubicmap.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i<files.length;++i){new DataRequest(files[i].start,files[i].end,files[i].audio).open("GET",files[i].filename)}function processPackageData(arrayBuffer){Module.finishedDataFileDownloads++;assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);var ptr=Module["getMemory"](byteArray.length);Module["HEAPU8"].set(byteArray,ptr);DataRequest.prototype.byteArray=Module["HEAPU8"].subarray(ptr,ptr+byteArray.length);var files=metadata.files;for(var i=0;i<files.length;++i){DataRequest.prototype.requests[files[i].filename].onload()}Module["removeRunDependency"]("datafile_models/models_cubicmap.data")}Module["addRunDependency"]("datafile_models/models_cubicmap.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[{"start":0,"audio":0,"end":201,"filename":"/resources/cubicmap.png"},{"start":201,"audio":0,"end":37426,"filename":"/resources/cubicmap_atlas.png"}],"remote_package_size":37426,"package_uuid":"4b0e294a-be07-4f9a-9610-0579e75a3547"})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];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 require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;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)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["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);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["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"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}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=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["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)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];type=singleType||types[i];if(type===0){i++;continue}if(type=="i64")type="i32";setValue(ret+i,curr,type);if(previousType!==type){typeSize=getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}function getMemory(size){if(!runtimeInitialized)return dynamicAlloc(size);return _malloc(size)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(u8Array[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=u8Array[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[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<str.length;++i){var u=str.charCodeAt(i);if(u>=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 allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__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(0)}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)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5273696,DYNAMICTOP_PTR=30784;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY<TOTAL_STACK)err("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+INITIAL_TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{if(typeof WebAssembly==="object"&&typeof WebAssembly.Memory==="function"){wasmMemory=new WebAssembly.Memory({"initial":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE});buffer=wasmMemory.buffer}else{buffer=new ArrayBuffer(INITIAL_TOTAL_MEMORY)}}updateGlobalBufferViews();HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();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 __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=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 ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}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"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_cubicmap.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){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(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};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 ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}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)},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.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(19)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(6)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(6)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(5)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var isPosixPlatform=process.platform!="win32";var fd=process.stdin.fd;if(isPosixPlatform){var usingDevice=false;try{fd=fs.openSync("/dev/stdin","r");usingDevice=true}catch(e){}}try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(usingDevice){fs.closeSync(fd)}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}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(1)}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<node.usedBytes;++i)arr.push(node.contents[i]);return arr}return node.contents},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array;if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|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(new ArrayBuffer(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<newSize)node.contents.push(0);node.usedBytes=newSize},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[2]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(39)}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name]},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(39)}delete parent.contents[name]},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(22)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(22)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(12)}buffer.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var IDBFS={dbs:{},indexedDB:function(){if(typeof indexedDB!=="undefined")return indexedDB;var ret=null;if(typeof window==="object")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,"IDBFS used, but indexedDB not supported");return ret},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function(mount){return MEMFS.mount.apply(null,arguments)},syncfs:function(mount,populate,callback){IDBFS.getLocalSet(mount,function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},getDB:function(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback("Unable to connect to IndexedDB")}req.onupgradeneeded=function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}};req.onsuccess=function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db)};req.onerror=function(e){callback(this.error);e.preventDefault()}},getLocalSet:function(mount,callback){var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return function(p){return PATH.join2(root,p)}}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:"local",entries:entries})},getRemoteSet:function(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,function(err,db){if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=function(e){callback(this.error);e.preventDefault()};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db:db,entries:entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()}}catch(e){return callback(e)}})},loadLocalEntry:function(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error("node type not supported"))}},storeLocalEntry:function(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode)}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp)}catch(e){return callback(e)}callback(null)},removeLocalEntry:function(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:function(store,path,callback){var req=store.get(path);req.onsuccess=function(event){callback(null,event.target.result)};req.onerror=function(e){callback(this.error);e.preventDefault()}},storeRemoteEntry:function(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},removeRemoteEntry:function(store,path,callback){var req=store.delete(path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},reconcile:function(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join("/");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,parts[i],WORKERFS.DIR_MODE,0)}parent=createdParents[curr]}return parent}function base(path){var parts=path.split("/");return parts[parts.length-1]}Array.prototype.forEach.call(mount.opts["files"]||[],function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate)});(mount.opts["blobs"]||[]).forEach(function(obj){WORKERFS.createNode(ensureParent(obj["name"]),base(obj["name"]),WORKERFS.FILE_MODE,0,obj["data"])});(mount.opts["packages"]||[]).forEach(function(pack){pack["metadata"].files.forEach(function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack["blob"].slice(file.start,file.end))})});return root},createNode:function(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents}else{node.size=4096;node.contents={}}if(parent){parent.contents[name]=node}return node},node_ops:{getattr:function(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)}},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}},lookup:function(parent,name){throw new FS.ErrnoError(2)},mknod:function(parent,name,mode,dev){throw new FS.ErrnoError(1)},rename:function(oldNode,newDir,newName){throw new FS.ErrnoError(1)},unlink:function(parent,name){throw new FS.ErrnoError(1)},rmdir:function(parent,name){throw new FS.ErrnoError(1)},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newName,oldPath){throw new FS.ErrnoError(1)},readlink:function(node){throw new FS.ErrnoError(1)}},stream_ops:{read:function(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(40)}}}}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<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>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 err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,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){if(!FS.FSNode){FS.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};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.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)}}})}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 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}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 err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}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(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}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(29)}},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){console.log("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(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}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(16)}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(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}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(22)}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(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}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;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=17)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(2)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(2)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(1)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(16)}if(!old_dir||!new_dir)throw new FS.ErrnoError(2);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(18)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(22)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(39)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(1)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(16)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(20)}return node.node_ops.readdir(node)},unlink:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(2)}if(!link.node_ops.readlink){throw new FS.ErrnoError(22)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(2)}if(!node.node_ops.getattr){throw new FS.ErrnoError(1)}return node.node_ops.getattr(node)},lstat:function(path){return FS.stat(path,true)},chmod:function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chmod(stream.node,mode)},chown:function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chown(stream.node,uid,gid)},truncate:function(path,len){if(len<0){throw new FS.ErrnoError(22)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(21)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(22)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(22)}FS.truncate(stream.node,len)},utime:function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(2)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(17)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(2)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;console.log("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:function(stream){return stream.fd===null},llseek:function(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(29)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(22)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.read){throw new FS.ErrnoError(22)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.write){throw new FS.ErrnoError(22)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(offset<0||length<=0){throw new FS.ErrnoError(22)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(19)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(95)}stream.stream_ops.allocate(stream,offset,length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(13)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(19)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(25)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:function(path,data,opts){opts=opts||{};opts.flags=opts.flags||"w";var stream=FS.open(path,opts.flags,opts.mode);if(typeof data==="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:function(){return FS.currentPath},chdir:function(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(2)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(20)}var err=FS.nodePermissions(lookup.node,"x");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path},createDefaultDirectories:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return length}});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device;if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);random_device=function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");random_device=function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}else{}if(!random_device){random_device=function(){abort("random_device")}}FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode("/proc/self","fd",16384|511,73);node.node_ops={lookup:function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(9);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin","r");var stdout=FS.open("/dev/stdout","w");var stderr=FS.open("/dev/stderr","w")},ensureErrnoError:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error";if(this.stack)Object.defineProperty(this,"stack",{value:(new Error).stack,writable:true})};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[2].forEach(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS}},init:function(input,output,error){FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},joinPath:function(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]=="/")path=path.substr(1);return path},absolutePath:function(relative,base){return PATH.resolve(base,relative)},standardizePath:function(path){return PATH.normalize(path)},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{___setErrNo(ret.error);return null}},analyzePath:function(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createFolder:function(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode)},createPath:function(parent,path,canRead,canWrite){parent=typeof parent==="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:function(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data==="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,"w");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(5)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},createLink:function(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);return FS.symlink(target,path)},forceLoadFile:function(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!=="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(Module["read"]){try{obj.contents=intArrayFromString(Module["read"](obj.url),true);obj.usedBytes=obj.contents.length}catch(e){success=false}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}if(!success)___setErrNo(5);return success},createLazyFile:function(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=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;console.log("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(5)}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(5)}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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function(dirfd,path){if(path[0]!=="/"){var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path}path=PATH.join2(dir,path)}return path},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR}throw e}HEAP32[buf>>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){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,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-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;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-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}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<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;if(typeof SDL==="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["preloadPlugins"].push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("warning: browser could not fully decode audio "+name+", trying slower base64 approach");function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};var EGL={errorCode:12288,defaultDisplayInitialized:false,currentContext:0,currentReadSurface:0,currentDrawSurface:0,contextAttributes:{alpha:false,depth:false,stencil:false,antialias:false},stringCache:{},setErrorCode:function(code){EGL.errorCode=code},chooseConfig:function(display,attribList,config,config_size,numConfigs){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(attribList){for(;;){var param=HEAP32[attribList>>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(this,call.argsList)}},inEventHandler:0,currentEventHandler:null,eventHandlers:[],isInternetExplorer:function(){return navigator.userAgent.indexOf("MSIE")!==-1||navigator.appVersion.indexOf("Trident/")>0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getBoundingClientRectOrZeros:function(target){return target.getBoundingClientRect?target.getBoundingClientRect():{left:0,top:0}},pageScrollPos:function(){if(window.pageXOffset>0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i<GL.MINI_TEMP_BUFFER_SIZE;i++){GL.miniTempBufferViews[i]=GL.miniTempBuffer.subarray(0,i+1)}},recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i<ret;i++){table[i]=null}return ret},MINI_TEMP_BUFFER_SIZE:256,miniTempBuffer:null,miniTempBufferViews:[0],getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i<result.length;++i){switch(type){case"Integer":HEAP32[p+i*4>>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[location]);if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i<e.touches.length;++i){var touch=e.touches[i];touches[touch.identifier]=touch}for(var i=0;i<e.changedTouches.length;++i){var touch=e.changedTouches[i];touches[touch.identifier]=touch;touch.changed=true}for(var i=0;i<e.targetTouches.length;++i){var touch=e.targetTouches[i];touches[touch.identifier].onTarget=true}var touchEvent=JSEvents.touchEvent;var ptr=touchEvent;HEAP32[ptr+4>>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;dynCall_vidd(GLFW.active.cursorPosFunc,GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;dynCall_viiii(GLFW.active.mouseButtonFunc,GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),"i8",ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),"i8",ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),"float",ALLOC_NORMAL)};if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.keyFunc=cbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.charFunc=cbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.mouseButtonFunc=cbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorPosFunc=cbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.scrollFunc=cbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.dropFunc=cbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowSizeFunc=cbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowCloseFunc=cbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowRefreshFunc=cbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++);if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++);if(i==GLFW.windows.length){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetCursorPos(winid,x,y){GLFW.getCursorPos(winid,x,y)}function _glfwGetKey(winid,key){return GLFW.getKey(winid,key)}function _glfwGetMouseButton(winid,button){return GLFW.getMouseButton(winid,button)}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorEnterFunc=cbfun}function _glfwSetCursorPosCallback(winid,cbfun){GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){GLFW.errorFunc=cbfun}function _glfwSetKeyCallback(winid,cbfun){GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowIconifyFunc=cbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _llvm_stackrestore(p){var self=_llvm_stacksave;var ret=self.LLVM_SAVEDSTACKS[p];self.LLVM_SAVEDSTACKS.splice(p,1);stackRestore(ret)}function _llvm_stacksave(){var self=_llvm_stacksave;if(!self.LLVM_SAVEDSTACKS){self.LLVM_SAVEDSTACKS=[]}self.LLVM_SAVEDSTACKS.push(stackSave());return self.LLVM_SAVEDSTACKS.length-1}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function _usleep(useconds){var msec=useconds/1e3;if((ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self["performance"]&&self["performance"]["now"]){var start=self["performance"]["now"]();while(self["performance"]["now"]()-start<msec){}}else{var start=Date.now();while(Date.now()-start<msec){}}return 0}function _nanosleep(rqtp,rmtp){var seconds=HEAP32[rqtp>>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));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 asmGlobalArg={};var asmLibraryArg={"d":abort,"b":___assert_fail,"qc":___lock,"F":___setErrNo,"fb":___syscall140,"Wa":___syscall145,"E":___syscall146,"q":___syscall221,"ra":___syscall5,"D":___syscall54,"Y":___syscall6,"C":___unlock,"B":_eglGetProcAddress,"X":_emscripten_exit_pointerlock,"vd":_emscripten_get_gamepad_status,"kd":_emscripten_get_heap_size,"$c":_emscripten_get_num_gamepads,"W":_emscripten_get_pointerlock_status,"Gc":_emscripten_glActiveTexture,"wc":_emscripten_glAttachShader,"pc":_emscripten_glBeginQueryEXT,"ic":_emscripten_glBindAttribLocation,"fc":_emscripten_glBindBuffer,"ac":_emscripten_glBindFramebuffer,"Vb":_emscripten_glBindRenderbuffer,"Qb":_emscripten_glBindTexture,"Gb":_emscripten_glBindVertexArrayOES,"vb":_emscripten_glBlendColor,"rb":_emscripten_glBlendEquation,"qb":_emscripten_glBlendEquationSeparate,"pb":_emscripten_glBlendFunc,"ob":_emscripten_glBlendFuncSeparate,"nb":_emscripten_glBufferData,"mb":_emscripten_glBufferSubData,"lb":_emscripten_glCheckFramebufferStatus,"kb":_emscripten_glClear,"jb":_emscripten_glClearColor,"ib":_emscripten_glClearDepthf,"hb":_emscripten_glClearStencil,"gb":_emscripten_glColorMask,"eb":_emscripten_glCompileShader,"db":_emscripten_glCompressedTexImage2D,"cb":_emscripten_glCompressedTexSubImage2D,"bb":_emscripten_glCopyTexImage2D,"ab":_emscripten_glCopyTexSubImage2D,"$a":_emscripten_glCreateProgram,"_a":_emscripten_glCreateShader,"Za":_emscripten_glCullFace,"Ya":_emscripten_glDeleteBuffers,"Xa":_emscripten_glDeleteFramebuffers,"Va":_emscripten_glDeleteProgram,"Ua":_emscripten_glDeleteQueriesEXT,"Ta":_emscripten_glDeleteRenderbuffers,"Sa":_emscripten_glDeleteShader,"Ra":_emscripten_glDeleteTextures,"Qa":_emscripten_glDeleteVertexArraysOES,"Pa":_emscripten_glDepthFunc,"Oa":_emscripten_glDepthMask,"Na":_emscripten_glDepthRangef,"Ma":_emscripten_glDetachShader,"La":_emscripten_glDisable,"Ka":_emscripten_glDisableVertexAttribArray,"Ja":_emscripten_glDrawArrays,"Ia":_emscripten_glDrawArraysInstancedANGLE,"Ha":_emscripten_glDrawBuffersWEBGL,"Ga":_emscripten_glDrawElements,"Fa":_emscripten_glDrawElementsInstancedANGLE,"Ea":_emscripten_glEnable,"Da":_emscripten_glEnableVertexAttribArray,"Ca":_emscripten_glEndQueryEXT,"Ba":_emscripten_glFinish,"Aa":_emscripten_glFlush,"za":_emscripten_glFramebufferRenderbuffer,"ya":_emscripten_glFramebufferTexture2D,"xa":_emscripten_glFrontFace,"wa":_emscripten_glGenBuffers,"va":_emscripten_glGenFramebuffers,"ua":_emscripten_glGenQueriesEXT,"ta":_emscripten_glGenRenderbuffers,"sa":_emscripten_glGenTextures,"qa":_emscripten_glGenVertexArraysOES,"pa":_emscripten_glGenerateMipmap,"oa":_emscripten_glGetActiveAttrib,"na":_emscripten_glGetActiveUniform,"ma":_emscripten_glGetAttachedShaders,"la":_emscripten_glGetAttribLocation,"ka":_emscripten_glGetBooleanv,"ja":_emscripten_glGetBufferParameteriv,"ia":_emscripten_glGetError,"ha":_emscripten_glGetFloatv,"ga":_emscripten_glGetFramebufferAttachmentParameteriv,"fa":_emscripten_glGetIntegerv,"ea":_emscripten_glGetProgramInfoLog,"da":_emscripten_glGetProgramiv,"ca":_emscripten_glGetQueryObjecti64vEXT,"ba":_emscripten_glGetQueryObjectivEXT,"aa":_emscripten_glGetQueryObjectui64vEXT,"$":_emscripten_glGetQueryObjectuivEXT,"_":_emscripten_glGetQueryivEXT,"Z":_emscripten_glGetRenderbufferParameteriv,"he":_emscripten_glGetShaderInfoLog,"ge":_emscripten_glGetShaderPrecisionFormat,"fe":_emscripten_glGetShaderSource,"ee":_emscripten_glGetShaderiv,"de":_emscripten_glGetString,"ce":_emscripten_glGetTexParameterfv,"be":_emscripten_glGetTexParameteriv,"ae":_emscripten_glGetUniformLocation,"$d":_emscripten_glGetUniformfv,"_d":_emscripten_glGetUniformiv,"Zd":_emscripten_glGetVertexAttribPointerv,"Yd":_emscripten_glGetVertexAttribfv,"Xd":_emscripten_glGetVertexAttribiv,"Wd":_emscripten_glHint,"Vd":_emscripten_glIsBuffer,"Ud":_emscripten_glIsEnabled,"Td":_emscripten_glIsFramebuffer,"Sd":_emscripten_glIsProgram,"Rd":_emscripten_glIsQueryEXT,"Qd":_emscripten_glIsRenderbuffer,"Pd":_emscripten_glIsShader,"Od":_emscripten_glIsTexture,"Nd":_emscripten_glIsVertexArrayOES,"Md":_emscripten_glLineWidth,"Ld":_emscripten_glLinkProgram,"Kd":_emscripten_glPixelStorei,"Jd":_emscripten_glPolygonOffset,"Id":_emscripten_glQueryCounterEXT,"Hd":_emscripten_glReadPixels,"Gd":_emscripten_glReleaseShaderCompiler,"Fd":_emscripten_glRenderbufferStorage,"Ed":_emscripten_glSampleCoverage,"Dd":_emscripten_glScissor,"Cd":_emscripten_glShaderBinary,"Bd":_emscripten_glShaderSource,"Ad":_emscripten_glStencilFunc,"zd":_emscripten_glStencilFuncSeparate,"yd":_emscripten_glStencilMask,"xd":_emscripten_glStencilMaskSeparate,"wd":_emscripten_glStencilOp,"ud":_emscripten_glStencilOpSeparate,"td":_emscripten_glTexImage2D,"sd":_emscripten_glTexParameterf,"rd":_emscripten_glTexParameterfv,"qd":_emscripten_glTexParameteri,"pd":_emscripten_glTexParameteriv,"od":_emscripten_glTexSubImage2D,"nd":_emscripten_glUniform1f,"md":_emscripten_glUniform1fv,"ld":_emscripten_glUniform1i,"jd":_emscripten_glUniform1iv,"id":_emscripten_glUniform2f,"hd":_emscripten_glUniform2fv,"gd":_emscripten_glUniform2i,"fd":_emscripten_glUniform2iv,"ed":_emscripten_glUniform3f,"dd":_emscripten_glUniform3fv,"cd":_emscripten_glUniform3i,"bd":_emscripten_glUniform3iv,"ad":_emscripten_glUniform4f,"_c":_emscripten_glUniform4fv,"Zc":_emscripten_glUniform4i,"Yc":_emscripten_glUniform4iv,"Xc":_emscripten_glUniformMatrix2fv,"Wc":_emscripten_glUniformMatrix3fv,"Vc":_emscripten_glUniformMatrix4fv,"Uc":_emscripten_glUseProgram,"Tc":_emscripten_glValidateProgram,"Sc":_emscripten_glVertexAttrib1f,"Rc":_emscripten_glVertexAttrib1fv,"Qc":_emscripten_glVertexAttrib2f,"Pc":_emscripten_glVertexAttrib2fv,"Oc":_emscripten_glVertexAttrib3f,"Nc":_emscripten_glVertexAttrib3fv,"Mc":_emscripten_glVertexAttrib4f,"Lc":_emscripten_glVertexAttrib4fv,"Kc":_emscripten_glVertexAttribDivisorANGLE,"Jc":_emscripten_glVertexAttribPointer,"Ic":_emscripten_glViewport,"Hc":_emscripten_memcpy_big,"Fc":_emscripten_request_pointerlock,"Ec":_emscripten_resize_heap,"V":_emscripten_run_script,"Dc":_emscripten_sample_gamepad_data,"Cc":_emscripten_set_click_callback_on_thread,"Bc":_emscripten_set_fullscreenchange_callback_on_thread,"Ac":_emscripten_set_gamepadconnected_callback_on_thread,"zc":_emscripten_set_gamepaddisconnected_callback_on_thread,"yc":_emscripten_set_keypress_callback_on_thread,"xc":_emscripten_set_main_loop,"vc":_emscripten_set_touchcancel_callback_on_thread,"uc":_emscripten_set_touchend_callback_on_thread,"tc":_emscripten_set_touchmove_callback_on_thread,"sc":_emscripten_set_touchstart_callback_on_thread,"rc":_exit,"A":_glActiveTexture,"U":_glAttachShader,"n":_glBindAttribLocation,"c":_glBindBuffer,"j":_glBindTexture,"oc":_glBlendFunc,"h":_glBufferData,"z":_glBufferSubData,"T":_glClear,"S":_glClearColor,"nc":_glClearDepthf,"mc":_glCompileShader,"lc":_glCompressedTexImage2D,"kc":_glCreateProgram,"jc":_glCreateShader,"hc":_glCullFace,"p":_glDeleteBuffers,"y":_glDeleteProgram,"R":_glDeleteShader,"Q":_glDeleteTextures,"gc":_glDepthFunc,"P":_glDetachShader,"O":_glDisable,"i":_glDisableVertexAttribArray,"N":_glDrawArrays,"M":_glDrawElements,"x":_glEnable,"f":_glEnableVertexAttribArray,"ec":_glFrontFace,"g":_glGenBuffers,"dc":_glGenTextures,"w":_glGetAttribLocation,"cc":_glGetFloatv,"bc":_glGetProgramInfoLog,"L":_glGetProgramiv,"$b":_glGetShaderInfoLog,"K":_glGetShaderiv,"o":_glGetString,"v":_glGetUniformLocation,"_b":_glLinkProgram,"Zb":_glPixelStorei,"Yb":_glReadPixels,"Xb":_glShaderSource,"Wb":_glTexImage2D,"m":_glTexParameteri,"J":_glUniform1i,"u":_glUniform4f,"t":_glUniformMatrix4fv,"l":_glUseProgram,"Ub":_glVertexAttrib2f,"Tb":_glVertexAttrib3f,"s":_glVertexAttrib4f,"e":_glVertexAttribPointer,"Sb":_glViewport,"Rb":_glfwCreateWindow,"Pb":_glfwDefaultWindowHints,"Ob":_glfwDestroyWindow,"Nb":_glfwGetCursorPos,"Mb":_glfwGetKey,"Lb":_glfwGetMouseButton,"r":_glfwGetTime,"Kb":_glfwInit,"Jb":_glfwMakeContextCurrent,"Ib":_glfwSetCharCallback,"Hb":_glfwSetCursorEnterCallback,"Fb":_glfwSetCursorPosCallback,"Eb":_glfwSetDropCallback,"Db":_glfwSetErrorCallback,"Cb":_glfwSetKeyCallback,"Bb":_glfwSetMouseButtonCallback,"Ab":_glfwSetScrollCallback,"zb":_glfwSetWindowIconifyCallback,"yb":_glfwSetWindowShouldClose,"xb":_glfwSetWindowSizeCallback,"wb":_glfwSwapBuffers,"I":_glfwTerminate,"k":_glfwWindowHint,"H":_llvm_stackrestore,"G":_llvm_stacksave,"ub":_nanosleep,"tb":_time,"sb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["we"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i<argc;i++){HEAP32[(argv>>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_cubicmap.wasm b/examples/web/models/models_cubicmap.wasm Binary files differnew file mode 100644 index 0000000..a468730 --- /dev/null +++ b/examples/web/models/models_cubicmap.wasm diff --git a/examples/web/models/models_first_person_maze.c b/examples/web/models/models_first_person_maze.c index 9926f7e..b48495b 100644 --- a/examples/web/models/models_first_person_maze.c +++ b/examples/web/models/models_first_person_maze.c @@ -44,7 +44,7 @@ void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- // Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -57,17 +57,17 @@ int main() cubicmap = LoadTextureFromImage(imMap); // Convert image to texture to display (VRAM) Mesh mesh = GenMeshCubicmap(imMap, (Vector3){ 1.0f, 1.0f, 1.0f }); model = LoadModelFromMesh(mesh); - + // NOTE: By default each cube is mapped to one part of texture atlas texture = LoadTexture("resources/cubicmap_atlas.png"); // Load map texture model.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set map diffuse texture - + // Get map image data to be used for collision detection mapPixels = GetImageData(imMap); UnloadImage(imMap); // Unload image from RAM playerPosition = camera.position; // Set player position - + SetCameraMode(camera, CAMERA_FIRST_PERSON); // Set camera mode #if defined(PLATFORM_WEB) @@ -75,7 +75,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -86,7 +86,7 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- free(mapPixels); // Unload color array - + UnloadTexture(cubicmap); // Unload cubicmap texture UnloadTexture(texture); // Unload map texture UnloadModel(model); // Unload map model @@ -105,23 +105,23 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- Vector3 oldCamPos = camera.position; // Store old camera position - + UpdateCamera(&camera); // Update camera - + // Check player collision (we simplify to 2D collision detection) Vector2 playerPos = { camera.position.x, camera.position.z }; float playerRadius = 0.1f; // Collision radius (player is modelled as a cilinder for collision) - + int playerCellX = (int)(playerPos.x - mapPosition.x + 0.5f); int playerCellY = (int)(playerPos.y - mapPosition.z + 0.5f); - + // Out-of-limits security check if (playerCellX < 0) playerCellX = 0; else if (playerCellX >= cubicmap.width) playerCellX = cubicmap.width - 1; - + if (playerCellY < 0) playerCellY = 0; else if (playerCellY >= cubicmap.height) playerCellY = cubicmap.height - 1; - + // Check map collisions using image data and player position // TODO: Improvement: Just check player surrounding cells for collision for (int y = 0; y < cubicmap.height; y++) @@ -129,7 +129,7 @@ void UpdateDrawFrame(void) for (int x = 0; x < cubicmap.width; x++) { if ((mapPixels[y*cubicmap.width + x].r == 255) && // Collision: white pixel, only check R channel - (CheckCollisionCircleRec(playerPos, playerRadius, + (CheckCollisionCircleRec(playerPos, playerRadius, (Rectangle){ mapPosition.x - 0.5f + x*1.0f, mapPosition.z - 0.5f + y*1.0f, 1.0f, 1.0f }))) { // Collision detected, reset camera position @@ -151,10 +151,10 @@ void UpdateDrawFrame(void) //DrawCubeV(playerPosition, (Vector3){ 0.2f, 0.4f, 0.2f }, RED); // Draw player EndMode3D(); - + DrawTextureEx(cubicmap, (Vector2){ GetScreenWidth() - cubicmap.width*4 - 20, 20 }, 0.0f, 4.0f, WHITE); DrawRectangleLines(GetScreenWidth() - cubicmap.width*4 - 20, 20, cubicmap.width*4, cubicmap.height*4, GREEN); - + // Draw player position radar DrawRectangle(GetScreenWidth() - cubicmap.width*4 - 20 + playerCellX*4, 20 + playerCellY*4, 4, 4, RED); diff --git a/examples/web/models/models_first_person_maze.data b/examples/web/models/models_first_person_maze.data Binary files differnew file mode 100644 index 0000000..c7df666 --- /dev/null +++ b/examples/web/models/models_first_person_maze.data diff --git a/examples/web/models/models_first_person_maze.html b/examples/web/models/models_first_person_maze.html new file mode 100644 index 0000000..aafcd59 --- /dev/null +++ b/examples/web/models/models_first_person_maze.html @@ -0,0 +1 @@ +<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/games property=og:url><meta content=raylib.com property=og:site_name><meta content="New hmtl5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:url><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header_part{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(https://www.raylib.com/common/img/raylib_logo_64x64.png)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}#emscripten_logo{display:inline-block;margin:0}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:20px;width:30px}#controls{display:inline-block;float:right;vertical-align:top;margin-top:30px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}</style></head><body><div id=header_part><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value=Fullscreen></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault()></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function SaveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var t=document.querySelector("#output");return t&&(t.value=""),function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.log(e),t&&(t.value+=e+"\n",t.scrollTop=t.scrollHeight)}}(),printErr:function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()},!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Date.now()<30||(t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!1,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(e){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script src=models_first_person_maze.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_first_person_maze.js b/examples/web/models/models_first_person_maze.js new file mode 100644 index 0000000..09586f8 --- /dev/null +++ b/examples/web/models/models_first_person_maze.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_first_person_maze.data";var REMOTE_PACKAGE_BASE="models_first_person_maze.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i<files.length;++i){new DataRequest(files[i].start,files[i].end,files[i].audio).open("GET",files[i].filename)}function processPackageData(arrayBuffer){Module.finishedDataFileDownloads++;assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);var ptr=Module["getMemory"](byteArray.length);Module["HEAPU8"].set(byteArray,ptr);DataRequest.prototype.byteArray=Module["HEAPU8"].subarray(ptr,ptr+byteArray.length);var files=metadata.files;for(var i=0;i<files.length;++i){DataRequest.prototype.requests[files[i].filename].onload()}Module["removeRunDependency"]("datafile_models/models_first_person_maze.data")}Module["addRunDependency"]("datafile_models/models_first_person_maze.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[{"start":0,"audio":0,"end":201,"filename":"/resources/cubicmap.png"},{"start":201,"audio":0,"end":37426,"filename":"/resources/cubicmap_atlas.png"}],"remote_package_size":37426,"package_uuid":"d3e80872-b2c5-475b-89f6-e37343df2a38"})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];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 require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;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)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["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);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["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"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}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=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["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)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];type=singleType||types[i];if(type===0){i++;continue}if(type=="i64")type="i32";setValue(ret+i,curr,type);if(previousType!==type){typeSize=getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}function getMemory(size){if(!runtimeInitialized)return dynamicAlloc(size);return _malloc(size)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(u8Array[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=u8Array[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[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<str.length;++i){var u=str.charCodeAt(i);if(u>=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 allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__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(0)}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)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5273664,DYNAMICTOP_PTR=30752;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY<TOTAL_STACK)err("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+INITIAL_TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{if(typeof WebAssembly==="object"&&typeof WebAssembly.Memory==="function"){wasmMemory=new WebAssembly.Memory({"initial":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE});buffer=wasmMemory.buffer}else{buffer=new ArrayBuffer(INITIAL_TOTAL_MEMORY)}}updateGlobalBufferViews();HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();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 __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=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 ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}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"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_first_person_maze.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){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(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};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 ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}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)},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.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(19)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(6)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(6)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(5)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var isPosixPlatform=process.platform!="win32";var fd=process.stdin.fd;if(isPosixPlatform){var usingDevice=false;try{fd=fs.openSync("/dev/stdin","r");usingDevice=true}catch(e){}}try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(usingDevice){fs.closeSync(fd)}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}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(1)}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<node.usedBytes;++i)arr.push(node.contents[i]);return arr}return node.contents},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array;if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|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(new ArrayBuffer(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<newSize)node.contents.push(0);node.usedBytes=newSize},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[2]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(39)}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name]},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(39)}delete parent.contents[name]},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(22)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(22)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(12)}buffer.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var IDBFS={dbs:{},indexedDB:function(){if(typeof indexedDB!=="undefined")return indexedDB;var ret=null;if(typeof window==="object")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,"IDBFS used, but indexedDB not supported");return ret},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function(mount){return MEMFS.mount.apply(null,arguments)},syncfs:function(mount,populate,callback){IDBFS.getLocalSet(mount,function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},getDB:function(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback("Unable to connect to IndexedDB")}req.onupgradeneeded=function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}};req.onsuccess=function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db)};req.onerror=function(e){callback(this.error);e.preventDefault()}},getLocalSet:function(mount,callback){var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return function(p){return PATH.join2(root,p)}}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:"local",entries:entries})},getRemoteSet:function(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,function(err,db){if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=function(e){callback(this.error);e.preventDefault()};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db:db,entries:entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()}}catch(e){return callback(e)}})},loadLocalEntry:function(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error("node type not supported"))}},storeLocalEntry:function(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode)}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp)}catch(e){return callback(e)}callback(null)},removeLocalEntry:function(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:function(store,path,callback){var req=store.get(path);req.onsuccess=function(event){callback(null,event.target.result)};req.onerror=function(e){callback(this.error);e.preventDefault()}},storeRemoteEntry:function(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},removeRemoteEntry:function(store,path,callback){var req=store.delete(path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},reconcile:function(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join("/");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,parts[i],WORKERFS.DIR_MODE,0)}parent=createdParents[curr]}return parent}function base(path){var parts=path.split("/");return parts[parts.length-1]}Array.prototype.forEach.call(mount.opts["files"]||[],function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate)});(mount.opts["blobs"]||[]).forEach(function(obj){WORKERFS.createNode(ensureParent(obj["name"]),base(obj["name"]),WORKERFS.FILE_MODE,0,obj["data"])});(mount.opts["packages"]||[]).forEach(function(pack){pack["metadata"].files.forEach(function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack["blob"].slice(file.start,file.end))})});return root},createNode:function(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents}else{node.size=4096;node.contents={}}if(parent){parent.contents[name]=node}return node},node_ops:{getattr:function(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)}},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}},lookup:function(parent,name){throw new FS.ErrnoError(2)},mknod:function(parent,name,mode,dev){throw new FS.ErrnoError(1)},rename:function(oldNode,newDir,newName){throw new FS.ErrnoError(1)},unlink:function(parent,name){throw new FS.ErrnoError(1)},rmdir:function(parent,name){throw new FS.ErrnoError(1)},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newName,oldPath){throw new FS.ErrnoError(1)},readlink:function(node){throw new FS.ErrnoError(1)}},stream_ops:{read:function(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(40)}}}}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<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>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 err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,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){if(!FS.FSNode){FS.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};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.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)}}})}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 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}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 err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}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(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}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(29)}},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){console.log("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(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}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(16)}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(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}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(22)}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(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}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;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=17)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(2)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(2)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(1)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(16)}if(!old_dir||!new_dir)throw new FS.ErrnoError(2);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(18)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(22)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(39)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(1)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(16)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(20)}return node.node_ops.readdir(node)},unlink:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(2)}if(!link.node_ops.readlink){throw new FS.ErrnoError(22)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(2)}if(!node.node_ops.getattr){throw new FS.ErrnoError(1)}return node.node_ops.getattr(node)},lstat:function(path){return FS.stat(path,true)},chmod:function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chmod(stream.node,mode)},chown:function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chown(stream.node,uid,gid)},truncate:function(path,len){if(len<0){throw new FS.ErrnoError(22)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(21)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(22)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(22)}FS.truncate(stream.node,len)},utime:function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(2)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(17)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(2)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;console.log("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:function(stream){return stream.fd===null},llseek:function(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(29)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(22)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.read){throw new FS.ErrnoError(22)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.write){throw new FS.ErrnoError(22)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(offset<0||length<=0){throw new FS.ErrnoError(22)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(19)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(95)}stream.stream_ops.allocate(stream,offset,length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(13)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(19)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(25)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:function(path,data,opts){opts=opts||{};opts.flags=opts.flags||"w";var stream=FS.open(path,opts.flags,opts.mode);if(typeof data==="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:function(){return FS.currentPath},chdir:function(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(2)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(20)}var err=FS.nodePermissions(lookup.node,"x");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path},createDefaultDirectories:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return length}});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device;if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);random_device=function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");random_device=function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}else{}if(!random_device){random_device=function(){abort("random_device")}}FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode("/proc/self","fd",16384|511,73);node.node_ops={lookup:function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(9);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin","r");var stdout=FS.open("/dev/stdout","w");var stderr=FS.open("/dev/stderr","w")},ensureErrnoError:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error";if(this.stack)Object.defineProperty(this,"stack",{value:(new Error).stack,writable:true})};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[2].forEach(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS}},init:function(input,output,error){FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},joinPath:function(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]=="/")path=path.substr(1);return path},absolutePath:function(relative,base){return PATH.resolve(base,relative)},standardizePath:function(path){return PATH.normalize(path)},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{___setErrNo(ret.error);return null}},analyzePath:function(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createFolder:function(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode)},createPath:function(parent,path,canRead,canWrite){parent=typeof parent==="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:function(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data==="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,"w");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(5)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},createLink:function(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);return FS.symlink(target,path)},forceLoadFile:function(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!=="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(Module["read"]){try{obj.contents=intArrayFromString(Module["read"](obj.url),true);obj.usedBytes=obj.contents.length}catch(e){success=false}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}if(!success)___setErrNo(5);return success},createLazyFile:function(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=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;console.log("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(5)}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(5)}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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function(dirfd,path){if(path[0]!=="/"){var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path}path=PATH.join2(dir,path)}return path},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR}throw e}HEAP32[buf>>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){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,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-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;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-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}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<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;if(typeof SDL==="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["preloadPlugins"].push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("warning: browser could not fully decode audio "+name+", trying slower base64 approach");function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};var EGL={errorCode:12288,defaultDisplayInitialized:false,currentContext:0,currentReadSurface:0,currentDrawSurface:0,contextAttributes:{alpha:false,depth:false,stencil:false,antialias:false},stringCache:{},setErrorCode:function(code){EGL.errorCode=code},chooseConfig:function(display,attribList,config,config_size,numConfigs){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(attribList){for(;;){var param=HEAP32[attribList>>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(this,call.argsList)}},inEventHandler:0,currentEventHandler:null,eventHandlers:[],isInternetExplorer:function(){return navigator.userAgent.indexOf("MSIE")!==-1||navigator.appVersion.indexOf("Trident/")>0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getBoundingClientRectOrZeros:function(target){return target.getBoundingClientRect?target.getBoundingClientRect():{left:0,top:0}},pageScrollPos:function(){if(window.pageXOffset>0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i<GL.MINI_TEMP_BUFFER_SIZE;i++){GL.miniTempBufferViews[i]=GL.miniTempBuffer.subarray(0,i+1)}},recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i<ret;i++){table[i]=null}return ret},MINI_TEMP_BUFFER_SIZE:256,miniTempBuffer:null,miniTempBufferViews:[0],getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i<result.length;++i){switch(type){case"Integer":HEAP32[p+i*4>>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[location]);if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i<e.touches.length;++i){var touch=e.touches[i];touches[touch.identifier]=touch}for(var i=0;i<e.changedTouches.length;++i){var touch=e.changedTouches[i];touches[touch.identifier]=touch;touch.changed=true}for(var i=0;i<e.targetTouches.length;++i){var touch=e.targetTouches[i];touches[touch.identifier].onTarget=true}var touchEvent=JSEvents.touchEvent;var ptr=touchEvent;HEAP32[ptr+4>>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;dynCall_vidd(GLFW.active.cursorPosFunc,GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;dynCall_viiii(GLFW.active.mouseButtonFunc,GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),"i8",ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),"i8",ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),"float",ALLOC_NORMAL)};if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.keyFunc=cbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.charFunc=cbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.mouseButtonFunc=cbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorPosFunc=cbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.scrollFunc=cbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.dropFunc=cbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowSizeFunc=cbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowCloseFunc=cbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowRefreshFunc=cbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++);if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++);if(i==GLFW.windows.length){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetCursorPos(winid,x,y){GLFW.getCursorPos(winid,x,y)}function _glfwGetKey(winid,key){return GLFW.getKey(winid,key)}function _glfwGetMouseButton(winid,button){return GLFW.getMouseButton(winid,button)}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorEnterFunc=cbfun}function _glfwSetCursorPosCallback(winid,cbfun){GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){GLFW.errorFunc=cbfun}function _glfwSetKeyCallback(winid,cbfun){GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowIconifyFunc=cbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _llvm_stackrestore(p){var self=_llvm_stacksave;var ret=self.LLVM_SAVEDSTACKS[p];self.LLVM_SAVEDSTACKS.splice(p,1);stackRestore(ret)}function _llvm_stacksave(){var self=_llvm_stacksave;if(!self.LLVM_SAVEDSTACKS){self.LLVM_SAVEDSTACKS=[]}self.LLVM_SAVEDSTACKS.push(stackSave());return self.LLVM_SAVEDSTACKS.length-1}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function _usleep(useconds){var msec=useconds/1e3;if((ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self["performance"]&&self["performance"]["now"]){var start=self["performance"]["now"]();while(self["performance"]["now"]()-start<msec){}}else{var start=Date.now();while(Date.now()-start<msec){}}return 0}function _nanosleep(rqtp,rmtp){var seconds=HEAP32[rqtp>>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));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 asmGlobalArg={};var asmLibraryArg={"d":abort,"b":___assert_fail,"qc":___lock,"F":___setErrNo,"fb":___syscall140,"Wa":___syscall145,"E":___syscall146,"q":___syscall221,"ra":___syscall5,"D":___syscall54,"Y":___syscall6,"C":___unlock,"B":_eglGetProcAddress,"X":_emscripten_exit_pointerlock,"vd":_emscripten_get_gamepad_status,"kd":_emscripten_get_heap_size,"$c":_emscripten_get_num_gamepads,"W":_emscripten_get_pointerlock_status,"Gc":_emscripten_glActiveTexture,"wc":_emscripten_glAttachShader,"pc":_emscripten_glBeginQueryEXT,"ic":_emscripten_glBindAttribLocation,"fc":_emscripten_glBindBuffer,"ac":_emscripten_glBindFramebuffer,"Vb":_emscripten_glBindRenderbuffer,"Qb":_emscripten_glBindTexture,"Gb":_emscripten_glBindVertexArrayOES,"vb":_emscripten_glBlendColor,"rb":_emscripten_glBlendEquation,"qb":_emscripten_glBlendEquationSeparate,"pb":_emscripten_glBlendFunc,"ob":_emscripten_glBlendFuncSeparate,"nb":_emscripten_glBufferData,"mb":_emscripten_glBufferSubData,"lb":_emscripten_glCheckFramebufferStatus,"kb":_emscripten_glClear,"jb":_emscripten_glClearColor,"ib":_emscripten_glClearDepthf,"hb":_emscripten_glClearStencil,"gb":_emscripten_glColorMask,"eb":_emscripten_glCompileShader,"db":_emscripten_glCompressedTexImage2D,"cb":_emscripten_glCompressedTexSubImage2D,"bb":_emscripten_glCopyTexImage2D,"ab":_emscripten_glCopyTexSubImage2D,"$a":_emscripten_glCreateProgram,"_a":_emscripten_glCreateShader,"Za":_emscripten_glCullFace,"Ya":_emscripten_glDeleteBuffers,"Xa":_emscripten_glDeleteFramebuffers,"Va":_emscripten_glDeleteProgram,"Ua":_emscripten_glDeleteQueriesEXT,"Ta":_emscripten_glDeleteRenderbuffers,"Sa":_emscripten_glDeleteShader,"Ra":_emscripten_glDeleteTextures,"Qa":_emscripten_glDeleteVertexArraysOES,"Pa":_emscripten_glDepthFunc,"Oa":_emscripten_glDepthMask,"Na":_emscripten_glDepthRangef,"Ma":_emscripten_glDetachShader,"La":_emscripten_glDisable,"Ka":_emscripten_glDisableVertexAttribArray,"Ja":_emscripten_glDrawArrays,"Ia":_emscripten_glDrawArraysInstancedANGLE,"Ha":_emscripten_glDrawBuffersWEBGL,"Ga":_emscripten_glDrawElements,"Fa":_emscripten_glDrawElementsInstancedANGLE,"Ea":_emscripten_glEnable,"Da":_emscripten_glEnableVertexAttribArray,"Ca":_emscripten_glEndQueryEXT,"Ba":_emscripten_glFinish,"Aa":_emscripten_glFlush,"za":_emscripten_glFramebufferRenderbuffer,"ya":_emscripten_glFramebufferTexture2D,"xa":_emscripten_glFrontFace,"wa":_emscripten_glGenBuffers,"va":_emscripten_glGenFramebuffers,"ua":_emscripten_glGenQueriesEXT,"ta":_emscripten_glGenRenderbuffers,"sa":_emscripten_glGenTextures,"qa":_emscripten_glGenVertexArraysOES,"pa":_emscripten_glGenerateMipmap,"oa":_emscripten_glGetActiveAttrib,"na":_emscripten_glGetActiveUniform,"ma":_emscripten_glGetAttachedShaders,"la":_emscripten_glGetAttribLocation,"ka":_emscripten_glGetBooleanv,"ja":_emscripten_glGetBufferParameteriv,"ia":_emscripten_glGetError,"ha":_emscripten_glGetFloatv,"ga":_emscripten_glGetFramebufferAttachmentParameteriv,"fa":_emscripten_glGetIntegerv,"ea":_emscripten_glGetProgramInfoLog,"da":_emscripten_glGetProgramiv,"ca":_emscripten_glGetQueryObjecti64vEXT,"ba":_emscripten_glGetQueryObjectivEXT,"aa":_emscripten_glGetQueryObjectui64vEXT,"$":_emscripten_glGetQueryObjectuivEXT,"_":_emscripten_glGetQueryivEXT,"Z":_emscripten_glGetRenderbufferParameteriv,"he":_emscripten_glGetShaderInfoLog,"ge":_emscripten_glGetShaderPrecisionFormat,"fe":_emscripten_glGetShaderSource,"ee":_emscripten_glGetShaderiv,"de":_emscripten_glGetString,"ce":_emscripten_glGetTexParameterfv,"be":_emscripten_glGetTexParameteriv,"ae":_emscripten_glGetUniformLocation,"$d":_emscripten_glGetUniformfv,"_d":_emscripten_glGetUniformiv,"Zd":_emscripten_glGetVertexAttribPointerv,"Yd":_emscripten_glGetVertexAttribfv,"Xd":_emscripten_glGetVertexAttribiv,"Wd":_emscripten_glHint,"Vd":_emscripten_glIsBuffer,"Ud":_emscripten_glIsEnabled,"Td":_emscripten_glIsFramebuffer,"Sd":_emscripten_glIsProgram,"Rd":_emscripten_glIsQueryEXT,"Qd":_emscripten_glIsRenderbuffer,"Pd":_emscripten_glIsShader,"Od":_emscripten_glIsTexture,"Nd":_emscripten_glIsVertexArrayOES,"Md":_emscripten_glLineWidth,"Ld":_emscripten_glLinkProgram,"Kd":_emscripten_glPixelStorei,"Jd":_emscripten_glPolygonOffset,"Id":_emscripten_glQueryCounterEXT,"Hd":_emscripten_glReadPixels,"Gd":_emscripten_glReleaseShaderCompiler,"Fd":_emscripten_glRenderbufferStorage,"Ed":_emscripten_glSampleCoverage,"Dd":_emscripten_glScissor,"Cd":_emscripten_glShaderBinary,"Bd":_emscripten_glShaderSource,"Ad":_emscripten_glStencilFunc,"zd":_emscripten_glStencilFuncSeparate,"yd":_emscripten_glStencilMask,"xd":_emscripten_glStencilMaskSeparate,"wd":_emscripten_glStencilOp,"ud":_emscripten_glStencilOpSeparate,"td":_emscripten_glTexImage2D,"sd":_emscripten_glTexParameterf,"rd":_emscripten_glTexParameterfv,"qd":_emscripten_glTexParameteri,"pd":_emscripten_glTexParameteriv,"od":_emscripten_glTexSubImage2D,"nd":_emscripten_glUniform1f,"md":_emscripten_glUniform1fv,"ld":_emscripten_glUniform1i,"jd":_emscripten_glUniform1iv,"id":_emscripten_glUniform2f,"hd":_emscripten_glUniform2fv,"gd":_emscripten_glUniform2i,"fd":_emscripten_glUniform2iv,"ed":_emscripten_glUniform3f,"dd":_emscripten_glUniform3fv,"cd":_emscripten_glUniform3i,"bd":_emscripten_glUniform3iv,"ad":_emscripten_glUniform4f,"_c":_emscripten_glUniform4fv,"Zc":_emscripten_glUniform4i,"Yc":_emscripten_glUniform4iv,"Xc":_emscripten_glUniformMatrix2fv,"Wc":_emscripten_glUniformMatrix3fv,"Vc":_emscripten_glUniformMatrix4fv,"Uc":_emscripten_glUseProgram,"Tc":_emscripten_glValidateProgram,"Sc":_emscripten_glVertexAttrib1f,"Rc":_emscripten_glVertexAttrib1fv,"Qc":_emscripten_glVertexAttrib2f,"Pc":_emscripten_glVertexAttrib2fv,"Oc":_emscripten_glVertexAttrib3f,"Nc":_emscripten_glVertexAttrib3fv,"Mc":_emscripten_glVertexAttrib4f,"Lc":_emscripten_glVertexAttrib4fv,"Kc":_emscripten_glVertexAttribDivisorANGLE,"Jc":_emscripten_glVertexAttribPointer,"Ic":_emscripten_glViewport,"Hc":_emscripten_memcpy_big,"Fc":_emscripten_request_pointerlock,"Ec":_emscripten_resize_heap,"V":_emscripten_run_script,"Dc":_emscripten_sample_gamepad_data,"Cc":_emscripten_set_click_callback_on_thread,"Bc":_emscripten_set_fullscreenchange_callback_on_thread,"Ac":_emscripten_set_gamepadconnected_callback_on_thread,"zc":_emscripten_set_gamepaddisconnected_callback_on_thread,"yc":_emscripten_set_keypress_callback_on_thread,"xc":_emscripten_set_main_loop,"vc":_emscripten_set_touchcancel_callback_on_thread,"uc":_emscripten_set_touchend_callback_on_thread,"tc":_emscripten_set_touchmove_callback_on_thread,"sc":_emscripten_set_touchstart_callback_on_thread,"rc":_exit,"A":_glActiveTexture,"U":_glAttachShader,"n":_glBindAttribLocation,"c":_glBindBuffer,"j":_glBindTexture,"oc":_glBlendFunc,"h":_glBufferData,"z":_glBufferSubData,"T":_glClear,"S":_glClearColor,"nc":_glClearDepthf,"mc":_glCompileShader,"lc":_glCompressedTexImage2D,"kc":_glCreateProgram,"jc":_glCreateShader,"hc":_glCullFace,"p":_glDeleteBuffers,"y":_glDeleteProgram,"R":_glDeleteShader,"Q":_glDeleteTextures,"gc":_glDepthFunc,"P":_glDetachShader,"O":_glDisable,"i":_glDisableVertexAttribArray,"N":_glDrawArrays,"M":_glDrawElements,"x":_glEnable,"f":_glEnableVertexAttribArray,"ec":_glFrontFace,"g":_glGenBuffers,"dc":_glGenTextures,"w":_glGetAttribLocation,"cc":_glGetFloatv,"bc":_glGetProgramInfoLog,"L":_glGetProgramiv,"$b":_glGetShaderInfoLog,"K":_glGetShaderiv,"o":_glGetString,"v":_glGetUniformLocation,"_b":_glLinkProgram,"Zb":_glPixelStorei,"Yb":_glReadPixels,"Xb":_glShaderSource,"Wb":_glTexImage2D,"m":_glTexParameteri,"J":_glUniform1i,"u":_glUniform4f,"t":_glUniformMatrix4fv,"l":_glUseProgram,"Ub":_glVertexAttrib2f,"Tb":_glVertexAttrib3f,"s":_glVertexAttrib4f,"e":_glVertexAttribPointer,"Sb":_glViewport,"Rb":_glfwCreateWindow,"Pb":_glfwDefaultWindowHints,"Ob":_glfwDestroyWindow,"Nb":_glfwGetCursorPos,"Mb":_glfwGetKey,"Lb":_glfwGetMouseButton,"r":_glfwGetTime,"Kb":_glfwInit,"Jb":_glfwMakeContextCurrent,"Ib":_glfwSetCharCallback,"Hb":_glfwSetCursorEnterCallback,"Fb":_glfwSetCursorPosCallback,"Eb":_glfwSetDropCallback,"Db":_glfwSetErrorCallback,"Cb":_glfwSetKeyCallback,"Bb":_glfwSetMouseButtonCallback,"Ab":_glfwSetScrollCallback,"zb":_glfwSetWindowIconifyCallback,"yb":_glfwSetWindowShouldClose,"xb":_glfwSetWindowSizeCallback,"wb":_glfwSwapBuffers,"I":_glfwTerminate,"k":_glfwWindowHint,"H":_llvm_stackrestore,"G":_llvm_stacksave,"ub":_nanosleep,"tb":_time,"sb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["we"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i<argc;i++){HEAP32[(argv>>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_first_person_maze.wasm b/examples/web/models/models_first_person_maze.wasm Binary files differnew file mode 100644 index 0000000..f4cba3a --- /dev/null +++ b/examples/web/models/models_first_person_maze.wasm diff --git a/examples/web/models/models_geometric_shapes.c b/examples/web/models/models_geometric_shapes.c index a0f8a7f..5d56eed 100644 --- a/examples/web/models/models_geometric_shapes.c +++ b/examples/web/models/models_geometric_shapes.c @@ -18,11 +18,11 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world -Camera camera = {{ 0.0f, 10.0f, 10.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; +Camera camera = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -30,7 +30,7 @@ Camera camera = {{ 0.0f, 10.0f, 10.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0 void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -38,12 +38,18 @@ int main(void) //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [models] example - geometric shapes"); + camera.position = (Vector3){ 0.0f, 10.0f, 10.0f }; + camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; + camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; + camera.fovy = 45.0f; + camera.type = CAMERA_PERSPECTIVE; + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -75,9 +81,9 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - Begin3dMode(camera); + BeginMode3D(camera); - DrawCube((Vector3){-4.0f, 0.0f, 2.0f}, 2.0f, 5.0f, 2.0f, RED); + DrawCube((Vector3){-4.0f, 0.0f, 2.0f}, 2.0f, 5.0f, 2.0f, RED); DrawCubeWires((Vector3){-4.0f, 0.0f, 2.0f}, 2.0f, 5.0f, 2.0f, GOLD); DrawCubeWires((Vector3){-4.0f, 0.0f, -2.0f}, 3.0f, 6.0f, 2.0f, MAROON); @@ -93,7 +99,7 @@ void UpdateDrawFrame(void) DrawGrid(10, 1.0f); // Draw a grid - End3dMode(); + EndMode3D(); DrawFPS(10, 10); diff --git a/examples/web/models/models_geometric_shapes.html b/examples/web/models/models_geometric_shapes.html new file mode 100644 index 0000000..b9c3054 --- /dev/null +++ b/examples/web/models/models_geometric_shapes.html @@ -0,0 +1 @@ +<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/games property=og:url><meta content=raylib.com property=og:site_name><meta content="New hmtl5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:url><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header_part{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(https://www.raylib.com/common/img/raylib_logo_64x64.png)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}#emscripten_logo{display:inline-block;margin:0}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:20px;width:30px}#controls{display:inline-block;float:right;vertical-align:top;margin-top:30px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}</style></head><body><div id=header_part><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value=Fullscreen></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault()></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function SaveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var t=document.querySelector("#output");return t&&(t.value=""),function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.log(e),t&&(t.value+=e+"\n",t.scrollTop=t.scrollHeight)}}(),printErr:function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()},!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Date.now()<30||(t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!1,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(e){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script src=models_geometric_shapes.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_geometric_shapes.js b/examples/web/models/models_geometric_shapes.js new file mode 100644 index 0000000..5be9da4 --- /dev/null +++ b/examples/web/models/models_geometric_shapes.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];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 require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;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)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["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);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["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"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}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=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["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)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];type=singleType||types[i];if(type===0){i++;continue}if(type=="i64")type="i32";setValue(ret+i,curr,type);if(previousType!==type){typeSize=getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(u8Array[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=u8Array[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[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<str.length;++i){var u=str.charCodeAt(i);if(u>=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 allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__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(0)}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)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269632,DYNAMICTOP_PTR=26720;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY<TOTAL_STACK)err("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+INITIAL_TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{if(typeof WebAssembly==="object"&&typeof WebAssembly.Memory==="function"){wasmMemory=new WebAssembly.Memory({"initial":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE});buffer=wasmMemory.buffer}else{buffer=new ArrayBuffer(INITIAL_TOTAL_MEMORY)}}updateGlobalBufferViews();HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();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 __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=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 ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}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"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_geometric_shapes.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){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(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};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 ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}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)},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.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(19)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(6)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(6)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(5)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var isPosixPlatform=process.platform!="win32";var fd=process.stdin.fd;if(isPosixPlatform){var usingDevice=false;try{fd=fs.openSync("/dev/stdin","r");usingDevice=true}catch(e){}}try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(usingDevice){fs.closeSync(fd)}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}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(1)}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<node.usedBytes;++i)arr.push(node.contents[i]);return arr}return node.contents},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array;if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|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(new ArrayBuffer(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<newSize)node.contents.push(0);node.usedBytes=newSize},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[2]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(39)}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name]},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(39)}delete parent.contents[name]},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(22)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(22)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(12)}buffer.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var IDBFS={dbs:{},indexedDB:function(){if(typeof indexedDB!=="undefined")return indexedDB;var ret=null;if(typeof window==="object")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,"IDBFS used, but indexedDB not supported");return ret},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function(mount){return MEMFS.mount.apply(null,arguments)},syncfs:function(mount,populate,callback){IDBFS.getLocalSet(mount,function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},getDB:function(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback("Unable to connect to IndexedDB")}req.onupgradeneeded=function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}};req.onsuccess=function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db)};req.onerror=function(e){callback(this.error);e.preventDefault()}},getLocalSet:function(mount,callback){var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return function(p){return PATH.join2(root,p)}}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:"local",entries:entries})},getRemoteSet:function(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,function(err,db){if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=function(e){callback(this.error);e.preventDefault()};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db:db,entries:entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()}}catch(e){return callback(e)}})},loadLocalEntry:function(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error("node type not supported"))}},storeLocalEntry:function(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode)}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp)}catch(e){return callback(e)}callback(null)},removeLocalEntry:function(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:function(store,path,callback){var req=store.get(path);req.onsuccess=function(event){callback(null,event.target.result)};req.onerror=function(e){callback(this.error);e.preventDefault()}},storeRemoteEntry:function(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},removeRemoteEntry:function(store,path,callback){var req=store.delete(path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},reconcile:function(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join("/");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,parts[i],WORKERFS.DIR_MODE,0)}parent=createdParents[curr]}return parent}function base(path){var parts=path.split("/");return parts[parts.length-1]}Array.prototype.forEach.call(mount.opts["files"]||[],function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate)});(mount.opts["blobs"]||[]).forEach(function(obj){WORKERFS.createNode(ensureParent(obj["name"]),base(obj["name"]),WORKERFS.FILE_MODE,0,obj["data"])});(mount.opts["packages"]||[]).forEach(function(pack){pack["metadata"].files.forEach(function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack["blob"].slice(file.start,file.end))})});return root},createNode:function(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents}else{node.size=4096;node.contents={}}if(parent){parent.contents[name]=node}return node},node_ops:{getattr:function(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)}},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}},lookup:function(parent,name){throw new FS.ErrnoError(2)},mknod:function(parent,name,mode,dev){throw new FS.ErrnoError(1)},rename:function(oldNode,newDir,newName){throw new FS.ErrnoError(1)},unlink:function(parent,name){throw new FS.ErrnoError(1)},rmdir:function(parent,name){throw new FS.ErrnoError(1)},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newName,oldPath){throw new FS.ErrnoError(1)},readlink:function(node){throw new FS.ErrnoError(1)}},stream_ops:{read:function(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(40)}}}}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<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>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 err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,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){if(!FS.FSNode){FS.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};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.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)}}})}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 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}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 err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}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(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}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(29)}},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){console.log("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(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}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(16)}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(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}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(22)}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(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}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;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=17)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(2)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(2)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(1)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(16)}if(!old_dir||!new_dir)throw new FS.ErrnoError(2);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(18)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(22)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(39)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(1)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(16)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(20)}return node.node_ops.readdir(node)},unlink:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(2)}if(!link.node_ops.readlink){throw new FS.ErrnoError(22)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(2)}if(!node.node_ops.getattr){throw new FS.ErrnoError(1)}return node.node_ops.getattr(node)},lstat:function(path){return FS.stat(path,true)},chmod:function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chmod(stream.node,mode)},chown:function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chown(stream.node,uid,gid)},truncate:function(path,len){if(len<0){throw new FS.ErrnoError(22)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(21)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(22)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(22)}FS.truncate(stream.node,len)},utime:function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(2)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(17)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(2)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;console.log("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:function(stream){return stream.fd===null},llseek:function(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(29)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(22)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.read){throw new FS.ErrnoError(22)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.write){throw new FS.ErrnoError(22)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(offset<0||length<=0){throw new FS.ErrnoError(22)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(19)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(95)}stream.stream_ops.allocate(stream,offset,length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(13)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(19)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(25)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:function(path,data,opts){opts=opts||{};opts.flags=opts.flags||"w";var stream=FS.open(path,opts.flags,opts.mode);if(typeof data==="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:function(){return FS.currentPath},chdir:function(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(2)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(20)}var err=FS.nodePermissions(lookup.node,"x");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path},createDefaultDirectories:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return length}});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device;if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);random_device=function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");random_device=function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}else{}if(!random_device){random_device=function(){abort("random_device")}}FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode("/proc/self","fd",16384|511,73);node.node_ops={lookup:function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(9);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin","r");var stdout=FS.open("/dev/stdout","w");var stderr=FS.open("/dev/stderr","w")},ensureErrnoError:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error";if(this.stack)Object.defineProperty(this,"stack",{value:(new Error).stack,writable:true})};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[2].forEach(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS}},init:function(input,output,error){FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},joinPath:function(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]=="/")path=path.substr(1);return path},absolutePath:function(relative,base){return PATH.resolve(base,relative)},standardizePath:function(path){return PATH.normalize(path)},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{___setErrNo(ret.error);return null}},analyzePath:function(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createFolder:function(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode)},createPath:function(parent,path,canRead,canWrite){parent=typeof parent==="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:function(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data==="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,"w");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(5)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},createLink:function(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);return FS.symlink(target,path)},forceLoadFile:function(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!=="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(Module["read"]){try{obj.contents=intArrayFromString(Module["read"](obj.url),true);obj.usedBytes=obj.contents.length}catch(e){success=false}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}if(!success)___setErrNo(5);return success},createLazyFile:function(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=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;console.log("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(5)}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(5)}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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function(dirfd,path){if(path[0]!=="/"){var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path}path=PATH.join2(dir,path)}return path},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR}throw e}HEAP32[buf>>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){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,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-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;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-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}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<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;if(typeof SDL==="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["preloadPlugins"].push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("warning: browser could not fully decode audio "+name+", trying slower base64 approach");function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};var EGL={errorCode:12288,defaultDisplayInitialized:false,currentContext:0,currentReadSurface:0,currentDrawSurface:0,contextAttributes:{alpha:false,depth:false,stencil:false,antialias:false},stringCache:{},setErrorCode:function(code){EGL.errorCode=code},chooseConfig:function(display,attribList,config,config_size,numConfigs){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(attribList){for(;;){var param=HEAP32[attribList>>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(this,call.argsList)}},inEventHandler:0,currentEventHandler:null,eventHandlers:[],isInternetExplorer:function(){return navigator.userAgent.indexOf("MSIE")!==-1||navigator.appVersion.indexOf("Trident/")>0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getBoundingClientRectOrZeros:function(target){return target.getBoundingClientRect?target.getBoundingClientRect():{left:0,top:0}},pageScrollPos:function(){if(window.pageXOffset>0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i<GL.MINI_TEMP_BUFFER_SIZE;i++){GL.miniTempBufferViews[i]=GL.miniTempBuffer.subarray(0,i+1)}},recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i<ret;i++){table[i]=null}return ret},MINI_TEMP_BUFFER_SIZE:256,miniTempBuffer:null,miniTempBufferViews:[0],getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i<result.length;++i){switch(type){case"Integer":HEAP32[p+i*4>>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[location]);if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i<e.touches.length;++i){var touch=e.touches[i];touches[touch.identifier]=touch}for(var i=0;i<e.changedTouches.length;++i){var touch=e.changedTouches[i];touches[touch.identifier]=touch;touch.changed=true}for(var i=0;i<e.targetTouches.length;++i){var touch=e.targetTouches[i];touches[touch.identifier].onTarget=true}var touchEvent=JSEvents.touchEvent;var ptr=touchEvent;HEAP32[ptr+4>>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;dynCall_vidd(GLFW.active.cursorPosFunc,GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;dynCall_viiii(GLFW.active.mouseButtonFunc,GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),"i8",ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),"i8",ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),"float",ALLOC_NORMAL)};if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.keyFunc=cbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.charFunc=cbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.mouseButtonFunc=cbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorPosFunc=cbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.scrollFunc=cbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.dropFunc=cbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowSizeFunc=cbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowCloseFunc=cbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowRefreshFunc=cbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++);if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++);if(i==GLFW.windows.length){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetCursorPos(winid,x,y){GLFW.getCursorPos(winid,x,y)}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorEnterFunc=cbfun}function _glfwSetCursorPosCallback(winid,cbfun){GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){GLFW.errorFunc=cbfun}function _glfwSetKeyCallback(winid,cbfun){GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowIconifyFunc=cbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _llvm_stackrestore(p){var self=_llvm_stacksave;var ret=self.LLVM_SAVEDSTACKS[p];self.LLVM_SAVEDSTACKS.splice(p,1);stackRestore(ret)}function _llvm_stacksave(){var self=_llvm_stacksave;if(!self.LLVM_SAVEDSTACKS){self.LLVM_SAVEDSTACKS=[]}self.LLVM_SAVEDSTACKS.push(stackSave());return self.LLVM_SAVEDSTACKS.length-1}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function _usleep(useconds){var msec=useconds/1e3;if((ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self["performance"]&&self["performance"]["now"]){var start=self["performance"]["now"]();while(self["performance"]["now"]()-start<msec){}}else{var start=Date.now();while(Date.now()-start<msec){}}return 0}function _nanosleep(rqtp,rmtp){var seconds=HEAP32[rqtp>>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));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 asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"l":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"_b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Eb":_emscripten_glBindTexture,"ub":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"O":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"N":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"ac":_glDepthFunc,"H":_glDetachShader,"G":_glDisable,"o":_glDisableVertexAttribArray,"$b":_glDrawArrays,"Zb":_glDrawElements,"u":_glEnable,"h":_glEnableVertexAttribArray,"Yb":_glFrontFace,"n":_glGenBuffers,"Xb":_glGenTextures,"t":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"E":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"g":_glTexParameteri,"Mb":_glUniform1i,"Lb":_glUniform4f,"Kb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Jb":_glViewport,"Ib":_glfwCreateWindow,"Hb":_glfwDefaultWindowHints,"Gb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"m":_glfwGetTime,"Db":_glfwInit,"Cb":_glfwMakeContextCurrent,"Bb":_glfwSetCharCallback,"Ab":_glfwSetCursorEnterCallback,"zb":_glfwSetCursorPosCallback,"yb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"wb":_glfwSetKeyCallback,"vb":_glfwSetMouseButtonCallback,"tb":_glfwSetScrollCallback,"sb":_glfwSetWindowIconifyCallback,"rb":_glfwSetWindowShouldClose,"qb":_glfwSetWindowSizeCallback,"pb":_glfwSwapBuffers,"D":_glfwTerminate,"e":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"ob":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i<argc;i++){HEAP32[(argv>>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_geometric_shapes.wasm b/examples/web/models/models_geometric_shapes.wasm Binary files differnew file mode 100644 index 0000000..bc48e03 --- /dev/null +++ b/examples/web/models/models_geometric_shapes.wasm diff --git a/examples/web/models/models_heightmap.c b/examples/web/models/models_heightmap.c index 009b50e..73ff4a3 100644 --- a/examples/web/models/models_heightmap.c +++ b/examples/web/models/models_heightmap.c @@ -18,16 +18,16 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define our custom camera to look into our 3d world Camera camera = {{ 18.0f, 16.0f, 18.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; -Texture2D texture; -Model map; +Texture2D texture = { 0 }; +Model model = { 0 }; -Vector3 mapPosition = { -8.0f, 0.0f, -8.0f }; // Set model position (depends on model scaling!) +Vector3 mapPosition = { -8.0f, 0.0f, -8.0f }; // Set model position (depends on model scaling!) //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -35,7 +35,7 @@ Vector3 mapPosition = { -8.0f, 0.0f, -8.0f }; // Set model position (depends on void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -45,13 +45,13 @@ int main(void) Image image = LoadImage("resources/heightmap.png"); // Load heightmap image (RAM) texture = LoadTextureFromImage(image); // Convert image to texture (VRAM) - + Mesh mesh = GenMeshHeightmap(image, (Vector3){ 16, 8, 16 }); // Generate heightmap mesh (RAM and VRAM) - map = LoadModelFromMesh(mesh); // Load model from generated mesh - map.material.maps[MAP_DIFFUSE].texture = texture; // Set map diffuse texture - + model = LoadModelFromMesh(mesh); // Load model from generated mesh + model.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set map diffuse texture + UnloadImage(image); // Unload heightmap image from RAM, already uploaded to VRAM - + SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode #if defined(PLATFORM_WEB) @@ -59,7 +59,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -70,7 +70,7 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- UnloadTexture(texture); // Unload texture - UnloadModel(map); // Unload model + UnloadModel(model); // Unload model CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -94,15 +94,14 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - Begin3dMode(camera); + BeginMode3D(camera); + + DrawModel(model, mapPosition, 1.0f, RED); - // NOTE: Model is scaled to 1/4 of its original size (128x128 units) - DrawModel(map, mapPosition, 1.0f, RED); + DrawGrid(20, 1.0f); - DrawGrid(20, 1.0f); + EndMode3D(); - End3dMode(); - DrawTexture(texture, screenWidth - texture.width - 20, 20, WHITE); DrawRectangleLines(screenWidth - texture.width - 20, 20, texture.width, texture.height, GREEN); diff --git a/examples/web/models/models_heightmap.data b/examples/web/models/models_heightmap.data Binary files differnew file mode 100644 index 0000000..fe30f67 --- /dev/null +++ b/examples/web/models/models_heightmap.data diff --git a/examples/web/models/models_heightmap.html b/examples/web/models/models_heightmap.html new file mode 100644 index 0000000..f84df91 --- /dev/null +++ b/examples/web/models/models_heightmap.html @@ -0,0 +1 @@ +<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/games property=og:url><meta content=raylib.com property=og:site_name><meta content="New hmtl5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:url><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header_part{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(https://www.raylib.com/common/img/raylib_logo_64x64.png)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}#emscripten_logo{display:inline-block;margin:0}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:20px;width:30px}#controls{display:inline-block;float:right;vertical-align:top;margin-top:30px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}</style></head><body><div id=header_part><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value=Fullscreen></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault()></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function SaveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var t=document.querySelector("#output");return t&&(t.value=""),function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.log(e),t&&(t.value+=e+"\n",t.scrollTop=t.scrollHeight)}}(),printErr:function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()},!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Date.now()<30||(t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!1,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(e){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script src=models_heightmap.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_heightmap.js b/examples/web/models/models_heightmap.js new file mode 100644 index 0000000..bf6f225 --- /dev/null +++ b/examples/web/models/models_heightmap.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_heightmap.data";var REMOTE_PACKAGE_BASE="models_heightmap.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i<files.length;++i){new DataRequest(files[i].start,files[i].end,files[i].audio).open("GET",files[i].filename)}function processPackageData(arrayBuffer){Module.finishedDataFileDownloads++;assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);var ptr=Module["getMemory"](byteArray.length);Module["HEAPU8"].set(byteArray,ptr);DataRequest.prototype.byteArray=Module["HEAPU8"].subarray(ptr,ptr+byteArray.length);var files=metadata.files;for(var i=0;i<files.length;++i){DataRequest.prototype.requests[files[i].filename].onload()}Module["removeRunDependency"]("datafile_models/models_heightmap.data")}Module["addRunDependency"]("datafile_models/models_heightmap.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[{"start":0,"audio":0,"end":10920,"filename":"/resources/heightmap.png"}],"remote_package_size":10920,"package_uuid":"be9743fd-c185-4017-a376-66b1b69b0365"})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];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 require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;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)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["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);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["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"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}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=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["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)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];type=singleType||types[i];if(type===0){i++;continue}if(type=="i64")type="i32";setValue(ret+i,curr,type);if(previousType!==type){typeSize=getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}function getMemory(size){if(!runtimeInitialized)return dynamicAlloc(size);return _malloc(size)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(u8Array[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=u8Array[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[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<str.length;++i){var u=str.charCodeAt(i);if(u>=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 allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__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(0)}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)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5273568,DYNAMICTOP_PTR=30656;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY<TOTAL_STACK)err("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+INITIAL_TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{if(typeof WebAssembly==="object"&&typeof WebAssembly.Memory==="function"){wasmMemory=new WebAssembly.Memory({"initial":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE});buffer=wasmMemory.buffer}else{buffer=new ArrayBuffer(INITIAL_TOTAL_MEMORY)}}updateGlobalBufferViews();HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();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 __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=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 ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}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"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_heightmap.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){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(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};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 ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}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)},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.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(19)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(6)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(6)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(5)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var isPosixPlatform=process.platform!="win32";var fd=process.stdin.fd;if(isPosixPlatform){var usingDevice=false;try{fd=fs.openSync("/dev/stdin","r");usingDevice=true}catch(e){}}try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(usingDevice){fs.closeSync(fd)}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}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(1)}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<node.usedBytes;++i)arr.push(node.contents[i]);return arr}return node.contents},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array;if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|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(new ArrayBuffer(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<newSize)node.contents.push(0);node.usedBytes=newSize},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[2]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(39)}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name]},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(39)}delete parent.contents[name]},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(22)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(22)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(12)}buffer.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var IDBFS={dbs:{},indexedDB:function(){if(typeof indexedDB!=="undefined")return indexedDB;var ret=null;if(typeof window==="object")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,"IDBFS used, but indexedDB not supported");return ret},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function(mount){return MEMFS.mount.apply(null,arguments)},syncfs:function(mount,populate,callback){IDBFS.getLocalSet(mount,function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},getDB:function(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback("Unable to connect to IndexedDB")}req.onupgradeneeded=function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}};req.onsuccess=function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db)};req.onerror=function(e){callback(this.error);e.preventDefault()}},getLocalSet:function(mount,callback){var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return function(p){return PATH.join2(root,p)}}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:"local",entries:entries})},getRemoteSet:function(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,function(err,db){if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=function(e){callback(this.error);e.preventDefault()};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db:db,entries:entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()}}catch(e){return callback(e)}})},loadLocalEntry:function(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error("node type not supported"))}},storeLocalEntry:function(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode)}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp)}catch(e){return callback(e)}callback(null)},removeLocalEntry:function(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:function(store,path,callback){var req=store.get(path);req.onsuccess=function(event){callback(null,event.target.result)};req.onerror=function(e){callback(this.error);e.preventDefault()}},storeRemoteEntry:function(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},removeRemoteEntry:function(store,path,callback){var req=store.delete(path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},reconcile:function(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join("/");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,parts[i],WORKERFS.DIR_MODE,0)}parent=createdParents[curr]}return parent}function base(path){var parts=path.split("/");return parts[parts.length-1]}Array.prototype.forEach.call(mount.opts["files"]||[],function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate)});(mount.opts["blobs"]||[]).forEach(function(obj){WORKERFS.createNode(ensureParent(obj["name"]),base(obj["name"]),WORKERFS.FILE_MODE,0,obj["data"])});(mount.opts["packages"]||[]).forEach(function(pack){pack["metadata"].files.forEach(function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack["blob"].slice(file.start,file.end))})});return root},createNode:function(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents}else{node.size=4096;node.contents={}}if(parent){parent.contents[name]=node}return node},node_ops:{getattr:function(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)}},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}},lookup:function(parent,name){throw new FS.ErrnoError(2)},mknod:function(parent,name,mode,dev){throw new FS.ErrnoError(1)},rename:function(oldNode,newDir,newName){throw new FS.ErrnoError(1)},unlink:function(parent,name){throw new FS.ErrnoError(1)},rmdir:function(parent,name){throw new FS.ErrnoError(1)},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newName,oldPath){throw new FS.ErrnoError(1)},readlink:function(node){throw new FS.ErrnoError(1)}},stream_ops:{read:function(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(40)}}}}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<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>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 err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,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){if(!FS.FSNode){FS.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};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.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)}}})}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 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}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 err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}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(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}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(29)}},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){console.log("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(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}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(16)}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(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}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(22)}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(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}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;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=17)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(2)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(2)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(1)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(16)}if(!old_dir||!new_dir)throw new FS.ErrnoError(2);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(18)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(22)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(39)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(1)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(16)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(20)}return node.node_ops.readdir(node)},unlink:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(2)}if(!link.node_ops.readlink){throw new FS.ErrnoError(22)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(2)}if(!node.node_ops.getattr){throw new FS.ErrnoError(1)}return node.node_ops.getattr(node)},lstat:function(path){return FS.stat(path,true)},chmod:function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chmod(stream.node,mode)},chown:function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chown(stream.node,uid,gid)},truncate:function(path,len){if(len<0){throw new FS.ErrnoError(22)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(21)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(22)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(22)}FS.truncate(stream.node,len)},utime:function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(2)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(17)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(2)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;console.log("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:function(stream){return stream.fd===null},llseek:function(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(29)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(22)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.read){throw new FS.ErrnoError(22)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.write){throw new FS.ErrnoError(22)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(offset<0||length<=0){throw new FS.ErrnoError(22)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(19)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(95)}stream.stream_ops.allocate(stream,offset,length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(13)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(19)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(25)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:function(path,data,opts){opts=opts||{};opts.flags=opts.flags||"w";var stream=FS.open(path,opts.flags,opts.mode);if(typeof data==="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:function(){return FS.currentPath},chdir:function(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(2)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(20)}var err=FS.nodePermissions(lookup.node,"x");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path},createDefaultDirectories:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return length}});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device;if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);random_device=function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");random_device=function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}else{}if(!random_device){random_device=function(){abort("random_device")}}FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode("/proc/self","fd",16384|511,73);node.node_ops={lookup:function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(9);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin","r");var stdout=FS.open("/dev/stdout","w");var stderr=FS.open("/dev/stderr","w")},ensureErrnoError:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error";if(this.stack)Object.defineProperty(this,"stack",{value:(new Error).stack,writable:true})};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[2].forEach(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS}},init:function(input,output,error){FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},joinPath:function(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]=="/")path=path.substr(1);return path},absolutePath:function(relative,base){return PATH.resolve(base,relative)},standardizePath:function(path){return PATH.normalize(path)},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{___setErrNo(ret.error);return null}},analyzePath:function(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createFolder:function(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode)},createPath:function(parent,path,canRead,canWrite){parent=typeof parent==="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:function(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data==="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,"w");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(5)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},createLink:function(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);return FS.symlink(target,path)},forceLoadFile:function(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!=="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(Module["read"]){try{obj.contents=intArrayFromString(Module["read"](obj.url),true);obj.usedBytes=obj.contents.length}catch(e){success=false}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}if(!success)___setErrNo(5);return success},createLazyFile:function(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=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;console.log("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(5)}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(5)}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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function(dirfd,path){if(path[0]!=="/"){var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path}path=PATH.join2(dir,path)}return path},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR}throw e}HEAP32[buf>>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){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,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-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;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-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}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<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;if(typeof SDL==="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["preloadPlugins"].push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("warning: browser could not fully decode audio "+name+", trying slower base64 approach");function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};var EGL={errorCode:12288,defaultDisplayInitialized:false,currentContext:0,currentReadSurface:0,currentDrawSurface:0,contextAttributes:{alpha:false,depth:false,stencil:false,antialias:false},stringCache:{},setErrorCode:function(code){EGL.errorCode=code},chooseConfig:function(display,attribList,config,config_size,numConfigs){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(attribList){for(;;){var param=HEAP32[attribList>>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(this,call.argsList)}},inEventHandler:0,currentEventHandler:null,eventHandlers:[],isInternetExplorer:function(){return navigator.userAgent.indexOf("MSIE")!==-1||navigator.appVersion.indexOf("Trident/")>0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getBoundingClientRectOrZeros:function(target){return target.getBoundingClientRect?target.getBoundingClientRect():{left:0,top:0}},pageScrollPos:function(){if(window.pageXOffset>0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i<GL.MINI_TEMP_BUFFER_SIZE;i++){GL.miniTempBufferViews[i]=GL.miniTempBuffer.subarray(0,i+1)}},recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i<ret;i++){table[i]=null}return ret},MINI_TEMP_BUFFER_SIZE:256,miniTempBuffer:null,miniTempBufferViews:[0],getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i<result.length;++i){switch(type){case"Integer":HEAP32[p+i*4>>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[location]);if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i<e.touches.length;++i){var touch=e.touches[i];touches[touch.identifier]=touch}for(var i=0;i<e.changedTouches.length;++i){var touch=e.changedTouches[i];touches[touch.identifier]=touch;touch.changed=true}for(var i=0;i<e.targetTouches.length;++i){var touch=e.targetTouches[i];touches[touch.identifier].onTarget=true}var touchEvent=JSEvents.touchEvent;var ptr=touchEvent;HEAP32[ptr+4>>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;dynCall_vidd(GLFW.active.cursorPosFunc,GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;dynCall_viiii(GLFW.active.mouseButtonFunc,GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),"i8",ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),"i8",ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),"float",ALLOC_NORMAL)};if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.keyFunc=cbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.charFunc=cbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.mouseButtonFunc=cbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorPosFunc=cbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.scrollFunc=cbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.dropFunc=cbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowSizeFunc=cbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowCloseFunc=cbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowRefreshFunc=cbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++);if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++);if(i==GLFW.windows.length){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetCursorPos(winid,x,y){GLFW.getCursorPos(winid,x,y)}function _glfwGetKey(winid,key){return GLFW.getKey(winid,key)}function _glfwGetMouseButton(winid,button){return GLFW.getMouseButton(winid,button)}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorEnterFunc=cbfun}function _glfwSetCursorPosCallback(winid,cbfun){GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){GLFW.errorFunc=cbfun}function _glfwSetKeyCallback(winid,cbfun){GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowIconifyFunc=cbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _llvm_stackrestore(p){var self=_llvm_stacksave;var ret=self.LLVM_SAVEDSTACKS[p];self.LLVM_SAVEDSTACKS.splice(p,1);stackRestore(ret)}function _llvm_stacksave(){var self=_llvm_stacksave;if(!self.LLVM_SAVEDSTACKS){self.LLVM_SAVEDSTACKS=[]}self.LLVM_SAVEDSTACKS.push(stackSave());return self.LLVM_SAVEDSTACKS.length-1}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function _usleep(useconds){var msec=useconds/1e3;if((ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self["performance"]&&self["performance"]["now"]){var start=self["performance"]["now"]();while(self["performance"]["now"]()-start<msec){}}else{var start=Date.now();while(Date.now()-start<msec){}}return 0}function _nanosleep(rqtp,rmtp){var seconds=HEAP32[rqtp>>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));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 asmGlobalArg={};var asmLibraryArg={"d":abort,"b":___assert_fail,"qc":___lock,"F":___setErrNo,"fb":___syscall140,"Wa":___syscall145,"E":___syscall146,"q":___syscall221,"ra":___syscall5,"D":___syscall54,"Y":___syscall6,"C":___unlock,"B":_eglGetProcAddress,"X":_emscripten_exit_pointerlock,"vd":_emscripten_get_gamepad_status,"kd":_emscripten_get_heap_size,"$c":_emscripten_get_num_gamepads,"W":_emscripten_get_pointerlock_status,"Gc":_emscripten_glActiveTexture,"wc":_emscripten_glAttachShader,"pc":_emscripten_glBeginQueryEXT,"ic":_emscripten_glBindAttribLocation,"fc":_emscripten_glBindBuffer,"ac":_emscripten_glBindFramebuffer,"Vb":_emscripten_glBindRenderbuffer,"Qb":_emscripten_glBindTexture,"Gb":_emscripten_glBindVertexArrayOES,"vb":_emscripten_glBlendColor,"rb":_emscripten_glBlendEquation,"qb":_emscripten_glBlendEquationSeparate,"pb":_emscripten_glBlendFunc,"ob":_emscripten_glBlendFuncSeparate,"nb":_emscripten_glBufferData,"mb":_emscripten_glBufferSubData,"lb":_emscripten_glCheckFramebufferStatus,"kb":_emscripten_glClear,"jb":_emscripten_glClearColor,"ib":_emscripten_glClearDepthf,"hb":_emscripten_glClearStencil,"gb":_emscripten_glColorMask,"eb":_emscripten_glCompileShader,"db":_emscripten_glCompressedTexImage2D,"cb":_emscripten_glCompressedTexSubImage2D,"bb":_emscripten_glCopyTexImage2D,"ab":_emscripten_glCopyTexSubImage2D,"$a":_emscripten_glCreateProgram,"_a":_emscripten_glCreateShader,"Za":_emscripten_glCullFace,"Ya":_emscripten_glDeleteBuffers,"Xa":_emscripten_glDeleteFramebuffers,"Va":_emscripten_glDeleteProgram,"Ua":_emscripten_glDeleteQueriesEXT,"Ta":_emscripten_glDeleteRenderbuffers,"Sa":_emscripten_glDeleteShader,"Ra":_emscripten_glDeleteTextures,"Qa":_emscripten_glDeleteVertexArraysOES,"Pa":_emscripten_glDepthFunc,"Oa":_emscripten_glDepthMask,"Na":_emscripten_glDepthRangef,"Ma":_emscripten_glDetachShader,"La":_emscripten_glDisable,"Ka":_emscripten_glDisableVertexAttribArray,"Ja":_emscripten_glDrawArrays,"Ia":_emscripten_glDrawArraysInstancedANGLE,"Ha":_emscripten_glDrawBuffersWEBGL,"Ga":_emscripten_glDrawElements,"Fa":_emscripten_glDrawElementsInstancedANGLE,"Ea":_emscripten_glEnable,"Da":_emscripten_glEnableVertexAttribArray,"Ca":_emscripten_glEndQueryEXT,"Ba":_emscripten_glFinish,"Aa":_emscripten_glFlush,"za":_emscripten_glFramebufferRenderbuffer,"ya":_emscripten_glFramebufferTexture2D,"xa":_emscripten_glFrontFace,"wa":_emscripten_glGenBuffers,"va":_emscripten_glGenFramebuffers,"ua":_emscripten_glGenQueriesEXT,"ta":_emscripten_glGenRenderbuffers,"sa":_emscripten_glGenTextures,"qa":_emscripten_glGenVertexArraysOES,"pa":_emscripten_glGenerateMipmap,"oa":_emscripten_glGetActiveAttrib,"na":_emscripten_glGetActiveUniform,"ma":_emscripten_glGetAttachedShaders,"la":_emscripten_glGetAttribLocation,"ka":_emscripten_glGetBooleanv,"ja":_emscripten_glGetBufferParameteriv,"ia":_emscripten_glGetError,"ha":_emscripten_glGetFloatv,"ga":_emscripten_glGetFramebufferAttachmentParameteriv,"fa":_emscripten_glGetIntegerv,"ea":_emscripten_glGetProgramInfoLog,"da":_emscripten_glGetProgramiv,"ca":_emscripten_glGetQueryObjecti64vEXT,"ba":_emscripten_glGetQueryObjectivEXT,"aa":_emscripten_glGetQueryObjectui64vEXT,"$":_emscripten_glGetQueryObjectuivEXT,"_":_emscripten_glGetQueryivEXT,"Z":_emscripten_glGetRenderbufferParameteriv,"he":_emscripten_glGetShaderInfoLog,"ge":_emscripten_glGetShaderPrecisionFormat,"fe":_emscripten_glGetShaderSource,"ee":_emscripten_glGetShaderiv,"de":_emscripten_glGetString,"ce":_emscripten_glGetTexParameterfv,"be":_emscripten_glGetTexParameteriv,"ae":_emscripten_glGetUniformLocation,"$d":_emscripten_glGetUniformfv,"_d":_emscripten_glGetUniformiv,"Zd":_emscripten_glGetVertexAttribPointerv,"Yd":_emscripten_glGetVertexAttribfv,"Xd":_emscripten_glGetVertexAttribiv,"Wd":_emscripten_glHint,"Vd":_emscripten_glIsBuffer,"Ud":_emscripten_glIsEnabled,"Td":_emscripten_glIsFramebuffer,"Sd":_emscripten_glIsProgram,"Rd":_emscripten_glIsQueryEXT,"Qd":_emscripten_glIsRenderbuffer,"Pd":_emscripten_glIsShader,"Od":_emscripten_glIsTexture,"Nd":_emscripten_glIsVertexArrayOES,"Md":_emscripten_glLineWidth,"Ld":_emscripten_glLinkProgram,"Kd":_emscripten_glPixelStorei,"Jd":_emscripten_glPolygonOffset,"Id":_emscripten_glQueryCounterEXT,"Hd":_emscripten_glReadPixels,"Gd":_emscripten_glReleaseShaderCompiler,"Fd":_emscripten_glRenderbufferStorage,"Ed":_emscripten_glSampleCoverage,"Dd":_emscripten_glScissor,"Cd":_emscripten_glShaderBinary,"Bd":_emscripten_glShaderSource,"Ad":_emscripten_glStencilFunc,"zd":_emscripten_glStencilFuncSeparate,"yd":_emscripten_glStencilMask,"xd":_emscripten_glStencilMaskSeparate,"wd":_emscripten_glStencilOp,"ud":_emscripten_glStencilOpSeparate,"td":_emscripten_glTexImage2D,"sd":_emscripten_glTexParameterf,"rd":_emscripten_glTexParameterfv,"qd":_emscripten_glTexParameteri,"pd":_emscripten_glTexParameteriv,"od":_emscripten_glTexSubImage2D,"nd":_emscripten_glUniform1f,"md":_emscripten_glUniform1fv,"ld":_emscripten_glUniform1i,"jd":_emscripten_glUniform1iv,"id":_emscripten_glUniform2f,"hd":_emscripten_glUniform2fv,"gd":_emscripten_glUniform2i,"fd":_emscripten_glUniform2iv,"ed":_emscripten_glUniform3f,"dd":_emscripten_glUniform3fv,"cd":_emscripten_glUniform3i,"bd":_emscripten_glUniform3iv,"ad":_emscripten_glUniform4f,"_c":_emscripten_glUniform4fv,"Zc":_emscripten_glUniform4i,"Yc":_emscripten_glUniform4iv,"Xc":_emscripten_glUniformMatrix2fv,"Wc":_emscripten_glUniformMatrix3fv,"Vc":_emscripten_glUniformMatrix4fv,"Uc":_emscripten_glUseProgram,"Tc":_emscripten_glValidateProgram,"Sc":_emscripten_glVertexAttrib1f,"Rc":_emscripten_glVertexAttrib1fv,"Qc":_emscripten_glVertexAttrib2f,"Pc":_emscripten_glVertexAttrib2fv,"Oc":_emscripten_glVertexAttrib3f,"Nc":_emscripten_glVertexAttrib3fv,"Mc":_emscripten_glVertexAttrib4f,"Lc":_emscripten_glVertexAttrib4fv,"Kc":_emscripten_glVertexAttribDivisorANGLE,"Jc":_emscripten_glVertexAttribPointer,"Ic":_emscripten_glViewport,"Hc":_emscripten_memcpy_big,"Fc":_emscripten_request_pointerlock,"Ec":_emscripten_resize_heap,"V":_emscripten_run_script,"Dc":_emscripten_sample_gamepad_data,"Cc":_emscripten_set_click_callback_on_thread,"Bc":_emscripten_set_fullscreenchange_callback_on_thread,"Ac":_emscripten_set_gamepadconnected_callback_on_thread,"zc":_emscripten_set_gamepaddisconnected_callback_on_thread,"yc":_emscripten_set_keypress_callback_on_thread,"xc":_emscripten_set_main_loop,"vc":_emscripten_set_touchcancel_callback_on_thread,"uc":_emscripten_set_touchend_callback_on_thread,"tc":_emscripten_set_touchmove_callback_on_thread,"sc":_emscripten_set_touchstart_callback_on_thread,"rc":_exit,"A":_glActiveTexture,"U":_glAttachShader,"n":_glBindAttribLocation,"c":_glBindBuffer,"j":_glBindTexture,"oc":_glBlendFunc,"h":_glBufferData,"z":_glBufferSubData,"T":_glClear,"S":_glClearColor,"nc":_glClearDepthf,"mc":_glCompileShader,"lc":_glCompressedTexImage2D,"kc":_glCreateProgram,"jc":_glCreateShader,"hc":_glCullFace,"p":_glDeleteBuffers,"y":_glDeleteProgram,"R":_glDeleteShader,"Q":_glDeleteTextures,"gc":_glDepthFunc,"P":_glDetachShader,"O":_glDisable,"i":_glDisableVertexAttribArray,"N":_glDrawArrays,"M":_glDrawElements,"x":_glEnable,"f":_glEnableVertexAttribArray,"ec":_glFrontFace,"g":_glGenBuffers,"dc":_glGenTextures,"w":_glGetAttribLocation,"cc":_glGetFloatv,"bc":_glGetProgramInfoLog,"L":_glGetProgramiv,"$b":_glGetShaderInfoLog,"K":_glGetShaderiv,"o":_glGetString,"v":_glGetUniformLocation,"_b":_glLinkProgram,"Zb":_glPixelStorei,"Yb":_glReadPixels,"Xb":_glShaderSource,"Wb":_glTexImage2D,"m":_glTexParameteri,"J":_glUniform1i,"u":_glUniform4f,"t":_glUniformMatrix4fv,"l":_glUseProgram,"Ub":_glVertexAttrib2f,"Tb":_glVertexAttrib3f,"s":_glVertexAttrib4f,"e":_glVertexAttribPointer,"Sb":_glViewport,"Rb":_glfwCreateWindow,"Pb":_glfwDefaultWindowHints,"Ob":_glfwDestroyWindow,"Nb":_glfwGetCursorPos,"Mb":_glfwGetKey,"Lb":_glfwGetMouseButton,"r":_glfwGetTime,"Kb":_glfwInit,"Jb":_glfwMakeContextCurrent,"Ib":_glfwSetCharCallback,"Hb":_glfwSetCursorEnterCallback,"Fb":_glfwSetCursorPosCallback,"Eb":_glfwSetDropCallback,"Db":_glfwSetErrorCallback,"Cb":_glfwSetKeyCallback,"Bb":_glfwSetMouseButtonCallback,"Ab":_glfwSetScrollCallback,"zb":_glfwSetWindowIconifyCallback,"yb":_glfwSetWindowShouldClose,"xb":_glfwSetWindowSizeCallback,"wb":_glfwSwapBuffers,"I":_glfwTerminate,"k":_glfwWindowHint,"H":_llvm_stackrestore,"G":_llvm_stacksave,"ub":_nanosleep,"tb":_time,"sb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["we"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i<argc;i++){HEAP32[(argv>>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_heightmap.wasm b/examples/web/models/models_heightmap.wasm Binary files differnew file mode 100644 index 0000000..e1db331 --- /dev/null +++ b/examples/web/models/models_heightmap.wasm diff --git a/examples/web/models/models_material_pbr.c b/examples/web/models/models_material_pbr.c index b2b7ac6..bbec491 100644 --- a/examples/web/models/models_material_pbr.c +++ b/examples/web/models/models_material_pbr.c @@ -27,13 +27,13 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world Camera camera = {{ 4.0f, 4.0f, 4.0f }, { 0.0f, 0.5f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; -Model model; +Model model = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -44,7 +44,7 @@ void UpdateDrawFrame(void); // Update and Draw one frame static Material LoadMaterialPBR(Color albedo, float metalness, float roughness); //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -59,13 +59,13 @@ int main(void) // Define lights attributes // NOTE: Shader is passed to every light on creation to define shader bindings internally - Light lights[MAX_LIGHTS] = { + Light lights[MAX_LIGHTS] = { CreateLight(LIGHT_POINT, (Vector3){ LIGHT_DISTANCE, LIGHT_HEIGHT, 0.0f }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 255, 0, 0, 255 }, model.material.shader), CreateLight(LIGHT_POINT, (Vector3){ 0.0f, LIGHT_HEIGHT, LIGHT_DISTANCE }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 0, 255, 0, 255 }, model.material.shader), CreateLight(LIGHT_POINT, (Vector3){ -LIGHT_DISTANCE, LIGHT_HEIGHT, 0.0f }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 0, 0, 255, 255 }, model.material.shader), - CreateLight(LIGHT_DIRECTIONAL, (Vector3){ 0.0f, LIGHT_HEIGHT*2.0f, -LIGHT_DISTANCE }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 255, 0, 255, 255 }, model.material.shader) + CreateLight(LIGHT_DIRECTIONAL, (Vector3){ 0.0f, LIGHT_HEIGHT*2.0f, -LIGHT_DISTANCE }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 255, 0, 255, 255 }, model.material.shader) }; - + SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode #if defined(PLATFORM_WEB) @@ -73,7 +73,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -99,7 +99,7 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); // Update camera - + // Send to material PBR shader camera view position float cameraPos[3] = { camera.position.x, camera.position.y, camera.position.z }; SetShaderValue(model.material.shader, model.material.shader.locs[LOC_VECTOR_VIEW], cameraPos, 3); @@ -114,7 +114,7 @@ void UpdateDrawFrame(void) Begin3dMode(camera); DrawModel(model, Vector3Zero(), 1.0f, WHITE); - + DrawGrid(10, 1.0f); End3dMode(); @@ -130,12 +130,12 @@ void UpdateDrawFrame(void) static Material LoadMaterialPBR(Color albedo, float metalness, float roughness) { Material mat = { 0 }; // NOTE: All maps textures are set to { 0 } - + #define PATH_PBR_VS "resources/shaders/pbr.vs" // Path to physically based rendering vertex shader #define PATH_PBR_FS "resources/shaders/pbr.fs" // Path to physically based rendering fragment shader - + mat.shader = LoadShader(PATH_PBR_VS, PATH_PBR_FS); - + // Get required locations points for PBR material // NOTE: Those location names must be available and used in the shader code mat.shader.locs[LOC_MAP_ALBEDO] = GetShaderLocation(mat.shader, "albedo.sampler"); @@ -153,28 +153,28 @@ static Material LoadMaterialPBR(Color albedo, float metalness, float roughness) mat.shader.locs[LOC_MATRIX_MODEL] = GetShaderLocation(mat.shader, "mMatrix"); mat.shader.locs[LOC_MATRIX_VIEW] = GetShaderLocation(mat.shader, "view"); mat.shader.locs[LOC_VECTOR_VIEW] = GetShaderLocation(mat.shader, "viewPos"); - + // Set PBR standard maps mat.maps[MAP_ALBEDO].texture = LoadTexture("resources/pbr/trooper_albedo.png"); mat.maps[MAP_NORMAL].texture = LoadTexture("resources/pbr/trooper_normals.png"); mat.maps[MAP_METALNESS].texture = LoadTexture("resources/pbr/trooper_metalness.png"); mat.maps[MAP_ROUGHNESS].texture = LoadTexture("resources/pbr/trooper_roughness.png"); mat.maps[MAP_OCCLUSION].texture = LoadTexture("resources/pbr/trooper_ao.png"); - + // Set environment maps #define PATH_CUBEMAP_VS "resources/shaders/cubemap.vs" // Path to equirectangular to cubemap vertex shader #define PATH_CUBEMAP_FS "resources/shaders/cubemap.fs" // Path to equirectangular to cubemap fragment shader #define PATH_SKYBOX_VS "resources/shaders/skybox.vs" // Path to skybox vertex shader #define PATH_IRRADIANCE_FS "resources/shaders/irradiance.fs" // Path to irradiance (GI) calculation fragment shader #define PATH_PREFILTER_FS "resources/shaders/prefilter.fs" // Path to reflection prefilter calculation fragment shader - #define PATH_BRDF_VS "resources/shaders/brdf.vs" // Path to bidirectional reflectance distribution function vertex shader + #define PATH_BRDF_VS "resources/shaders/brdf.vs" // Path to bidirectional reflectance distribution function vertex shader #define PATH_BRDF_FS "resources/shaders/brdf.fs" // Path to bidirectional reflectance distribution function fragment shader - + Shader shdrCubemap = LoadShader(PATH_CUBEMAP_VS, PATH_CUBEMAP_FS); Shader shdrIrradiance = LoadShader(PATH_SKYBOX_VS, PATH_IRRADIANCE_FS); Shader shdrPrefilter = LoadShader(PATH_SKYBOX_VS, PATH_PREFILTER_FS); Shader shdrBRDF = LoadShader(PATH_BRDF_VS, PATH_BRDF_FS); - + // Setup required shader locations SetShaderValuei(shdrCubemap, GetShaderLocation(shdrCubemap, "equirectangularMap"), (int[1]){ 0 }, 1); SetShaderValuei(shdrIrradiance, GetShaderLocation(shdrIrradiance, "environmentMap"), (int[1]){ 0 }, 1); @@ -187,27 +187,27 @@ static Material LoadMaterialPBR(Color albedo, float metalness, float roughness) mat.maps[MAP_BRDF].texture = GenTextureBRDF(shdrBRDF, cubemap, BRDF_SIZE); UnloadTexture(cubemap); UnloadTexture(texHDR); - + // Unload already used shaders (to create specific textures) UnloadShader(shdrCubemap); UnloadShader(shdrIrradiance); UnloadShader(shdrPrefilter); UnloadShader(shdrBRDF); - + // Set textures filtering for better quality SetTextureFilter(mat.maps[MAP_ALBEDO].texture, FILTER_BILINEAR); SetTextureFilter(mat.maps[MAP_NORMAL].texture, FILTER_BILINEAR); SetTextureFilter(mat.maps[MAP_METALNESS].texture, FILTER_BILINEAR); SetTextureFilter(mat.maps[MAP_ROUGHNESS].texture, FILTER_BILINEAR); SetTextureFilter(mat.maps[MAP_OCCLUSION].texture, FILTER_BILINEAR); - + // Enable sample usage in shader for assigned textures SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "albedo.useSampler"), (int[1]){ 1 }, 1); SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "normals.useSampler"), (int[1]){ 1 }, 1); SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "metalness.useSampler"), (int[1]){ 1 }, 1); SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "roughness.useSampler"), (int[1]){ 1 }, 1); SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "occlusion.useSampler"), (int[1]){ 1 }, 1); - + int renderModeLoc = GetShaderLocation(mat.shader, "renderMode"); SetShaderValuei(mat.shader, renderModeLoc, (int[1]){ 0 }, 1); diff --git a/examples/web/models/models_mesh_generation.c b/examples/web/models/models_mesh_generation.c index 32060ca..053672c 100644 --- a/examples/web/models/models_mesh_generation.c +++ b/examples/web/models/models_mesh_generation.c @@ -15,15 +15,15 @@ #include <emscripten/emscripten.h> #endif -#define NUM_MODELS 7 // We generate 7 parametric 3d shapes +#define NUM_MODELS 8 // Parametric 3d shapes to generate //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; -Model models[NUM_MODELS]; +Model models[NUM_MODELS] = { 0 }; // Define the camera to look into our 3d world Camera camera = {{ 5.0f, 5.0f, 5.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; @@ -39,7 +39,7 @@ int currentModel = 0; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -51,7 +51,7 @@ int main(void) Image checked = GenImageChecked(2, 2, 1, 1, RED, GREEN); Texture2D texture = LoadTextureFromImage(checked); UnloadImage(checked); - + models[0] = LoadModelFromMesh(GenMeshPlane(2, 2, 5, 5)); models[1] = LoadModelFromMesh(GenMeshCube(2.0f, 1.0f, 2.0f)); models[2] = LoadModelFromMesh(GenMeshSphere(2, 32, 32)); @@ -59,10 +59,11 @@ int main(void) models[4] = LoadModelFromMesh(GenMeshCylinder(1, 2, 16)); models[5] = LoadModelFromMesh(GenMeshTorus(0.25f, 4.0f, 16, 32)); models[6] = LoadModelFromMesh(GenMeshKnot(1.0f, 2.0f, 16, 128)); - + models[7] = LoadModelFromMesh(GenMeshPoly(5, 2.0f)); + // Set checked texture as default diffuse component for all models material - for (int i = 0; i < NUM_MODELS; i++) models[i].material.maps[MAP_DIFFUSE].texture = texture; - + for (int i = 0; i < NUM_MODELS; i++) models[i].materials[0].maps[MAP_DIFFUSE].texture = texture; + SetCameraMode(camera, CAMERA_ORBITAL); // Set a orbital camera mode #if defined(PLATFORM_WEB) @@ -70,7 +71,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -79,10 +80,10 @@ int main(void) #endif // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- // Unload models data (GPU VRAM) for (int i = 0; i < NUM_MODELS; i++) UnloadModel(models[i]); - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -97,11 +98,22 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); // Update internal camera and our camera - + if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) { currentModel = (currentModel + 1)%NUM_MODELS; // Cycle between the textures } + + if (IsKeyPressed(KEY_RIGHT)) + { + currentModel++; + if (currentModel >= NUM_MODELS) currentModel = 0; + } + else if (IsKeyPressed(KEY_LEFT)) + { + currentModel--; + if (currentModel < 0) currentModel = NUM_MODELS - 1; + } //---------------------------------------------------------------------------------- // Draw @@ -110,18 +122,18 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - Begin3dMode(camera); + BeginMode3D(camera); DrawModel(models[currentModel], position, 1.0f, WHITE); DrawGrid(10, 1.0); - End3dMode(); - + EndMode3D(); + DrawRectangle(30, 400, 310, 30, Fade(SKYBLUE, 0.5f)); DrawRectangleLines(30, 400, 310, 30, Fade(DARKBLUE, 0.5f)); DrawText("MOUSE LEFT BUTTON to CYCLE PROCEDURAL MODELS", 40, 410, 10, BLUE); - + switch(currentModel) { case 0: DrawText("PLANE", 680, 10, 20, DARKBLUE); break; @@ -131,6 +143,7 @@ void UpdateDrawFrame(void) case 4: DrawText("CYLINDER", 680, 10, 20, DARKBLUE); break; case 5: DrawText("TORUS", 680, 10, 20, DARKBLUE); break; case 6: DrawText("KNOT", 680, 10, 20, DARKBLUE); break; + case 7: DrawText("POLY", 680, 10, 20, DARKBLUE); break; default: break; } diff --git a/examples/web/models/models_mesh_generation.html b/examples/web/models/models_mesh_generation.html new file mode 100644 index 0000000..07113bb --- /dev/null +++ b/examples/web/models/models_mesh_generation.html @@ -0,0 +1 @@ +<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/games property=og:url><meta content=raylib.com property=og:site_name><meta content="New hmtl5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:url><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header_part{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(https://www.raylib.com/common/img/raylib_logo_64x64.png)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}#emscripten_logo{display:inline-block;margin:0}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:20px;width:30px}#controls{display:inline-block;float:right;vertical-align:top;margin-top:30px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}</style></head><body><div id=header_part><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value=Fullscreen></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault()></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function SaveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var t=document.querySelector("#output");return t&&(t.value=""),function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.log(e),t&&(t.value+=e+"\n",t.scrollTop=t.scrollHeight)}}(),printErr:function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()},!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Date.now()<30||(t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!1,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(e){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script src=models_mesh_generation.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_mesh_generation.js b/examples/web/models/models_mesh_generation.js new file mode 100644 index 0000000..6d5d44e --- /dev/null +++ b/examples/web/models/models_mesh_generation.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];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 require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;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)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["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);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["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"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}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=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["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)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];type=singleType||types[i];if(type===0){i++;continue}if(type=="i64")type="i32";setValue(ret+i,curr,type);if(previousType!==type){typeSize=getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(u8Array[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=u8Array[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[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<str.length;++i){var u=str.charCodeAt(i);if(u>=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 allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__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(0)}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)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5272848,DYNAMICTOP_PTR=29936;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY<TOTAL_STACK)err("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+INITIAL_TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{if(typeof WebAssembly==="object"&&typeof WebAssembly.Memory==="function"){wasmMemory=new WebAssembly.Memory({"initial":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE});buffer=wasmMemory.buffer}else{buffer=new ArrayBuffer(INITIAL_TOTAL_MEMORY)}}updateGlobalBufferViews();HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();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 __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=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 ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}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"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_mesh_generation.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){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(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};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 ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}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)},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.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(19)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(6)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(6)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(5)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var isPosixPlatform=process.platform!="win32";var fd=process.stdin.fd;if(isPosixPlatform){var usingDevice=false;try{fd=fs.openSync("/dev/stdin","r");usingDevice=true}catch(e){}}try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(usingDevice){fs.closeSync(fd)}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}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(1)}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<node.usedBytes;++i)arr.push(node.contents[i]);return arr}return node.contents},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array;if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|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(new ArrayBuffer(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<newSize)node.contents.push(0);node.usedBytes=newSize},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[2]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(39)}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name]},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(39)}delete parent.contents[name]},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(22)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(22)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(12)}buffer.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var IDBFS={dbs:{},indexedDB:function(){if(typeof indexedDB!=="undefined")return indexedDB;var ret=null;if(typeof window==="object")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,"IDBFS used, but indexedDB not supported");return ret},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function(mount){return MEMFS.mount.apply(null,arguments)},syncfs:function(mount,populate,callback){IDBFS.getLocalSet(mount,function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},getDB:function(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback("Unable to connect to IndexedDB")}req.onupgradeneeded=function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}};req.onsuccess=function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db)};req.onerror=function(e){callback(this.error);e.preventDefault()}},getLocalSet:function(mount,callback){var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return function(p){return PATH.join2(root,p)}}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:"local",entries:entries})},getRemoteSet:function(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,function(err,db){if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=function(e){callback(this.error);e.preventDefault()};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db:db,entries:entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()}}catch(e){return callback(e)}})},loadLocalEntry:function(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error("node type not supported"))}},storeLocalEntry:function(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode)}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp)}catch(e){return callback(e)}callback(null)},removeLocalEntry:function(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:function(store,path,callback){var req=store.get(path);req.onsuccess=function(event){callback(null,event.target.result)};req.onerror=function(e){callback(this.error);e.preventDefault()}},storeRemoteEntry:function(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},removeRemoteEntry:function(store,path,callback){var req=store.delete(path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},reconcile:function(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join("/");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,parts[i],WORKERFS.DIR_MODE,0)}parent=createdParents[curr]}return parent}function base(path){var parts=path.split("/");return parts[parts.length-1]}Array.prototype.forEach.call(mount.opts["files"]||[],function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate)});(mount.opts["blobs"]||[]).forEach(function(obj){WORKERFS.createNode(ensureParent(obj["name"]),base(obj["name"]),WORKERFS.FILE_MODE,0,obj["data"])});(mount.opts["packages"]||[]).forEach(function(pack){pack["metadata"].files.forEach(function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack["blob"].slice(file.start,file.end))})});return root},createNode:function(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents}else{node.size=4096;node.contents={}}if(parent){parent.contents[name]=node}return node},node_ops:{getattr:function(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)}},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}},lookup:function(parent,name){throw new FS.ErrnoError(2)},mknod:function(parent,name,mode,dev){throw new FS.ErrnoError(1)},rename:function(oldNode,newDir,newName){throw new FS.ErrnoError(1)},unlink:function(parent,name){throw new FS.ErrnoError(1)},rmdir:function(parent,name){throw new FS.ErrnoError(1)},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newName,oldPath){throw new FS.ErrnoError(1)},readlink:function(node){throw new FS.ErrnoError(1)}},stream_ops:{read:function(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(40)}}}}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<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>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 err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,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){if(!FS.FSNode){FS.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};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.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)}}})}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 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}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 err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}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(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}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(29)}},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){console.log("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(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}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(16)}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(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}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(22)}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(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}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;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=17)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(2)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(2)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(1)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(16)}if(!old_dir||!new_dir)throw new FS.ErrnoError(2);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(18)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(22)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(39)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(1)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(16)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(20)}return node.node_ops.readdir(node)},unlink:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(2)}if(!link.node_ops.readlink){throw new FS.ErrnoError(22)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(2)}if(!node.node_ops.getattr){throw new FS.ErrnoError(1)}return node.node_ops.getattr(node)},lstat:function(path){return FS.stat(path,true)},chmod:function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chmod(stream.node,mode)},chown:function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chown(stream.node,uid,gid)},truncate:function(path,len){if(len<0){throw new FS.ErrnoError(22)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(21)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(22)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(22)}FS.truncate(stream.node,len)},utime:function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(2)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(17)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(2)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;console.log("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:function(stream){return stream.fd===null},llseek:function(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(29)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(22)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.read){throw new FS.ErrnoError(22)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.write){throw new FS.ErrnoError(22)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(offset<0||length<=0){throw new FS.ErrnoError(22)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(19)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(95)}stream.stream_ops.allocate(stream,offset,length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(13)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(19)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(25)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:function(path,data,opts){opts=opts||{};opts.flags=opts.flags||"w";var stream=FS.open(path,opts.flags,opts.mode);if(typeof data==="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:function(){return FS.currentPath},chdir:function(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(2)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(20)}var err=FS.nodePermissions(lookup.node,"x");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path},createDefaultDirectories:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return length}});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device;if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);random_device=function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");random_device=function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}else{}if(!random_device){random_device=function(){abort("random_device")}}FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode("/proc/self","fd",16384|511,73);node.node_ops={lookup:function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(9);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin","r");var stdout=FS.open("/dev/stdout","w");var stderr=FS.open("/dev/stderr","w")},ensureErrnoError:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error";if(this.stack)Object.defineProperty(this,"stack",{value:(new Error).stack,writable:true})};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[2].forEach(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS}},init:function(input,output,error){FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},joinPath:function(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]=="/")path=path.substr(1);return path},absolutePath:function(relative,base){return PATH.resolve(base,relative)},standardizePath:function(path){return PATH.normalize(path)},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{___setErrNo(ret.error);return null}},analyzePath:function(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createFolder:function(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode)},createPath:function(parent,path,canRead,canWrite){parent=typeof parent==="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:function(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data==="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,"w");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(5)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},createLink:function(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);return FS.symlink(target,path)},forceLoadFile:function(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!=="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(Module["read"]){try{obj.contents=intArrayFromString(Module["read"](obj.url),true);obj.usedBytes=obj.contents.length}catch(e){success=false}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}if(!success)___setErrNo(5);return success},createLazyFile:function(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=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;console.log("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(5)}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(5)}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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function(dirfd,path){if(path[0]!=="/"){var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path}path=PATH.join2(dir,path)}return path},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR}throw e}HEAP32[buf>>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){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,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-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;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-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}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<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;if(typeof SDL==="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["preloadPlugins"].push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("warning: browser could not fully decode audio "+name+", trying slower base64 approach");function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};var EGL={errorCode:12288,defaultDisplayInitialized:false,currentContext:0,currentReadSurface:0,currentDrawSurface:0,contextAttributes:{alpha:false,depth:false,stencil:false,antialias:false},stringCache:{},setErrorCode:function(code){EGL.errorCode=code},chooseConfig:function(display,attribList,config,config_size,numConfigs){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(attribList){for(;;){var param=HEAP32[attribList>>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(this,call.argsList)}},inEventHandler:0,currentEventHandler:null,eventHandlers:[],isInternetExplorer:function(){return navigator.userAgent.indexOf("MSIE")!==-1||navigator.appVersion.indexOf("Trident/")>0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getBoundingClientRectOrZeros:function(target){return target.getBoundingClientRect?target.getBoundingClientRect():{left:0,top:0}},pageScrollPos:function(){if(window.pageXOffset>0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i<GL.MINI_TEMP_BUFFER_SIZE;i++){GL.miniTempBufferViews[i]=GL.miniTempBuffer.subarray(0,i+1)}},recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i<ret;i++){table[i]=null}return ret},MINI_TEMP_BUFFER_SIZE:256,miniTempBuffer:null,miniTempBufferViews:[0],getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i<result.length;++i){switch(type){case"Integer":HEAP32[p+i*4>>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[location]);if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i<e.touches.length;++i){var touch=e.touches[i];touches[touch.identifier]=touch}for(var i=0;i<e.changedTouches.length;++i){var touch=e.changedTouches[i];touches[touch.identifier]=touch;touch.changed=true}for(var i=0;i<e.targetTouches.length;++i){var touch=e.targetTouches[i];touches[touch.identifier].onTarget=true}var touchEvent=JSEvents.touchEvent;var ptr=touchEvent;HEAP32[ptr+4>>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;dynCall_vidd(GLFW.active.cursorPosFunc,GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;dynCall_viiii(GLFW.active.mouseButtonFunc,GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),"i8",ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),"i8",ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),"float",ALLOC_NORMAL)};if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.keyFunc=cbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.charFunc=cbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.mouseButtonFunc=cbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorPosFunc=cbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.scrollFunc=cbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.dropFunc=cbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowSizeFunc=cbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowCloseFunc=cbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowRefreshFunc=cbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++);if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++);if(i==GLFW.windows.length){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetCursorPos(winid,x,y){GLFW.getCursorPos(winid,x,y)}function _glfwGetKey(winid,key){return GLFW.getKey(winid,key)}function _glfwGetMouseButton(winid,button){return GLFW.getMouseButton(winid,button)}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorEnterFunc=cbfun}function _glfwSetCursorPosCallback(winid,cbfun){GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){GLFW.errorFunc=cbfun}function _glfwSetKeyCallback(winid,cbfun){GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowIconifyFunc=cbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _llvm_stackrestore(p){var self=_llvm_stacksave;var ret=self.LLVM_SAVEDSTACKS[p];self.LLVM_SAVEDSTACKS.splice(p,1);stackRestore(ret)}function _llvm_stacksave(){var self=_llvm_stacksave;if(!self.LLVM_SAVEDSTACKS){self.LLVM_SAVEDSTACKS=[]}self.LLVM_SAVEDSTACKS.push(stackSave());return self.LLVM_SAVEDSTACKS.length-1}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function _usleep(useconds){var msec=useconds/1e3;if((ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self["performance"]&&self["performance"]["now"]){var start=self["performance"]["now"]();while(self["performance"]["now"]()-start<msec){}}else{var start=Date.now();while(Date.now()-start<msec){}}return 0}function _nanosleep(rqtp,rmtp){var seconds=HEAP32[rqtp>>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));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 asmGlobalArg={};var asmLibraryArg={"d":abort,"b":___assert_fail,"qc":___lock,"F":___setErrNo,"fb":___syscall140,"Wa":___syscall145,"E":___syscall146,"q":___syscall221,"ra":___syscall5,"D":___syscall54,"Y":___syscall6,"C":___unlock,"B":_eglGetProcAddress,"X":_emscripten_exit_pointerlock,"vd":_emscripten_get_gamepad_status,"kd":_emscripten_get_heap_size,"$c":_emscripten_get_num_gamepads,"W":_emscripten_get_pointerlock_status,"Gc":_emscripten_glActiveTexture,"wc":_emscripten_glAttachShader,"pc":_emscripten_glBeginQueryEXT,"ic":_emscripten_glBindAttribLocation,"fc":_emscripten_glBindBuffer,"ac":_emscripten_glBindFramebuffer,"Vb":_emscripten_glBindRenderbuffer,"Qb":_emscripten_glBindTexture,"Gb":_emscripten_glBindVertexArrayOES,"vb":_emscripten_glBlendColor,"rb":_emscripten_glBlendEquation,"qb":_emscripten_glBlendEquationSeparate,"pb":_emscripten_glBlendFunc,"ob":_emscripten_glBlendFuncSeparate,"nb":_emscripten_glBufferData,"mb":_emscripten_glBufferSubData,"lb":_emscripten_glCheckFramebufferStatus,"kb":_emscripten_glClear,"jb":_emscripten_glClearColor,"ib":_emscripten_glClearDepthf,"hb":_emscripten_glClearStencil,"gb":_emscripten_glColorMask,"eb":_emscripten_glCompileShader,"db":_emscripten_glCompressedTexImage2D,"cb":_emscripten_glCompressedTexSubImage2D,"bb":_emscripten_glCopyTexImage2D,"ab":_emscripten_glCopyTexSubImage2D,"$a":_emscripten_glCreateProgram,"_a":_emscripten_glCreateShader,"Za":_emscripten_glCullFace,"Ya":_emscripten_glDeleteBuffers,"Xa":_emscripten_glDeleteFramebuffers,"Va":_emscripten_glDeleteProgram,"Ua":_emscripten_glDeleteQueriesEXT,"Ta":_emscripten_glDeleteRenderbuffers,"Sa":_emscripten_glDeleteShader,"Ra":_emscripten_glDeleteTextures,"Qa":_emscripten_glDeleteVertexArraysOES,"Pa":_emscripten_glDepthFunc,"Oa":_emscripten_glDepthMask,"Na":_emscripten_glDepthRangef,"Ma":_emscripten_glDetachShader,"La":_emscripten_glDisable,"Ka":_emscripten_glDisableVertexAttribArray,"Ja":_emscripten_glDrawArrays,"Ia":_emscripten_glDrawArraysInstancedANGLE,"Ha":_emscripten_glDrawBuffersWEBGL,"Ga":_emscripten_glDrawElements,"Fa":_emscripten_glDrawElementsInstancedANGLE,"Ea":_emscripten_glEnable,"Da":_emscripten_glEnableVertexAttribArray,"Ca":_emscripten_glEndQueryEXT,"Ba":_emscripten_glFinish,"Aa":_emscripten_glFlush,"za":_emscripten_glFramebufferRenderbuffer,"ya":_emscripten_glFramebufferTexture2D,"xa":_emscripten_glFrontFace,"wa":_emscripten_glGenBuffers,"va":_emscripten_glGenFramebuffers,"ua":_emscripten_glGenQueriesEXT,"ta":_emscripten_glGenRenderbuffers,"sa":_emscripten_glGenTextures,"qa":_emscripten_glGenVertexArraysOES,"pa":_emscripten_glGenerateMipmap,"oa":_emscripten_glGetActiveAttrib,"na":_emscripten_glGetActiveUniform,"ma":_emscripten_glGetAttachedShaders,"la":_emscripten_glGetAttribLocation,"ka":_emscripten_glGetBooleanv,"ja":_emscripten_glGetBufferParameteriv,"ia":_emscripten_glGetError,"ha":_emscripten_glGetFloatv,"ga":_emscripten_glGetFramebufferAttachmentParameteriv,"fa":_emscripten_glGetIntegerv,"ea":_emscripten_glGetProgramInfoLog,"da":_emscripten_glGetProgramiv,"ca":_emscripten_glGetQueryObjecti64vEXT,"ba":_emscripten_glGetQueryObjectivEXT,"aa":_emscripten_glGetQueryObjectui64vEXT,"$":_emscripten_glGetQueryObjectuivEXT,"_":_emscripten_glGetQueryivEXT,"Z":_emscripten_glGetRenderbufferParameteriv,"he":_emscripten_glGetShaderInfoLog,"ge":_emscripten_glGetShaderPrecisionFormat,"fe":_emscripten_glGetShaderSource,"ee":_emscripten_glGetShaderiv,"de":_emscripten_glGetString,"ce":_emscripten_glGetTexParameterfv,"be":_emscripten_glGetTexParameteriv,"ae":_emscripten_glGetUniformLocation,"$d":_emscripten_glGetUniformfv,"_d":_emscripten_glGetUniformiv,"Zd":_emscripten_glGetVertexAttribPointerv,"Yd":_emscripten_glGetVertexAttribfv,"Xd":_emscripten_glGetVertexAttribiv,"Wd":_emscripten_glHint,"Vd":_emscripten_glIsBuffer,"Ud":_emscripten_glIsEnabled,"Td":_emscripten_glIsFramebuffer,"Sd":_emscripten_glIsProgram,"Rd":_emscripten_glIsQueryEXT,"Qd":_emscripten_glIsRenderbuffer,"Pd":_emscripten_glIsShader,"Od":_emscripten_glIsTexture,"Nd":_emscripten_glIsVertexArrayOES,"Md":_emscripten_glLineWidth,"Ld":_emscripten_glLinkProgram,"Kd":_emscripten_glPixelStorei,"Jd":_emscripten_glPolygonOffset,"Id":_emscripten_glQueryCounterEXT,"Hd":_emscripten_glReadPixels,"Gd":_emscripten_glReleaseShaderCompiler,"Fd":_emscripten_glRenderbufferStorage,"Ed":_emscripten_glSampleCoverage,"Dd":_emscripten_glScissor,"Cd":_emscripten_glShaderBinary,"Bd":_emscripten_glShaderSource,"Ad":_emscripten_glStencilFunc,"zd":_emscripten_glStencilFuncSeparate,"yd":_emscripten_glStencilMask,"xd":_emscripten_glStencilMaskSeparate,"wd":_emscripten_glStencilOp,"ud":_emscripten_glStencilOpSeparate,"td":_emscripten_glTexImage2D,"sd":_emscripten_glTexParameterf,"rd":_emscripten_glTexParameterfv,"qd":_emscripten_glTexParameteri,"pd":_emscripten_glTexParameteriv,"od":_emscripten_glTexSubImage2D,"nd":_emscripten_glUniform1f,"md":_emscripten_glUniform1fv,"ld":_emscripten_glUniform1i,"jd":_emscripten_glUniform1iv,"id":_emscripten_glUniform2f,"hd":_emscripten_glUniform2fv,"gd":_emscripten_glUniform2i,"fd":_emscripten_glUniform2iv,"ed":_emscripten_glUniform3f,"dd":_emscripten_glUniform3fv,"cd":_emscripten_glUniform3i,"bd":_emscripten_glUniform3iv,"ad":_emscripten_glUniform4f,"_c":_emscripten_glUniform4fv,"Zc":_emscripten_glUniform4i,"Yc":_emscripten_glUniform4iv,"Xc":_emscripten_glUniformMatrix2fv,"Wc":_emscripten_glUniformMatrix3fv,"Vc":_emscripten_glUniformMatrix4fv,"Uc":_emscripten_glUseProgram,"Tc":_emscripten_glValidateProgram,"Sc":_emscripten_glVertexAttrib1f,"Rc":_emscripten_glVertexAttrib1fv,"Qc":_emscripten_glVertexAttrib2f,"Pc":_emscripten_glVertexAttrib2fv,"Oc":_emscripten_glVertexAttrib3f,"Nc":_emscripten_glVertexAttrib3fv,"Mc":_emscripten_glVertexAttrib4f,"Lc":_emscripten_glVertexAttrib4fv,"Kc":_emscripten_glVertexAttribDivisorANGLE,"Jc":_emscripten_glVertexAttribPointer,"Ic":_emscripten_glViewport,"Hc":_emscripten_memcpy_big,"Fc":_emscripten_request_pointerlock,"Ec":_emscripten_resize_heap,"V":_emscripten_run_script,"Dc":_emscripten_sample_gamepad_data,"Cc":_emscripten_set_click_callback_on_thread,"Bc":_emscripten_set_fullscreenchange_callback_on_thread,"Ac":_emscripten_set_gamepadconnected_callback_on_thread,"zc":_emscripten_set_gamepaddisconnected_callback_on_thread,"yc":_emscripten_set_keypress_callback_on_thread,"xc":_emscripten_set_main_loop,"vc":_emscripten_set_touchcancel_callback_on_thread,"uc":_emscripten_set_touchend_callback_on_thread,"tc":_emscripten_set_touchmove_callback_on_thread,"sc":_emscripten_set_touchstart_callback_on_thread,"rc":_exit,"A":_glActiveTexture,"U":_glAttachShader,"n":_glBindAttribLocation,"c":_glBindBuffer,"j":_glBindTexture,"oc":_glBlendFunc,"h":_glBufferData,"z":_glBufferSubData,"T":_glClear,"S":_glClearColor,"nc":_glClearDepthf,"mc":_glCompileShader,"lc":_glCompressedTexImage2D,"kc":_glCreateProgram,"jc":_glCreateShader,"hc":_glCullFace,"p":_glDeleteBuffers,"y":_glDeleteProgram,"R":_glDeleteShader,"Q":_glDeleteTextures,"gc":_glDepthFunc,"P":_glDetachShader,"O":_glDisable,"i":_glDisableVertexAttribArray,"N":_glDrawArrays,"M":_glDrawElements,"x":_glEnable,"f":_glEnableVertexAttribArray,"ec":_glFrontFace,"g":_glGenBuffers,"dc":_glGenTextures,"w":_glGetAttribLocation,"cc":_glGetFloatv,"bc":_glGetProgramInfoLog,"L":_glGetProgramiv,"$b":_glGetShaderInfoLog,"K":_glGetShaderiv,"o":_glGetString,"v":_glGetUniformLocation,"_b":_glLinkProgram,"Zb":_glPixelStorei,"Yb":_glReadPixels,"Xb":_glShaderSource,"Wb":_glTexImage2D,"m":_glTexParameteri,"J":_glUniform1i,"u":_glUniform4f,"t":_glUniformMatrix4fv,"l":_glUseProgram,"Ub":_glVertexAttrib2f,"Tb":_glVertexAttrib3f,"s":_glVertexAttrib4f,"e":_glVertexAttribPointer,"Sb":_glViewport,"Rb":_glfwCreateWindow,"Pb":_glfwDefaultWindowHints,"Ob":_glfwDestroyWindow,"Nb":_glfwGetCursorPos,"Mb":_glfwGetKey,"Lb":_glfwGetMouseButton,"r":_glfwGetTime,"Kb":_glfwInit,"Jb":_glfwMakeContextCurrent,"Ib":_glfwSetCharCallback,"Hb":_glfwSetCursorEnterCallback,"Fb":_glfwSetCursorPosCallback,"Eb":_glfwSetDropCallback,"Db":_glfwSetErrorCallback,"Cb":_glfwSetKeyCallback,"Bb":_glfwSetMouseButtonCallback,"Ab":_glfwSetScrollCallback,"zb":_glfwSetWindowIconifyCallback,"yb":_glfwSetWindowShouldClose,"xb":_glfwSetWindowSizeCallback,"wb":_glfwSwapBuffers,"I":_glfwTerminate,"k":_glfwWindowHint,"H":_llvm_stackrestore,"G":_llvm_stacksave,"ub":_nanosleep,"tb":_time,"sb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["we"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i<argc;i++){HEAP32[(argv>>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_mesh_generation.wasm b/examples/web/models/models_mesh_generation.wasm Binary files differnew file mode 100644 index 0000000..9ff4f10 --- /dev/null +++ b/examples/web/models/models_mesh_generation.wasm diff --git a/examples/web/models/models_mesh_picking.c b/examples/web/models/models_mesh_picking.c index 9a0400b..4e51086 100644 --- a/examples/web/models/models_mesh_picking.c +++ b/examples/web/models/models_mesh_picking.c @@ -25,23 +25,23 @@ const int screenWidth = 800; const int screenHeight = 450; -Camera camera; - +Camera camera = { 0 }; + Vector3 cubePosition = { 0.0f, 1.0f, 0.0f }; Vector3 cubeSize = { 2.0f, 2.0f, 2.0f }; -Ray ray; // Picking line ray +Ray ray = { 0 }; // Picking line ray -Model tower; -Texture2D texture; +Model tower = { 0 }; +Texture2D texture = { 0 }; Vector3 towerPos = { 0.0f, 0.0f, 0.0f }; -BoundingBox towerBBox; +BoundingBox towerBBox = { 0 }; bool hitMeshBBox = false; bool hitTriangle = false; // Test triangle -Vector3 ta = (Vector3){ -25.0, 0.5, 0.0 }; +Vector3 ta = (Vector3){ -25.0, 0.5, 0.0 }; Vector3 tb = (Vector3){ -4.0, 2.5, 1.0 }; Vector3 tc = (Vector3){ -8.0, 6.5, 0.0 }; @@ -53,7 +53,7 @@ Vector3 bary = { 0.0f, 0.0f, 0.0f }; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -66,24 +66,25 @@ int main(void) camera.target = (Vector3){ 0.0f, 2.3f, 0.0f }; // Camera looking at point camera.up = (Vector3){ 0.0f, 1.6f, 0.0f }; // Camera up vector (rotation towards target) camera.fovy = 45.0f; // Camera field-of-view Y + camera.type = CAMERA_PERSPECTIVE; // Camera mode type + + tower = LoadModel("resources/models/turret.obj"); // Load OBJ model + texture = LoadTexture("resources/models/turret_diffuse.png"); // Load model texture + tower.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set model diffuse texture - tower = LoadModel("resources/tower.obj"); // Load OBJ model - texture = LoadTexture("resources/tower.png"); // Load model texture - tower.material.maps[MAP_DIFFUSE].texture = texture; // Set model diffuse texture - - towerBBox = CalculateBoundingBox(tower.mesh); + towerBBox = MeshBoundingBox(tower.meshes[0]); // Get mesh bounding box SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -95,7 +96,7 @@ int main(void) //-------------------------------------------------------------------------------------- UnloadModel(tower); // Unload model from GPU UnloadTexture(texture); // Unload texture from GPU - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -110,9 +111,9 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); // Update camera - + // Display information about closest hit - RayHitInfo nearestHit; + RayHitInfo nearestHit = { 0 }; char *hitObjectName = "None"; nearestHit.distance = FLT_MAX; nearestHit.hit = false; @@ -120,10 +121,10 @@ void UpdateDrawFrame(void) // Get ray and test against ground, triangle, and mesh ray = GetMouseRay(GetMousePosition(), camera); - + // Check ray collision aginst ground plane RayHitInfo groundHitInfo = GetCollisionRayGround(ray, 0.0f); - + if ((groundHitInfo.hit) && (groundHitInfo.distance < nearestHit.distance)) { nearestHit = groundHitInfo; @@ -133,8 +134,8 @@ void UpdateDrawFrame(void) // Check ray collision against test triangle RayHitInfo triHitInfo = GetCollisionRayTriangle(ray, ta, tb, tc); - - if ((triHitInfo.hit) && (triHitInfo.distance < nearestHit.distance)) + + if ((triHitInfo.hit) && (triHitInfo.distance < nearestHit.distance)) { nearestHit = triHitInfo; cursorColor = PURPLE; @@ -142,40 +143,44 @@ void UpdateDrawFrame(void) bary = Vector3Barycenter(nearestHit.position, ta, tb, tc); hitTriangle = true; - } + } else hitTriangle = false; - RayHitInfo meshHitInfo; + RayHitInfo meshHitInfo = { 0 }; // Check ray collision against bounding box first, before trying the full ray-mesh test - if (CheckCollisionRayBox(ray, towerBBox)) + if (CheckCollisionRayBox(ray, towerBBox)) { hitMeshBBox = true; - - // Check ray collision against mesh - meshHitInfo = GetCollisionRayMesh(ray, &tower.mesh); - - if ((meshHitInfo.hit) && (meshHitInfo.distance < nearestHit.distance)) + + // Check ray collision against model + // NOTE: It considers model.transform matrix! + meshHitInfo = GetCollisionRayModel(ray, &tower); + + if ((meshHitInfo.hit) && (meshHitInfo.distance < nearestHit.distance)) { nearestHit = meshHitInfo; cursorColor = ORANGE; hitObjectName = "Mesh"; } - - } hitMeshBBox = false; + } + + hitMeshBBox = false; //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); ClearBackground(RAYWHITE); - Begin3dMode(camera); + BeginMode3D(camera); // Draw the tower - DrawModel(tower, towerPos, 1.0, WHITE); - + // WARNING: If scale is different than 1.0f, + // not considered by GetCollisionRayModel() + DrawModel(tower, towerPos, 1.0f, WHITE); + // Draw the test triangle DrawLine3D(ta, tb, PURPLE); DrawLine3D(tb, tc, PURPLE); @@ -185,42 +190,42 @@ void UpdateDrawFrame(void) if (hitMeshBBox) DrawBoundingBox(towerBBox, LIME); // If we hit something, draw the cursor at the hit point - if (nearestHit.hit) + if (nearestHit.hit) { - DrawCube(nearestHit.position, 0.5, 0.5, 0.5, cursorColor); - DrawCubeWires(nearestHit.position, 0.5, 0.5, 0.5, YELLOW); + DrawCube(nearestHit.position, 0.3, 0.3, 0.3, cursorColor); + DrawCubeWires(nearestHit.position, 0.3, 0.3, 0.3, RED); Vector3 normalEnd; normalEnd.x = nearestHit.position.x + nearestHit.normal.x; normalEnd.y = nearestHit.position.y + nearestHit.normal.y; normalEnd.z = nearestHit.position.z + nearestHit.normal.z; - - DrawLine3D(nearestHit.position, normalEnd, YELLOW); + + DrawLine3D(nearestHit.position, normalEnd, RED); } DrawRay(ray, MAROON); - - DrawGrid(100, 1.0f); - End3dMode(); - + DrawGrid(10, 10.0f); + + EndMode3D(); + // Draw some debug GUI text DrawText(FormatText("Hit Object: %s", hitObjectName), 10, 50, 10, BLACK); - if (nearestHit.hit) + if (nearestHit.hit) { int ypos = 70; DrawText(FormatText("Distance: %3.2f", nearestHit.distance), 10, ypos, 10, BLACK); - - DrawText(FormatText("Hit Pos: %3.2f %3.2f %3.2f", - nearestHit.position.x, - nearestHit.position.y, + + DrawText(FormatText("Hit Pos: %3.2f %3.2f %3.2f", + nearestHit.position.x, + nearestHit.position.y, nearestHit.position.z), 10, ypos + 15, 10, BLACK); - - DrawText(FormatText("Hit Norm: %3.2f %3.2f %3.2f", - nearestHit.normal.x, - nearestHit.normal.y, + + DrawText(FormatText("Hit Norm: %3.2f %3.2f %3.2f", + nearestHit.normal.x, + nearestHit.normal.y, nearestHit.normal.z), 10, ypos + 30, 10, BLACK); if (hitTriangle) DrawText(FormatText("Barycenter: %3.2f %3.2f %3.2f", bary.x, bary.y, bary.z), 10, ypos + 45, 10, BLACK); @@ -228,6 +233,8 @@ void UpdateDrawFrame(void) DrawText("Use Mouse to Move Camera", 10, 430, 10, GRAY); + DrawText("(c) Turret 3D model by Alberto Cano", screenWidth - 200, screenHeight - 20, 10, GRAY); + DrawFPS(10, 10); EndDrawing(); diff --git a/examples/web/models/models_obj_loading.c b/examples/web/models/models_obj_loading.c index c6a8429..c6e224c 100644 --- a/examples/web/models/models_obj_loading.c +++ b/examples/web/models/models_obj_loading.c @@ -18,14 +18,14 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world -Camera camera = {{ 3.0f, 3.0f, 3.0f }, { 0.0f, 1.5f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; +Camera camera = { 0 }; -Model dwarf; // Declare OBJ model -Texture2D texture; // Declare model texture +Model model = { 0 }; // Declare OBJ model +Texture2D texture = { 0 }; // Declare model texture Vector3 position = { 0.0f, 0.0f, 0.0f }; // Define model position @@ -35,7 +35,7 @@ Vector3 position = { 0.0f, 0.0f, 0.0f }; // Define model position void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -43,16 +43,22 @@ int main(void) //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [models] example - obj model loading"); - dwarf = LoadModel("resources/model/dwarf.obj"); // Load OBJ model - texture = LoadTexture("resources/model/dwarf_diffuse.png"); // Load model texture - dwarf.material.maps[MAP_DIFFUSE].texture = texture; // Set map diffuse texture + camera.position = (Vector3){ 8.0f, 8.0f, 8.0f }; // Camera position + camera.target = (Vector3){ 0.0f, 2.5f, 0.0f }; // Camera looking at point + camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) + camera.fovy = 45.0f; // Camera field-of-view Y + camera.type = CAMERA_PERSPECTIVE; // Camera mode type + + model = LoadModel("resources/models/castle.obj"); // Load OBJ model + texture = LoadTexture("resources/models/castle_diffuse.png"); // Load model texture + model.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set map diffuse texture #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -63,7 +69,7 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- UnloadTexture(texture); // Unload texture - UnloadModel(dwarf); // Unload model + UnloadModel(model); // Unload model CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -87,17 +93,17 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - Begin3dMode(camera); + BeginMode3D(camera); - DrawModel(dwarf, position, 2.0f, WHITE); // Draw 3d model with texture + DrawModel(model, position, 0.2f, WHITE); // Draw 3d model with texture DrawGrid(10, 1.0f); // Draw a grid DrawGizmo(position); // Draw gizmo - End3dMode(); - - DrawText("(c) Dwarf 3D model by David Moreno", screenWidth - 200, screenHeight - 20, 10, GRAY); + EndMode3D(); + + DrawText("(c) Castle 3D model by Alberto Cano", screenWidth - 200, screenHeight - 20, 10, GRAY); DrawFPS(10, 10); diff --git a/examples/web/models/models_obj_loading.data b/examples/web/models/models_obj_loading.data new file mode 100644 index 0000000..fe2e2d6 --- /dev/null +++ b/examples/web/models/models_obj_loading.data @@ -0,0 +1,20267 @@ +# (c) 2018 Medieval Assets Pack by Alberto Cano
+# Licensed as Creative Commons Attribution-NonCommercial 4.0
+
+#
+# object castle
+#
+
+v -17.17 7.76 -10.68
+v -16.55 7.76 -12.98
+v -16.55 0.00 -12.98
+v -17.17 0.00 -10.68
+v -14.87 7.76 -14.66
+v -14.87 0.00 -14.66
+v -12.57 7.76 -15.28
+v -12.57 0.00 -15.28
+v -10.27 7.76 -14.66
+v -10.27 0.00 -14.66
+v -8.58 7.76 -12.98
+v -8.58 0.00 -12.98
+v -7.97 7.76 -10.68
+v -7.97 0.00 -10.68
+v -8.58 7.76 -8.38
+v -8.58 0.00 -8.38
+v -10.27 7.76 -6.69
+v -10.27 0.00 -6.69
+v -12.57 7.76 -6.08
+v -12.57 0.00 -6.08
+v -14.87 7.76 -6.69
+v -14.87 0.00 -6.69
+v -16.55 7.76 -8.38
+v -16.55 0.00 -8.38
+v -16.78 7.76 -13.11
+v -17.43 7.76 -10.68
+v -17.43 8.57 -10.68
+v -16.78 8.57 -13.11
+v -15.00 7.76 -14.89
+v -15.00 8.57 -14.89
+v -12.57 7.76 -15.54
+v -12.57 8.57 -15.54
+v -10.13 7.76 -14.89
+v -10.13 8.57 -14.89
+v -8.35 7.76 -13.11
+v -8.35 8.57 -13.11
+v -7.70 7.76 -10.68
+v -7.70 8.57 -10.68
+v -8.35 7.76 -8.24
+v -8.35 8.57 -8.24
+v -10.13 7.76 -6.46
+v -10.13 8.57 -6.46
+v -12.57 7.76 -5.81
+v -12.57 8.57 -5.81
+v -15.00 7.76 -6.46
+v -15.00 8.57 -6.46
+v -16.78 7.76 -8.24
+v -16.78 8.57 -8.24
+v -17.17 8.57 -10.68
+v -16.55 8.57 -12.98
+v -14.87 8.57 -14.66
+v -12.57 8.57 -15.28
+v -10.27 8.57 -14.66
+v -8.58 8.57 -12.98
+v -7.97 8.57 -10.68
+v -8.58 8.57 -8.38
+v -10.27 8.57 -6.69
+v -12.57 8.57 -6.08
+v -14.87 8.57 -6.69
+v -16.55 8.57 -8.38
+v -17.17 16.89 -10.68
+v -16.55 16.89 -12.98
+v -14.87 16.89 -14.66
+v -12.57 16.89 -15.28
+v -10.27 16.89 -14.66
+v -8.58 16.89 -12.98
+v -7.97 16.89 -10.68
+v -8.58 16.89 -8.38
+v -10.27 16.89 -6.69
+v -12.57 16.89 -6.08
+v -14.87 16.89 -6.69
+v -16.55 16.89 -8.38
+v -17.13 21.30 -13.31
+v -17.83 21.30 -10.68
+v -18.23 21.30 -10.68
+v -17.47 21.30 -13.51
+v -15.20 21.30 -15.24
+v -15.40 21.30 -15.58
+v -12.57 21.30 -15.94
+v -12.57 21.30 -16.34
+v -9.93 21.30 -15.24
+v -9.73 21.30 -15.58
+v -8.01 21.30 -13.31
+v -7.66 21.30 -13.51
+v -7.30 21.30 -10.68
+v -6.90 21.30 -10.68
+v -8.01 21.30 -8.04
+v -7.66 21.30 -7.84
+v -9.93 21.30 -6.12
+v -9.73 21.30 -5.77
+v -12.57 21.30 -5.41
+v -12.57 21.30 -5.01
+v -15.20 21.30 -6.12
+v -15.40 21.30 -5.77
+v -17.13 21.30 -8.04
+v -17.47 21.30 -7.84
+v -16.72 24.76 -10.68
+v -16.17 24.76 -12.76
+v -14.64 24.76 -14.28
+v -12.57 24.76 -14.83
+v -10.49 24.76 -14.28
+v -8.97 24.76 -12.76
+v -8.41 24.76 -10.68
+v -8.97 24.76 -8.60
+v -10.49 24.76 -7.08
+v -12.57 24.76 -6.52
+v -14.64 24.76 -7.08
+v -16.17 24.76 -8.60
+v -16.69 28.50 -10.68
+v -16.13 28.50 -12.74
+v -14.63 28.50 -14.24
+v -12.57 28.50 -14.80
+v -10.51 28.50 -14.24
+v -9.00 28.50 -12.74
+v -8.45 28.50 -10.68
+v -9.00 28.50 -8.62
+v -10.51 28.50 -7.11
+v -12.57 28.50 -6.56
+v -14.63 28.50 -7.11
+v -16.13 28.50 -8.62
+v -17.83 17.36 -10.68
+v -17.13 17.36 -13.31
+v -15.20 17.36 -15.24
+v -12.57 17.36 -15.94
+v -9.93 17.36 -15.24
+v -8.01 17.36 -13.31
+v -7.30 17.36 -10.68
+v -8.01 17.36 -8.04
+v -9.93 17.36 -6.12
+v -12.57 17.36 -5.41
+v -15.20 17.36 -6.12
+v -17.13 17.36 -8.04
+v -17.91 20.21 -10.37
+v -17.91 20.52 -10.80
+v -17.91 19.21 -10.80
+v -17.91 19.23 -10.37
+v -17.81 19.26 -10.03
+v -17.91 19.26 -10.04
+v -17.91 19.12 -10.04
+v -17.81 19.12 -10.03
+v -17.89 20.75 -10.80
+v -17.98 20.75 -10.81
+v -17.94 20.29 -10.15
+v -17.84 20.29 -10.15
+v -17.68 19.12 -11.55
+v -17.78 19.12 -11.56
+v -17.78 19.26 -11.56
+v -17.68 19.26 -11.55
+v -17.89 19.07 -10.80
+v -17.98 19.07 -10.81
+v -17.82 19.12 -11.45
+v -17.73 19.12 -11.45
+v -18.05 19.12 -10.16
+v -18.05 19.26 -10.16
+v -18.08 19.23 -10.39
+v -17.98 20.52 -10.81
+v -17.98 20.21 -10.38
+v -17.93 19.26 -11.46
+v -17.93 19.12 -11.46
+v -18.01 19.24 -11.24
+v -18.09 19.07 -10.82
+v -18.09 19.21 -10.82
+v -17.83 20.21 -11.23
+v -17.83 19.24 -11.23
+v -17.73 20.29 -11.45
+v -17.82 20.29 -11.45
+v -17.84 19.12 -10.15
+v -17.94 19.12 -10.15
+v -17.90 20.21 -11.23
+v -17.98 19.23 -10.38
+v -17.90 19.24 -11.23
+v -17.98 19.21 -10.81
+v -17.82 19.26 -11.45
+v -17.73 19.26 -11.45
+v -17.94 19.26 -10.15
+v -17.84 19.26 -10.15
+v -18.02 19.26 -10.05
+v -18.02 19.12 -10.05
+v -17.88 19.12 -11.57
+v -17.88 19.26 -11.57
+v -12.87 20.21 -16.02
+v -12.44 20.52 -16.02
+v -12.44 19.21 -16.02
+v -12.87 19.23 -16.02
+v -13.21 19.26 -15.92
+v -13.20 19.26 -16.02
+v -13.20 19.12 -16.02
+v -13.21 19.12 -15.92
+v -12.44 20.75 -16.00
+v -12.43 20.75 -16.10
+v -13.09 20.29 -16.05
+v -13.10 20.29 -15.95
+v -11.69 19.12 -15.79
+v -11.68 19.12 -15.89
+v -11.68 19.26 -15.89
+v -11.69 19.26 -15.79
+v -12.44 19.07 -16.00
+v -12.43 19.07 -16.10
+v -11.79 19.12 -15.94
+v -11.80 19.12 -15.84
+v -13.08 19.12 -16.16
+v -13.08 19.26 -16.16
+v -12.85 19.23 -16.20
+v -12.43 20.52 -16.10
+v -12.86 20.21 -16.09
+v -11.78 19.26 -16.04
+v -11.78 19.12 -16.04
+v -12.00 19.24 -16.12
+v -12.42 19.07 -16.20
+v -12.42 19.21 -16.20
+v -12.01 20.21 -15.94
+v -12.01 19.24 -15.94
+v -11.80 20.29 -15.84
+v -11.79 20.29 -15.94
+v -13.10 19.12 -15.95
+v -13.09 19.12 -16.05
+v -12.01 20.21 -16.01
+v -12.86 19.23 -16.09
+v -12.01 19.24 -16.01
+v -12.43 19.21 -16.10
+v -11.79 19.26 -15.94
+v -11.80 19.26 -15.84
+v -13.09 19.26 -16.05
+v -13.10 19.26 -15.95
+v -13.19 19.26 -16.13
+v -13.19 19.12 -16.13
+v -11.67 19.12 -16.00
+v -11.67 19.26 -16.00
+v -9.24 23.34 -12.52
+v -9.78 23.34 -13.29
+v -9.10 24.92 -13.76
+v -8.56 24.92 -12.99
+v -8.63 28.41 -12.92
+v -9.53 28.41 -12.29
+v -9.18 28.41 -13.70
+v -10.08 28.41 -13.07
+v -12.87 27.21 -14.81
+v -12.44 27.52 -14.82
+v -12.44 26.21 -14.82
+v -12.87 26.24 -14.81
+v -13.21 26.26 -14.72
+v -13.20 26.26 -14.82
+v -13.20 26.12 -14.82
+v -13.21 26.12 -14.72
+v -12.44 27.75 -14.80
+v -12.43 27.75 -14.89
+v -13.09 27.30 -14.85
+v -13.10 27.30 -14.75
+v -11.69 26.12 -14.59
+v -11.68 26.12 -14.69
+v -11.68 26.26 -14.69
+v -11.69 26.26 -14.59
+v -12.44 26.07 -14.80
+v -12.43 26.07 -14.89
+v -11.79 26.12 -14.73
+v -11.80 26.12 -14.64
+v -13.08 26.12 -14.96
+v -13.08 26.26 -14.96
+v -12.85 26.24 -14.99
+v -12.43 27.52 -14.89
+v -12.86 27.21 -14.89
+v -11.78 26.26 -14.84
+v -11.78 26.12 -14.84
+v -12.00 26.25 -14.92
+v -12.42 26.07 -15.00
+v -12.42 26.21 -15.00
+v -12.01 27.21 -14.74
+v -12.01 26.25 -14.74
+v -11.80 27.30 -14.64
+v -11.79 27.30 -14.73
+v -13.10 26.12 -14.75
+v -13.09 26.12 -14.85
+v -12.01 27.21 -14.81
+v -12.86 26.24 -14.89
+v -12.01 26.25 -14.81
+v -12.43 26.21 -14.89
+v -11.79 26.26 -14.73
+v -11.80 26.26 -14.64
+v -13.09 26.26 -14.85
+v -13.10 26.26 -14.75
+v -13.19 26.26 -14.93
+v -13.19 26.12 -14.93
+v -11.67 26.12 -14.79
+v -11.67 26.26 -14.79
+v -14.41 23.34 -14.01
+v -15.18 23.34 -13.46
+v -15.65 24.92 -14.14
+v -14.88 24.92 -14.68
+v -14.81 28.41 -14.61
+v -14.18 28.41 -13.71
+v -15.59 28.41 -14.07
+v -14.96 28.41 -13.17
+v -8.43 27.21 -10.98
+v -8.42 27.52 -10.55
+v -8.42 26.21 -10.55
+v -8.43 26.24 -10.98
+v -8.52 26.26 -11.32
+v -8.42 26.26 -11.31
+v -8.42 26.12 -11.31
+v -8.52 26.12 -11.32
+v -8.45 27.75 -10.55
+v -8.35 27.75 -10.54
+v -8.39 27.30 -11.20
+v -8.49 27.30 -11.21
+v -8.65 26.12 -9.80
+v -8.56 26.12 -9.79
+v -8.56 26.26 -9.79
+v -8.65 26.26 -9.80
+v -8.45 26.07 -10.55
+v -8.35 26.07 -10.54
+v -8.51 26.12 -9.90
+v -8.61 26.12 -9.91
+v -8.29 26.12 -11.19
+v -8.29 26.26 -11.19
+v -8.25 26.24 -10.96
+v -8.35 27.52 -10.54
+v -8.35 27.21 -10.97
+v -8.40 26.26 -9.89
+v -8.40 26.12 -9.89
+v -8.32 26.25 -10.11
+v -8.24 26.07 -10.53
+v -8.24 26.21 -10.53
+v -8.50 27.21 -10.13
+v -8.50 26.25 -10.13
+v -8.61 27.30 -9.91
+v -8.51 27.30 -9.90
+v -8.49 26.12 -11.21
+v -8.39 26.12 -11.20
+v -8.43 27.21 -10.12
+v -8.35 26.24 -10.97
+v -8.43 26.25 -10.12
+v -8.35 26.21 -10.54
+v -8.51 26.26 -9.90
+v -8.61 26.26 -9.91
+v -8.39 26.26 -11.20
+v -8.49 26.26 -11.21
+v -8.32 26.26 -11.30
+v -8.32 26.12 -11.30
+v -8.45 26.12 -9.78
+v -8.45 26.26 -9.78
+v -13.04 12.70 -6.81
+v -12.09 12.70 -6.81
+v -12.09 14.28 -5.99
+v -13.04 14.28 -5.99
+v -13.04 17.34 -5.64
+v -13.04 17.34 -6.74
+v -12.09 17.34 -5.64
+v -12.09 17.34 -6.74
+v -8.98 12.70 -12.20
+v -9.46 12.70 -13.02
+v -8.74 14.28 -13.43
+v -8.27 14.28 -12.61
+v -7.97 17.34 -12.79
+v -8.92 17.34 -12.24
+v -8.44 17.34 -13.61
+v -9.39 17.34 -13.06
+v -12.09 12.70 -14.54
+v -13.04 12.70 -14.54
+v -13.04 14.28 -15.36
+v -12.09 14.28 -15.36
+v -12.09 17.34 -15.71
+v -12.09 17.34 -14.62
+v -13.04 17.34 -15.71
+v -13.04 17.34 -14.62
+v -10.73 23.34 -7.35
+v -9.95 23.34 -7.89
+v -9.48 24.92 -7.22
+v -10.25 24.92 -6.67
+v -10.32 28.41 -6.74
+v -10.95 28.41 -7.65
+v -9.55 28.41 -7.29
+v -10.18 28.41 -8.19
+v -9.46 12.70 -8.34
+v -8.98 12.70 -9.15
+v -8.27 14.28 -8.74
+v -8.74 14.28 -7.92
+v -8.44 17.34 -7.75
+v -9.39 17.34 -8.30
+v -7.97 17.34 -8.57
+v -8.92 17.34 -9.12
+v -7.23 20.21 -10.98
+v -7.22 20.52 -10.55
+v -7.22 19.21 -10.55
+v -7.23 19.23 -10.98
+v -7.32 19.26 -11.32
+v -7.22 19.26 -11.31
+v -7.22 19.12 -11.31
+v -7.32 19.12 -11.32
+v -7.24 20.75 -10.55
+v -7.15 20.75 -10.54
+v -7.19 20.29 -11.20
+v -7.29 20.29 -11.21
+v -7.45 19.12 -9.80
+v -7.35 19.12 -9.79
+v -7.35 19.26 -9.79
+v -7.45 19.26 -9.80
+v -7.24 19.07 -10.55
+v -7.15 19.07 -10.54
+v -7.31 19.12 -9.90
+v -7.41 19.12 -9.91
+v -7.09 19.12 -11.19
+v -7.09 19.26 -11.19
+v -7.05 19.23 -10.96
+v -7.15 20.52 -10.54
+v -7.15 20.21 -10.97
+v -7.20 19.26 -9.89
+v -7.20 19.12 -9.89
+v -7.12 19.24 -10.11
+v -7.04 19.07 -10.53
+v -7.04 19.21 -10.53
+v -7.30 20.21 -10.13
+v -7.30 19.24 -10.13
+v -7.41 20.29 -9.91
+v -7.31 20.29 -9.90
+v -7.29 19.12 -11.21
+v -7.19 19.12 -11.20
+v -7.23 20.21 -10.12
+v -7.15 19.23 -10.97
+v -7.23 19.24 -10.12
+v -7.15 19.21 -10.54
+v -7.31 19.26 -9.90
+v -7.41 19.26 -9.91
+v -7.19 19.26 -11.20
+v -7.29 19.26 -11.21
+v -7.11 19.26 -11.30
+v -7.11 19.12 -11.30
+v -7.25 19.12 -9.78
+v -7.25 19.26 -9.78
+v -12.26 27.21 -6.54
+v -12.69 27.52 -6.53
+v -12.69 26.21 -6.53
+v -12.26 26.24 -6.54
+v -11.92 26.26 -6.63
+v -11.93 26.26 -6.53
+v -11.93 26.12 -6.53
+v -11.92 26.12 -6.63
+v -12.69 27.75 -6.56
+v -12.70 27.75 -6.46
+v -12.04 27.30 -6.51
+v -12.03 27.30 -6.60
+v -13.44 26.12 -6.76
+v -13.45 26.12 -6.67
+v -13.45 26.26 -6.67
+v -13.44 26.26 -6.76
+v -12.69 26.07 -6.56
+v -12.70 26.07 -6.46
+v -13.34 26.12 -6.62
+v -13.34 26.12 -6.72
+v -12.05 26.12 -6.40
+v -12.05 26.26 -6.40
+v -12.28 26.24 -6.36
+v -12.70 27.52 -6.46
+v -12.27 27.21 -6.47
+v -13.35 26.26 -6.51
+v -13.35 26.12 -6.51
+v -13.13 26.25 -6.43
+v -12.71 26.07 -6.35
+v -12.71 26.21 -6.35
+v -13.12 27.21 -6.61
+v -13.12 26.25 -6.61
+v -13.34 27.30 -6.72
+v -13.34 27.30 -6.62
+v -12.03 26.12 -6.60
+v -12.04 26.12 -6.51
+v -13.12 27.21 -6.54
+v -12.27 26.24 -6.47
+v -13.12 26.25 -6.54
+v -12.70 26.21 -6.46
+v -13.34 26.26 -6.62
+v -13.34 26.26 -6.72
+v -12.04 26.26 -6.51
+v -12.03 26.26 -6.60
+v -11.94 26.26 -6.43
+v -11.94 26.12 -6.43
+v -13.46 26.12 -6.56
+v -13.46 26.26 -6.56
+v -16.15 12.70 -9.15
+v -15.67 12.70 -8.34
+v -16.39 14.28 -7.92
+v -16.86 14.28 -8.74
+v -17.17 17.34 -8.57
+v -16.21 17.34 -9.12
+v -16.69 17.34 -7.75
+v -15.74 17.34 -8.30
+v -12.26 20.21 -5.34
+v -12.69 20.52 -5.33
+v -12.69 19.21 -5.33
+v -12.26 19.23 -5.34
+v -11.92 19.26 -5.43
+v -11.93 19.26 -5.33
+v -11.93 19.12 -5.33
+v -11.92 19.12 -5.43
+v -12.69 20.75 -5.36
+v -12.70 20.75 -5.26
+v -12.04 20.29 -5.30
+v -12.03 20.29 -5.40
+v -13.44 19.12 -5.56
+v -13.45 19.12 -5.47
+v -13.45 19.26 -5.47
+v -13.44 19.26 -5.56
+v -12.69 19.07 -5.36
+v -12.70 19.07 -5.26
+v -13.34 19.12 -5.42
+v -13.34 19.12 -5.52
+v -12.05 19.12 -5.20
+v -12.05 19.26 -5.20
+v -12.28 19.23 -5.16
+v -12.70 20.52 -5.26
+v -12.27 20.21 -5.26
+v -13.35 19.26 -5.31
+v -13.35 19.12 -5.31
+v -13.13 19.24 -5.23
+v -12.71 19.07 -5.15
+v -12.71 19.21 -5.15
+v -13.12 20.21 -5.41
+v -13.12 19.24 -5.41
+v -13.34 20.29 -5.52
+v -13.34 20.29 -5.42
+v -12.03 19.12 -5.40
+v -12.04 19.12 -5.30
+v -13.12 20.21 -5.34
+v -12.27 19.23 -5.26
+v -13.12 19.24 -5.34
+v -12.70 19.21 -5.26
+v -13.34 19.26 -5.42
+v -13.34 19.26 -5.52
+v -12.04 19.26 -5.30
+v -12.03 19.26 -5.40
+v -11.94 19.26 -5.23
+v -11.94 19.12 -5.23
+v -13.46 19.12 -5.36
+v -13.46 19.26 -5.36
+v -15.89 23.34 -8.84
+v -15.35 23.34 -8.06
+v -16.03 24.92 -7.59
+v -16.57 24.92 -8.36
+v -16.50 28.41 -8.43
+v -15.60 28.41 -9.06
+v -15.96 28.41 -7.66
+v -15.06 28.41 -8.29
+v -16.70 27.21 -10.37
+v -16.71 27.52 -10.80
+v -16.71 26.21 -10.80
+v -16.70 26.24 -10.37
+v -16.61 26.26 -10.03
+v -16.71 26.26 -10.04
+v -16.71 26.12 -10.04
+v -16.61 26.12 -10.03
+v -16.69 27.75 -10.80
+v -16.78 27.75 -10.81
+v -16.74 27.30 -10.15
+v -16.64 27.30 -10.15
+v -16.48 26.12 -11.55
+v -16.58 26.12 -11.56
+v -16.58 26.26 -11.56
+v -16.48 26.26 -11.55
+v -16.69 26.07 -10.80
+v -16.78 26.07 -10.81
+v -16.62 26.12 -11.45
+v -16.53 26.12 -11.45
+v -16.84 26.12 -10.16
+v -16.84 26.26 -10.16
+v -16.88 26.24 -10.39
+v -16.78 27.52 -10.81
+v -16.78 27.21 -10.38
+v -16.73 26.26 -11.46
+v -16.73 26.12 -11.46
+v -16.81 26.25 -11.24
+v -16.89 26.07 -10.82
+v -16.89 26.21 -10.82
+v -16.63 27.21 -11.23
+v -16.63 26.25 -11.23
+v -16.53 27.30 -11.45
+v -16.62 27.30 -11.45
+v -16.64 26.12 -10.15
+v -16.74 26.12 -10.15
+v -16.70 27.21 -11.23
+v -16.78 26.24 -10.38
+v -16.70 26.25 -11.23
+v -16.78 26.21 -10.81
+v -16.62 26.26 -11.45
+v -16.53 26.26 -11.45
+v -16.74 26.26 -10.15
+v -16.64 26.26 -10.15
+v -16.82 26.26 -10.05
+v -16.82 26.12 -10.05
+v -16.68 26.12 -11.57
+v -16.68 26.26 -11.57
+v -15.67 12.70 -13.02
+v -16.15 12.70 -12.20
+v -16.86 14.28 -12.61
+v -16.39 14.28 -13.43
+v -16.69 17.34 -13.61
+v -15.74 17.34 -13.06
+v -17.17 17.34 -12.79
+v -16.21 17.34 -12.24
+v -16.83 28.50 -13.14
+v -17.49 28.50 -10.68
+v -17.49 30.29 -10.68
+v -16.83 30.29 -13.14
+v -15.03 28.50 -14.94
+v -15.03 30.29 -14.94
+v -12.57 28.50 -15.60
+v -12.57 30.29 -15.60
+v -10.10 28.50 -14.94
+v -10.10 30.29 -14.94
+v -8.30 28.50 -13.14
+v -8.30 30.29 -13.14
+v -7.64 28.50 -10.68
+v -7.64 30.29 -10.68
+v -8.30 28.50 -8.21
+v -8.30 30.29 -8.21
+v -10.10 28.50 -6.41
+v -10.10 30.29 -6.41
+v -12.57 28.50 -5.75
+v -12.57 30.29 -5.75
+v -15.03 28.50 -6.41
+v -15.03 30.29 -6.41
+v -16.83 28.50 -8.21
+v -16.83 30.29 -8.21
+v -16.78 30.29 -10.68
+v -16.21 30.29 -12.78
+v -15.03 30.90 -14.94
+v -16.83 30.90 -13.14
+v -16.21 30.90 -12.78
+v -14.67 30.90 -14.32
+v -14.67 30.29 -14.32
+v -12.57 30.29 -14.89
+v -10.10 30.90 -14.94
+v -12.57 30.90 -15.60
+v -12.57 30.90 -14.89
+v -10.46 30.90 -14.32
+v -10.46 30.29 -14.32
+v -8.92 30.29 -12.78
+v -7.64 30.90 -10.68
+v -8.30 30.90 -13.14
+v -8.92 30.90 -12.78
+v -8.36 30.90 -10.68
+v -8.36 30.29 -10.68
+v -8.92 30.29 -8.57
+v -10.10 30.90 -6.41
+v -8.30 30.90 -8.21
+v -8.92 30.90 -8.57
+v -10.46 30.90 -7.03
+v -10.46 30.29 -7.03
+v -12.57 30.29 -6.47
+v -15.03 30.90 -6.41
+v -12.57 30.90 -5.75
+v -12.57 30.90 -6.47
+v -14.67 30.90 -7.03
+v -14.67 30.29 -7.03
+v -16.21 30.29 -8.57
+v -17.49 30.90 -10.68
+v -16.83 30.90 -8.21
+v -16.21 30.90 -8.57
+v -16.78 30.90 -10.68
+v -16.78 29.42 -10.68
+v -16.21 29.42 -12.78
+v -14.67 29.42 -14.32
+v -12.57 29.42 -14.89
+v -10.46 29.42 -14.32
+v -8.92 29.42 -12.78
+v -8.36 29.42 -10.68
+v -8.92 29.42 -8.57
+v -10.46 29.42 -7.03
+v -12.57 29.42 -6.47
+v -14.67 29.42 -7.03
+v -16.21 29.42 -8.57
+v -12.57 29.42 -10.68
+v 15.69 11.78 11.98
+v 15.69 11.78 -12.46
+v 10.74 17.79 -7.40
+v 10.74 17.79 7.40
+v -15.69 11.78 -12.46
+v -10.74 17.79 -7.40
+v -15.69 11.78 11.98
+v -10.74 17.79 7.40
+v 12.89 0.00 11.03
+v 12.89 0.00 -11.03
+v 12.89 11.78 -11.03
+v 12.89 11.78 11.03
+v -12.89 0.00 -11.03
+v -12.89 11.78 -11.03
+v -23.42 0.00 -6.76
+v -23.42 0.00 6.76
+v -23.42 6.95 6.76
+v -23.42 6.95 -6.76
+v -12.89 0.00 11.03
+v -12.89 11.78 11.03
+v 8.74 17.79 -3.62
+v 8.74 17.79 3.62
+v -8.74 17.79 -3.62
+v -8.74 17.79 3.62
+v -12.89 6.95 6.76
+v -12.89 0.00 6.76
+v -12.89 6.95 -6.76
+v -12.89 0.00 -6.76
+v -9.46 12.70 7.57
+v -8.74 14.28 7.16
+v -8.27 14.28 7.98
+v -8.98 12.70 8.39
+v -9.39 17.34 7.53
+v -8.44 17.34 6.98
+v -7.97 17.34 7.80
+v -8.92 17.34 8.35
+v -9.31 28.15 -0.00
+v -9.31 23.30 4.54
+v 0.00 22.65 4.30
+v -0.11 25.84 -0.00
+v -9.31 27.72 -0.00
+v -9.31 22.87 4.55
+v 0.00 22.23 4.31
+v 0.00 22.65 -4.30
+v -9.31 23.30 -4.54
+v -9.31 22.87 -4.55
+v 0.00 22.23 -4.31
+v 9.31 28.15 -0.00
+v 9.31 23.30 4.54
+v 9.31 27.72 -0.00
+v 9.31 22.87 4.55
+v 9.31 23.30 -4.54
+v 9.31 22.87 -4.55
+v 4.76 26.71 -0.63
+v 5.87 26.95 -0.63
+v 5.91 26.75 -0.63
+v 4.80 26.52 -0.63
+v 4.68 27.10 -0.11
+v 5.79 27.34 -0.11
+v 4.72 26.91 -0.11
+v 5.79 27.35 -0.00
+v 4.68 27.12 -0.00
+v 4.72 26.93 -0.00
+v 5.91 26.75 0.63
+v 5.87 26.95 0.63
+v 4.76 26.71 0.63
+v 4.80 26.52 0.63
+v 5.79 27.34 0.11
+v 4.68 27.10 0.11
+v 4.72 26.91 0.11
+v 3.88 26.49 -0.63
+v 5.00 26.69 -0.63
+v 5.03 26.49 -0.63
+v 3.91 26.30 -0.63
+v 3.81 26.89 -0.11
+v 4.93 27.08 -0.11
+v 3.84 26.69 -0.11
+v 4.92 27.09 -0.00
+v 3.81 26.90 -0.00
+v 3.84 26.71 -0.00
+v 5.03 26.49 0.63
+v 5.00 26.69 0.63
+v 3.88 26.49 0.63
+v 3.91 26.30 0.63
+v 4.93 27.08 0.11
+v 3.81 26.89 0.11
+v 3.84 26.69 0.11
+v 2.89 26.32 -0.63
+v 4.01 26.46 -0.63
+v 4.04 26.27 -0.63
+v 2.91 26.13 -0.63
+v 2.84 26.72 -0.11
+v 3.96 26.86 -0.11
+v 2.86 26.53 -0.11
+v 3.96 26.87 -0.00
+v 2.84 26.74 -0.00
+v 2.86 26.54 -0.00
+v 4.04 26.27 0.63
+v 4.01 26.46 0.63
+v 2.89 26.32 0.63
+v 2.91 26.13 0.63
+v 3.96 26.86 0.11
+v 2.84 26.72 0.11
+v 2.86 26.53 0.11
+v 1.88 26.15 -0.63
+v 3.00 26.29 -0.63
+v 3.02 26.09 -0.63
+v 1.90 25.96 -0.63
+v 1.83 26.55 -0.11
+v 2.95 26.69 -0.11
+v 1.85 26.36 -0.11
+v 2.95 26.70 -0.00
+v 1.83 26.56 -0.00
+v 1.85 26.37 -0.00
+v 3.02 26.09 0.63
+v 3.00 26.29 0.63
+v 1.88 26.15 0.63
+v 1.90 25.96 0.63
+v 2.95 26.69 0.11
+v 1.83 26.55 0.11
+v 1.85 26.36 0.11
+v 0.78 26.08 -0.63
+v 1.91 26.12 -0.63
+v 1.92 25.93 -0.63
+v 0.79 25.89 -0.63
+v 0.77 26.49 -0.11
+v 1.90 26.52 -0.11
+v 0.77 26.29 -0.11
+v 1.90 26.54 -0.00
+v 0.77 26.50 -0.00
+v 0.77 26.30 -0.00
+v 1.92 25.93 0.63
+v 1.91 26.12 0.63
+v 0.78 26.08 0.63
+v 0.79 25.89 0.63
+v 1.90 26.52 0.11
+v 0.77 26.49 0.11
+v 0.77 26.29 0.11
+v -0.35 26.05 -0.63
+v 0.78 26.11 -0.63
+v 0.79 25.91 -0.63
+v -0.34 25.85 -0.63
+v -0.37 26.45 -0.11
+v 0.76 26.51 -0.11
+v -0.36 26.25 -0.11
+v 0.76 26.52 -0.00
+v -0.38 26.46 -0.00
+v -0.37 26.27 -0.00
+v 0.79 25.91 0.63
+v 0.78 26.11 0.63
+v -0.35 26.05 0.63
+v -0.34 25.85 0.63
+v 0.76 26.51 0.11
+v -0.37 26.45 0.11
+v -0.36 26.25 0.11
+v 6.98 27.27 -0.63
+v 8.09 27.50 -0.63
+v 8.13 27.31 -0.63
+v 7.02 27.08 -0.63
+v 6.90 27.66 -0.11
+v 8.01 27.90 -0.11
+v 6.94 27.47 -0.11
+v 8.00 27.91 -0.00
+v 6.89 27.68 -0.00
+v 6.93 27.48 -0.00
+v 8.13 27.31 0.63
+v 8.09 27.50 0.63
+v 6.98 27.27 0.63
+v 7.02 27.08 0.63
+v 8.01 27.90 0.11
+v 6.90 27.66 0.11
+v 6.94 27.47 0.11
+v 5.87 26.96 -0.63
+v 6.98 27.20 -0.63
+v 7.02 27.01 -0.63
+v 5.91 26.77 -0.63
+v 5.79 27.36 -0.11
+v 6.90 27.59 -0.11
+v 5.83 27.17 -0.11
+v 6.89 27.60 -0.00
+v 5.79 27.37 -0.00
+v 5.83 27.18 -0.00
+v 7.02 27.01 0.63
+v 6.98 27.20 0.63
+v 5.87 26.96 0.63
+v 5.91 26.77 0.63
+v 6.90 27.59 0.11
+v 5.79 27.36 0.11
+v 5.83 27.17 0.11
+v -6.20 26.77 -0.63
+v -6.16 26.96 -0.63
+v -5.05 26.72 -0.63
+v -5.09 26.53 -0.63
+v -4.97 27.12 -0.11
+v -6.08 27.35 -0.11
+v -5.01 26.92 -0.11
+v -6.07 27.36 -0.00
+v -4.96 27.13 -0.00
+v -5.01 26.94 -0.00
+v -5.05 26.72 0.63
+v -6.16 26.96 0.63
+v -6.20 26.77 0.63
+v -5.09 26.53 0.63
+v -4.97 27.12 0.11
+v -6.08 27.35 0.11
+v -5.01 26.92 0.11
+v -5.32 26.52 -0.63
+v -5.28 26.71 -0.63
+v -4.17 26.51 -0.63
+v -4.20 26.32 -0.63
+v -4.10 26.91 -0.11
+v -5.21 27.11 -0.11
+v -4.13 26.72 -0.11
+v -5.21 27.12 -0.00
+v -4.10 26.92 -0.00
+v -4.13 26.73 -0.00
+v -4.17 26.51 0.63
+v -5.28 26.71 0.63
+v -5.32 26.52 0.63
+v -4.20 26.32 0.63
+v -4.10 26.91 0.11
+v -5.21 27.11 0.11
+v -4.13 26.72 0.11
+v -4.32 26.27 -0.63
+v -4.30 26.46 -0.63
+v -3.18 26.32 -0.63
+v -3.20 26.13 -0.63
+v -3.13 26.72 -0.11
+v -4.25 26.86 -0.11
+v -3.15 26.53 -0.11
+v -4.25 26.87 -0.00
+v -3.13 26.73 -0.00
+v -3.15 26.54 -0.00
+v -3.18 26.32 0.63
+v -4.30 26.46 0.63
+v -4.32 26.27 0.63
+v -3.20 26.13 0.63
+v -3.13 26.72 0.11
+v -4.25 26.86 0.11
+v -3.15 26.53 0.11
+v -3.31 26.05 -0.63
+v -3.29 26.24 -0.63
+v -2.16 26.11 -0.63
+v -2.19 25.91 -0.63
+v -2.12 26.50 -0.11
+v -3.24 26.64 -0.11
+v -2.14 26.31 -0.11
+v -3.24 26.65 -0.00
+v -2.11 26.52 -0.00
+v -2.14 26.32 -0.00
+v -2.16 26.11 0.63
+v -3.29 26.24 0.63
+v -3.31 26.05 0.63
+v -2.19 25.91 0.63
+v -2.12 26.50 0.11
+v -3.24 26.64 0.11
+v -2.14 26.31 0.11
+v -2.21 25.88 -0.63
+v -2.20 26.08 -0.63
+v -1.07 26.04 -0.63
+v -1.07 25.84 -0.63
+v -1.05 26.44 -0.11
+v -2.19 26.48 -0.11
+v -1.06 26.25 -0.11
+v -2.19 26.49 -0.00
+v -1.05 26.45 -0.00
+v -1.06 26.26 -0.00
+v -1.07 26.04 0.63
+v -2.20 26.08 0.63
+v -2.21 25.88 0.63
+v -1.07 25.84 0.63
+v -1.05 26.44 0.11
+v -2.19 26.48 0.11
+v -1.06 26.25 0.11
+v -1.08 25.87 -0.63
+v -1.07 26.06 -0.63
+v 0.07 26.00 -0.63
+v 0.06 25.80 -0.63
+v 0.09 26.40 -0.11
+v -1.04 26.46 -0.11
+v 0.08 26.21 -0.11
+v -1.04 26.47 -0.00
+v 0.09 26.41 -0.00
+v 0.08 26.22 -0.00
+v 0.07 26.00 0.63
+v -1.07 26.06 0.63
+v -1.08 25.87 0.63
+v 0.06 25.80 0.63
+v 0.09 26.40 0.11
+v -1.04 26.46 0.11
+v 0.08 26.21 0.11
+v -8.19 27.32 -0.63
+v -8.15 27.51 -0.63
+v -7.04 27.28 -0.63
+v -7.08 27.09 -0.63
+v -6.96 27.67 -0.11
+v -8.07 27.90 -0.11
+v -7.00 27.48 -0.11
+v -8.06 27.92 -0.00
+v -6.95 27.68 -0.00
+v -6.99 27.49 -0.00
+v -7.04 27.28 0.63
+v -8.15 27.51 0.63
+v -8.19 27.32 0.63
+v -7.08 27.09 0.63
+v -6.96 27.67 0.11
+v -8.07 27.90 0.11
+v -7.00 27.48 0.11
+v -7.06 27.02 -0.63
+v -7.02 27.21 -0.63
+v -5.92 26.97 -0.63
+v -5.96 26.78 -0.63
+v -5.83 27.37 -0.11
+v -6.94 27.60 -0.11
+v -5.87 27.18 -0.11
+v -6.94 27.61 -0.00
+v -5.83 27.38 -0.00
+v -5.87 27.19 -0.00
+v -5.92 26.97 0.63
+v -7.02 27.21 0.63
+v -7.06 27.02 0.63
+v -5.96 26.78 0.63
+v -5.83 27.37 0.11
+v -6.94 27.60 0.11
+v -5.87 27.18 0.11
+v -9.18 27.83 -0.63
+v -8.10 27.48 -0.63
+v -8.16 27.29 -0.63
+v -9.24 27.64 -0.63
+v -9.05 28.21 -0.11
+v -7.98 27.86 -0.11
+v -9.11 28.02 -0.11
+v -7.97 27.87 -0.00
+v -9.05 28.22 -0.00
+v -9.11 28.04 -0.00
+v -8.16 27.29 0.63
+v -8.10 27.48 0.63
+v -9.18 27.83 0.63
+v -9.24 27.64 0.63
+v -7.98 27.86 0.11
+v -9.05 28.21 0.11
+v -9.11 28.02 0.11
+v 8.19 27.28 -0.63
+v 8.13 27.46 -0.63
+v 9.21 27.81 -0.63
+v 9.27 27.63 -0.63
+v 9.08 28.20 -0.11
+v 8.01 27.84 -0.11
+v 9.15 28.01 -0.11
+v 8.00 27.86 -0.00
+v 9.08 28.21 -0.00
+v 9.14 28.02 -0.00
+v 9.21 27.81 0.63
+v 8.13 27.46 0.63
+v 8.19 27.28 0.63
+v 9.27 27.63 0.63
+v 9.08 28.20 0.11
+v 8.01 27.84 0.11
+v 9.15 28.01 0.11
+v 9.46 12.70 7.57
+v 8.98 12.70 8.39
+v 8.27 14.28 7.98
+v 8.74 14.28 7.16
+v 8.44 17.34 6.98
+v 9.39 17.34 7.53
+v 7.97 17.34 7.80
+v 8.92 17.34 8.35
+v -15.48 7.80 6.90
+v -15.48 7.80 6.03
+v -17.46 7.80 6.03
+v -17.46 7.80 6.90
+v -15.48 6.95 6.90
+v -15.48 6.95 6.03
+v -17.46 6.95 6.03
+v -17.46 6.95 6.90
+v -18.47 7.80 6.90
+v -18.47 7.80 6.03
+v -20.45 7.80 6.03
+v -20.45 7.80 6.90
+v -18.47 6.95 6.90
+v -18.47 6.95 6.03
+v -20.45 6.95 6.03
+v -20.45 6.95 6.90
+v -21.45 7.80 6.90
+v -21.45 7.80 6.03
+v -23.44 7.80 6.03
+v -23.44 7.80 6.90
+v -21.45 6.95 6.90
+v -21.45 6.95 6.03
+v -23.44 6.95 6.03
+v -23.44 6.95 6.90
+v -23.40 7.80 5.50
+v -22.53 7.80 5.50
+v -22.53 7.80 3.51
+v -23.40 7.80 3.51
+v -23.40 6.95 5.50
+v -22.53 6.95 5.50
+v -22.53 6.95 3.51
+v -23.40 6.95 3.51
+v -23.40 7.80 2.51
+v -22.53 7.80 2.51
+v -22.53 7.80 0.53
+v -23.40 7.80 0.53
+v -23.40 6.95 2.51
+v -22.53 6.95 2.51
+v -22.53 6.95 0.53
+v -23.40 6.95 0.53
+v -23.40 7.80 -0.48
+v -22.53 7.80 -0.48
+v -22.53 7.80 -2.46
+v -23.40 7.80 -2.46
+v -23.40 6.95 -0.48
+v -22.53 6.95 -0.48
+v -22.53 6.95 -2.46
+v -23.40 6.95 -2.46
+v -23.40 7.80 -3.47
+v -22.53 7.80 -3.47
+v -22.53 7.80 -5.45
+v -23.40 7.80 -5.45
+v -23.40 6.95 -3.47
+v -22.53 6.95 -3.47
+v -22.53 6.95 -5.45
+v -23.40 6.95 -5.45
+v -21.45 7.80 -6.02
+v -21.45 7.80 -6.88
+v -23.44 7.80 -6.88
+v -23.44 7.80 -6.02
+v -21.45 6.95 -6.02
+v -21.45 6.95 -6.88
+v -23.44 6.95 -6.88
+v -23.44 6.95 -6.02
+v -18.47 7.80 -6.02
+v -18.47 7.80 -6.88
+v -20.45 7.80 -6.88
+v -20.45 7.80 -6.02
+v -18.47 6.95 -6.02
+v -18.47 6.95 -6.88
+v -20.45 6.95 -6.88
+v -20.45 6.95 -6.02
+v -15.48 7.80 -6.02
+v -15.48 7.80 -6.88
+v -17.46 7.80 -6.88
+v -17.46 7.80 -6.02
+v -15.48 6.95 -6.02
+v -15.48 6.95 -6.88
+v -17.46 6.95 -6.88
+v -17.46 6.95 -6.02
+v -7.10 7.80 -12.06
+v -7.10 7.80 -12.93
+v -9.08 7.80 -12.93
+v -9.08 7.80 -12.06
+v -7.10 6.95 -12.06
+v -7.10 6.95 -12.93
+v -9.08 6.95 -12.93
+v -9.08 6.95 -12.06
+v -4.46 7.80 -12.06
+v -4.46 7.80 -12.93
+v -6.45 7.80 -12.93
+v -6.45 7.80 -12.06
+v -4.46 6.95 -12.06
+v -4.46 6.95 -12.93
+v -6.45 6.95 -12.93
+v -6.45 6.95 -12.06
+v -1.83 7.80 -12.06
+v -1.83 7.80 -12.93
+v -3.81 7.80 -12.93
+v -3.81 7.80 -12.06
+v -1.83 6.95 -12.06
+v -1.83 6.95 -12.93
+v -3.81 6.95 -12.93
+v -3.81 6.95 -12.06
+v 0.81 7.80 -12.06
+v 0.81 7.80 -12.93
+v -1.17 7.80 -12.93
+v -1.17 7.80 -12.06
+v 0.81 6.95 -12.06
+v 0.81 6.95 -12.93
+v -1.17 6.95 -12.93
+v -1.17 6.95 -12.06
+v 3.44 7.80 -12.06
+v 3.44 7.80 -12.93
+v 1.46 7.80 -12.93
+v 1.46 7.80 -12.06
+v 3.44 6.95 -12.06
+v 3.44 6.95 -12.93
+v 1.46 6.95 -12.93
+v 1.46 6.95 -12.06
+v 6.08 7.80 -12.06
+v 6.08 7.80 -12.93
+v 4.10 7.80 -12.93
+v 4.10 7.80 -12.06
+v 6.08 6.95 -12.06
+v 6.08 6.95 -12.93
+v 4.10 6.95 -12.93
+v 4.10 6.95 -12.06
+v 8.72 7.80 -12.06
+v 8.72 7.80 -12.93
+v 6.74 7.80 -12.93
+v 6.74 7.80 -12.06
+v 8.72 6.95 -12.06
+v 8.72 6.95 -12.93
+v 6.74 6.95 -12.93
+v 6.74 6.95 -12.06
+v -4.39 18.64 -6.78
+v -4.39 18.64 -7.64
+v -6.37 18.64 -7.64
+v -6.37 18.64 -6.78
+v -4.39 17.79 -6.78
+v -4.39 17.79 -7.64
+v -6.37 17.79 -7.64
+v -6.37 17.79 -6.78
+v -1.66 18.64 -6.78
+v -1.66 18.64 -7.64
+v -3.64 18.64 -7.64
+v -3.64 18.64 -6.78
+v -1.66 17.79 -6.78
+v -1.66 17.79 -7.64
+v -3.64 17.79 -7.64
+v -3.64 17.79 -6.78
+v 1.06 18.64 -6.78
+v 1.06 18.64 -7.64
+v -0.92 18.64 -7.64
+v -0.92 18.64 -6.78
+v 1.06 17.79 -6.78
+v 1.06 17.79 -7.64
+v -0.92 17.79 -7.64
+v -0.92 17.79 -6.78
+v 3.79 18.64 -6.78
+v 3.79 18.64 -7.64
+v 1.80 18.64 -7.64
+v 1.80 18.64 -6.78
+v 3.79 17.79 -6.78
+v 3.79 17.79 -7.64
+v 1.80 17.79 -7.64
+v 1.80 17.79 -6.78
+v 6.51 18.64 -6.78
+v 6.51 18.64 -7.64
+v 4.53 18.64 -7.64
+v 4.53 18.64 -6.78
+v 6.51 17.79 -6.78
+v 6.51 17.79 -7.64
+v 4.53 17.79 -7.64
+v 4.53 17.79 -6.78
+v 9.24 18.64 -6.78
+v 9.24 18.64 -7.64
+v 7.25 18.64 -7.64
+v 7.25 18.64 -6.78
+v 9.24 17.79 -6.78
+v 9.24 17.79 -7.64
+v 7.25 17.79 -7.64
+v 7.25 17.79 -6.78
+v -7.11 18.64 -6.78
+v -7.11 18.64 -7.64
+v -9.09 18.64 -7.64
+v -9.09 18.64 -6.78
+v -7.11 17.79 -6.78
+v -7.11 17.79 -7.64
+v -9.09 17.79 -7.64
+v -9.09 17.79 -6.78
+v -9.92 18.64 -6.55
+v -10.78 18.64 -6.55
+v -10.78 18.64 -4.56
+v -9.92 18.64 -4.56
+v -9.92 17.79 -6.55
+v -10.78 17.79 -6.55
+v -10.78 17.79 -4.56
+v -9.92 17.79 -4.56
+v -9.92 18.64 -3.82
+v -10.78 18.64 -3.82
+v -10.78 18.64 -1.84
+v -9.92 18.64 -1.84
+v -9.92 17.79 -3.82
+v -10.78 17.79 -3.82
+v -10.78 17.79 -1.84
+v -9.92 17.79 -1.84
+v -9.92 18.64 -1.10
+v -10.78 18.64 -1.10
+v -10.78 18.64 0.88
+v -9.92 18.64 0.88
+v -9.92 17.79 -1.10
+v -10.78 17.79 -1.10
+v -10.78 17.79 0.88
+v -9.92 17.79 0.88
+v -9.92 18.64 1.63
+v -10.78 18.64 1.63
+v -10.78 18.64 3.61
+v -9.92 18.64 3.61
+v -9.92 17.79 1.63
+v -10.78 17.79 1.63
+v -10.78 17.79 3.61
+v -9.92 17.79 3.61
+v -7.11 18.64 7.48
+v -7.11 18.64 6.62
+v -9.09 18.64 6.62
+v -9.09 18.64 7.48
+v -7.11 17.79 7.48
+v -7.11 17.79 6.62
+v -9.09 17.79 6.62
+v -9.09 17.79 7.48
+v -4.39 18.64 7.48
+v -4.39 18.64 6.62
+v -6.37 18.64 6.62
+v -6.37 18.64 7.48
+v -4.39 17.79 7.48
+v -4.39 17.79 6.62
+v -6.37 17.79 6.62
+v -6.37 17.79 7.48
+v -1.66 18.64 7.48
+v -1.66 18.64 6.62
+v -3.64 18.64 6.62
+v -3.64 18.64 7.48
+v -1.66 17.79 7.48
+v -1.66 17.79 6.62
+v -3.64 17.79 6.62
+v -3.64 17.79 7.48
+v 1.06 18.64 7.48
+v 1.06 18.64 6.62
+v -0.92 18.64 6.62
+v -0.92 18.64 7.48
+v 1.06 17.79 7.48
+v 1.06 17.79 6.62
+v -0.92 17.79 6.62
+v -0.92 17.79 7.48
+v 3.79 18.64 7.48
+v 3.79 18.64 6.62
+v 1.80 18.64 6.62
+v 1.80 18.64 7.48
+v 3.79 17.79 7.48
+v 3.79 17.79 6.62
+v 1.80 17.79 6.62
+v 1.80 17.79 7.48
+v 9.24 18.64 7.48
+v 9.24 18.64 6.62
+v 7.25 18.64 6.62
+v 7.25 18.64 7.48
+v 9.24 17.79 7.48
+v 9.24 17.79 6.62
+v 7.25 17.79 6.62
+v 7.25 17.79 7.48
+v 6.51 18.64 7.48
+v 6.51 18.64 6.62
+v 4.53 18.64 6.62
+v 4.53 18.64 7.48
+v 6.51 17.79 7.48
+v 6.51 17.79 6.62
+v 4.53 17.79 6.62
+v 4.53 17.79 7.48
+v 10.85 18.64 -6.55
+v 9.99 18.64 -6.55
+v 9.99 18.64 -4.56
+v 10.85 18.64 -4.56
+v 10.85 17.79 -6.55
+v 9.99 17.79 -6.55
+v 9.99 17.79 -4.56
+v 10.85 17.79 -4.56
+v 10.85 18.64 -3.82
+v 9.99 18.64 -3.82
+v 9.99 18.64 -1.84
+v 10.85 18.64 -1.84
+v 10.85 17.79 -3.82
+v 9.99 17.79 -3.82
+v 9.99 17.79 -1.84
+v 10.85 17.79 -1.84
+v 10.85 18.64 -1.10
+v 9.99 18.64 -1.10
+v 9.99 18.64 0.88
+v 10.85 18.64 0.88
+v 10.85 17.79 -1.10
+v 9.99 17.79 -1.10
+v 9.99 17.79 0.88
+v 10.85 17.79 0.88
+v 10.85 18.64 1.63
+v 9.99 18.64 1.63
+v 9.99 18.64 3.61
+v 10.85 18.64 3.61
+v 10.85 17.79 1.63
+v 9.99 17.79 1.63
+v 9.99 17.79 3.61
+v 10.85 17.79 3.61
+v 10.85 18.64 4.35
+v 9.99 18.64 4.35
+v 9.99 18.64 6.33
+v 10.85 18.64 6.33
+v 10.85 17.79 4.35
+v 9.99 17.79 4.35
+v 9.99 17.79 6.33
+v 10.85 17.79 6.33
+v 11.17 6.95 -11.03
+v 11.17 6.95 -12.83
+v -11.17 6.95 -12.83
+v -11.17 6.95 -11.03
+v 11.17 -0.02 -12.83
+v -11.17 -0.02 -12.83
+v -19.96 4.66 -6.77
+v -19.60 5.22 -6.77
+v -19.60 2.88 -6.77
+v -19.96 2.92 -6.77
+v -20.24 2.96 -6.83
+v -20.24 2.71 -6.83
+v -20.24 2.71 -6.75
+v -20.24 2.96 -6.75
+v -19.60 5.63 -6.83
+v -20.15 4.82 -6.83
+v -20.15 4.82 -6.75
+v -19.60 5.63 -6.75
+v -18.96 2.71 -6.83
+v -18.96 2.96 -6.83
+v -18.96 2.96 -6.75
+v -18.96 2.71 -6.75
+v -19.60 2.63 -6.83
+v -19.05 2.71 -6.83
+v -19.05 2.71 -6.75
+v -19.60 2.63 -6.75
+v -20.15 2.71 -6.92
+v -20.15 2.96 -6.92
+v -19.96 2.92 -6.92
+v -19.60 5.22 -6.83
+v -19.96 4.66 -6.83
+v -19.05 2.96 -6.92
+v -19.05 2.71 -6.92
+v -19.24 2.94 -6.92
+v -19.60 2.63 -6.92
+v -19.60 2.88 -6.92
+v -19.24 4.66 -6.77
+v -19.24 2.94 -6.77
+v -19.05 4.82 -6.83
+v -19.05 4.82 -6.75
+v -20.15 2.71 -6.83
+v -20.15 2.71 -6.75
+v -19.24 4.66 -6.83
+v -19.96 2.92 -6.83
+v -19.24 2.94 -6.83
+v -19.60 2.88 -6.83
+v -19.05 2.96 -6.83
+v -19.05 2.96 -6.75
+v -20.15 2.96 -6.83
+v -20.15 2.96 -6.75
+v -20.24 2.96 -6.92
+v -20.24 2.71 -6.92
+v -18.96 2.71 -6.92
+v -18.96 2.96 -6.92
+v -6.81 4.66 -12.83
+v -6.45 5.22 -12.83
+v -6.45 2.88 -12.83
+v -6.81 2.92 -12.83
+v -7.09 2.96 -12.89
+v -7.09 2.71 -12.89
+v -7.09 2.71 -12.81
+v -7.09 2.96 -12.81
+v -6.45 5.63 -12.89
+v -6.99 4.82 -12.89
+v -6.99 4.82 -12.81
+v -6.45 5.63 -12.81
+v -5.81 2.71 -12.89
+v -5.81 2.96 -12.89
+v -5.81 2.96 -12.81
+v -5.81 2.71 -12.81
+v -6.45 2.63 -12.89
+v -5.90 2.71 -12.89
+v -5.90 2.71 -12.81
+v -6.45 2.63 -12.81
+v -6.99 2.71 -12.98
+v -6.99 2.96 -12.98
+v -6.81 2.92 -12.98
+v -6.45 5.22 -12.89
+v -6.81 4.66 -12.89
+v -5.90 2.96 -12.98
+v -5.90 2.71 -12.98
+v -6.09 2.94 -12.98
+v -6.45 2.63 -12.98
+v -6.45 2.88 -12.98
+v -6.09 4.66 -12.83
+v -6.09 2.94 -12.83
+v -5.90 4.82 -12.89
+v -5.90 4.82 -12.81
+v -6.99 2.71 -12.89
+v -6.99 2.71 -12.81
+v -6.09 4.66 -12.89
+v -6.81 2.92 -12.89
+v -6.09 2.94 -12.89
+v -6.45 2.88 -12.89
+v -5.90 2.96 -12.89
+v -5.90 2.96 -12.81
+v -6.99 2.96 -12.89
+v -6.99 2.96 -12.81
+v -7.09 2.96 -12.98
+v -7.09 2.71 -12.98
+v -5.81 2.71 -12.98
+v -5.81 2.96 -12.98
+v -4.17 10.56 -11.04
+v -3.81 11.12 -11.04
+v -3.81 8.77 -11.04
+v -4.17 8.82 -11.04
+v -4.45 8.86 -11.10
+v -4.45 8.61 -11.10
+v -4.45 8.61 -11.02
+v -4.45 8.86 -11.02
+v -3.81 11.53 -11.10
+v -4.36 10.72 -11.10
+v -4.36 10.72 -11.02
+v -3.81 11.53 -11.02
+v -3.17 8.61 -11.10
+v -3.17 8.86 -11.10
+v -3.17 8.86 -11.02
+v -3.17 8.61 -11.02
+v -3.81 8.52 -11.10
+v -3.27 8.61 -11.10
+v -3.27 8.61 -11.02
+v -3.81 8.52 -11.02
+v -4.36 8.61 -11.19
+v -4.36 8.86 -11.19
+v -4.17 8.82 -11.19
+v -3.81 11.12 -11.10
+v -4.17 10.56 -11.10
+v -3.27 8.86 -11.19
+v -3.27 8.61 -11.19
+v -3.45 8.83 -11.19
+v -3.81 8.52 -11.19
+v -3.81 8.77 -11.19
+v -3.45 10.56 -11.04
+v -3.45 8.83 -11.04
+v -3.27 10.72 -11.10
+v -3.27 10.72 -11.02
+v -4.36 8.61 -11.10
+v -4.36 8.61 -11.02
+v -3.45 10.56 -11.10
+v -4.17 8.82 -11.10
+v -3.45 8.83 -11.10
+v -3.81 8.77 -11.10
+v -3.27 8.86 -11.10
+v -3.27 8.86 -11.02
+v -4.36 8.86 -11.10
+v -4.36 8.86 -11.02
+v -4.45 8.86 -11.19
+v -4.45 8.61 -11.19
+v -3.17 8.61 -11.19
+v -3.17 8.86 -11.19
+v 3.09 10.56 -11.04
+v 3.44 11.12 -11.04
+v 3.44 8.77 -11.04
+v 3.09 8.82 -11.04
+v 2.81 8.86 -11.10
+v 2.81 8.61 -11.10
+v 2.81 8.61 -11.02
+v 2.81 8.86 -11.02
+v 3.44 11.53 -11.10
+v 2.90 10.72 -11.10
+v 2.90 10.72 -11.02
+v 3.44 11.53 -11.02
+v 4.08 8.61 -11.10
+v 4.08 8.86 -11.10
+v 4.08 8.86 -11.02
+v 4.08 8.61 -11.02
+v 3.44 8.52 -11.10
+v 3.99 8.61 -11.10
+v 3.99 8.61 -11.02
+v 3.44 8.52 -11.02
+v 2.90 8.61 -11.19
+v 2.90 8.86 -11.19
+v 3.09 8.82 -11.19
+v 3.44 11.12 -11.10
+v 3.09 10.56 -11.10
+v 3.99 8.86 -11.19
+v 3.99 8.61 -11.19
+v 3.80 8.83 -11.19
+v 3.44 8.52 -11.19
+v 3.44 8.77 -11.19
+v 3.80 10.56 -11.04
+v 3.80 8.83 -11.04
+v 3.99 10.72 -11.10
+v 3.99 10.72 -11.02
+v 2.90 8.61 -11.10
+v 2.90 8.61 -11.02
+v 3.80 10.56 -11.10
+v 3.09 8.82 -11.10
+v 3.80 8.83 -11.10
+v 3.44 8.77 -11.10
+v 3.99 8.86 -11.10
+v 3.99 8.86 -11.02
+v 2.90 8.86 -11.10
+v 2.90 8.86 -11.02
+v 2.81 8.86 -11.19
+v 2.81 8.61 -11.19
+v 4.08 8.61 -11.19
+v 4.08 8.86 -11.19
+v 5.72 4.66 -12.83
+v 6.08 5.22 -12.83
+v 6.08 2.88 -12.83
+v 5.72 2.92 -12.83
+v 5.44 2.96 -12.89
+v 5.44 2.71 -12.89
+v 5.44 2.71 -12.81
+v 5.44 2.96 -12.81
+v 6.08 5.63 -12.89
+v 5.54 4.82 -12.89
+v 5.54 4.82 -12.81
+v 6.08 5.63 -12.81
+v 6.72 2.71 -12.89
+v 6.72 2.96 -12.89
+v 6.72 2.96 -12.81
+v 6.72 2.71 -12.81
+v 6.08 2.63 -12.89
+v 6.63 2.71 -12.89
+v 6.63 2.71 -12.81
+v 6.08 2.63 -12.81
+v 5.54 2.71 -12.98
+v 5.54 2.96 -12.98
+v 5.72 2.92 -12.98
+v 6.08 5.22 -12.89
+v 5.72 4.66 -12.89
+v 6.63 2.96 -12.98
+v 6.63 2.71 -12.98
+v 6.44 2.94 -12.98
+v 6.08 2.63 -12.98
+v 6.08 2.88 -12.98
+v 6.44 4.66 -12.83
+v 6.44 2.94 -12.83
+v 6.63 4.82 -12.89
+v 6.63 4.82 -12.81
+v 5.54 2.71 -12.89
+v 5.54 2.71 -12.81
+v 6.44 4.66 -12.89
+v 5.72 2.92 -12.89
+v 6.44 2.94 -12.89
+v 6.08 2.88 -12.89
+v 6.63 2.96 -12.89
+v 6.63 2.96 -12.81
+v 5.54 2.96 -12.89
+v 5.54 2.96 -12.81
+v 5.44 2.96 -12.98
+v 5.44 2.71 -12.98
+v 6.72 2.71 -12.98
+v 6.72 2.96 -12.98
+v -6.30 20.76 -3.63
+v -5.94 21.32 -3.63
+v -5.94 18.98 -3.63
+v -6.30 19.02 -3.63
+v -6.58 19.06 -3.69
+v -6.58 18.81 -3.69
+v -6.58 18.81 -3.60
+v -6.58 19.06 -3.60
+v -5.94 21.73 -3.69
+v -6.49 20.92 -3.69
+v -6.49 20.92 -3.60
+v -5.94 21.73 -3.60
+v -5.30 18.81 -3.69
+v -5.30 19.06 -3.69
+v -5.30 19.06 -3.60
+v -5.30 18.81 -3.60
+v -5.94 18.73 -3.69
+v -5.40 18.81 -3.69
+v -5.40 18.81 -3.60
+v -5.94 18.73 -3.60
+v -6.49 18.81 -3.78
+v -6.49 19.06 -3.78
+v -6.30 19.02 -3.78
+v -5.94 21.32 -3.69
+v -6.30 20.76 -3.69
+v -5.40 19.06 -3.78
+v -5.40 18.81 -3.78
+v -5.58 19.04 -3.78
+v -5.94 18.73 -3.78
+v -5.94 18.98 -3.78
+v -5.58 20.76 -3.63
+v -5.58 19.04 -3.63
+v -5.40 20.92 -3.69
+v -5.40 20.92 -3.60
+v -6.49 18.81 -3.69
+v -6.49 18.81 -3.60
+v -5.58 20.76 -3.69
+v -6.30 19.02 -3.69
+v -5.58 19.04 -3.69
+v -5.94 18.98 -3.69
+v -5.40 19.06 -3.69
+v -5.40 19.06 -3.60
+v -6.49 19.06 -3.69
+v -6.49 19.06 -3.60
+v -6.58 19.06 -3.78
+v -6.58 18.81 -3.78
+v -5.30 18.81 -3.78
+v -5.30 19.06 -3.78
+v 5.89 20.76 -3.63
+v 6.25 21.32 -3.63
+v 6.25 18.98 -3.63
+v 5.89 19.02 -3.63
+v 5.61 19.06 -3.69
+v 5.61 18.81 -3.69
+v 5.61 18.81 -3.60
+v 5.61 19.06 -3.60
+v 6.25 21.73 -3.69
+v 5.70 20.92 -3.69
+v 5.70 20.92 -3.60
+v 6.25 21.73 -3.60
+v 6.89 18.81 -3.69
+v 6.89 19.06 -3.69
+v 6.89 19.06 -3.60
+v 6.89 18.81 -3.60
+v 6.25 18.73 -3.69
+v 6.79 18.81 -3.69
+v 6.79 18.81 -3.60
+v 6.25 18.73 -3.60
+v 5.70 18.81 -3.78
+v 5.70 19.06 -3.78
+v 5.89 19.02 -3.78
+v 6.25 21.32 -3.69
+v 5.89 20.76 -3.69
+v 6.79 19.06 -3.78
+v 6.79 18.81 -3.78
+v 6.61 19.04 -3.78
+v 6.25 18.73 -3.78
+v 6.25 18.98 -3.78
+v 6.61 20.76 -3.63
+v 6.61 19.04 -3.63
+v 6.79 20.92 -3.69
+v 6.79 20.92 -3.60
+v 5.70 18.81 -3.69
+v 5.70 18.81 -3.60
+v 6.61 20.76 -3.69
+v 5.89 19.02 -3.69
+v 6.61 19.04 -3.69
+v 6.25 18.98 -3.69
+v 6.79 19.06 -3.69
+v 6.79 19.06 -3.60
+v 5.70 19.06 -3.69
+v 5.70 19.06 -3.60
+v 5.61 19.06 -3.78
+v 5.61 18.81 -3.78
+v 6.89 18.81 -3.78
+v 6.89 19.06 -3.78
+v -8.76 20.76 0.36
+v -8.76 21.32 -0.00
+v -8.76 18.98 -0.00
+v -8.76 19.02 0.36
+v -8.82 19.06 0.64
+v -8.82 18.81 0.64
+v -8.74 18.81 0.64
+v -8.74 19.06 0.64
+v -8.82 21.73 -0.00
+v -8.82 20.92 0.55
+v -8.74 20.92 0.55
+v -8.74 21.73 -0.00
+v -8.82 18.81 -0.64
+v -8.82 19.06 -0.64
+v -8.74 19.06 -0.64
+v -8.74 18.81 -0.64
+v -8.82 18.73 -0.00
+v -8.82 18.81 -0.55
+v -8.74 18.81 -0.55
+v -8.74 18.73 -0.00
+v -8.91 18.81 0.55
+v -8.91 19.06 0.55
+v -8.91 19.02 0.36
+v -8.82 21.32 -0.00
+v -8.82 20.76 0.36
+v -8.91 19.06 -0.55
+v -8.91 18.81 -0.55
+v -8.91 19.04 -0.36
+v -8.91 18.73 -0.00
+v -8.91 18.98 -0.00
+v -8.76 20.76 -0.36
+v -8.76 19.04 -0.36
+v -8.82 20.92 -0.55
+v -8.74 20.92 -0.55
+v -8.82 18.81 0.55
+v -8.74 18.81 0.55
+v -8.82 20.76 -0.36
+v -8.82 19.02 0.36
+v -8.82 19.04 -0.36
+v -8.82 18.98 -0.00
+v -8.82 19.06 -0.55
+v -8.74 19.06 -0.55
+v -8.82 19.06 0.55
+v -8.74 19.06 0.55
+v -8.91 19.06 0.64
+v -8.91 18.81 0.64
+v -8.91 18.81 -0.64
+v -8.91 19.06 -0.64
+v -23.42 4.66 -0.35
+v -23.42 2.92 -0.35
+v -23.42 2.88 0.01
+v -23.42 5.22 0.01
+v -23.48 2.96 -0.63
+v -23.40 2.96 -0.63
+v -23.40 2.71 -0.63
+v -23.48 2.71 -0.63
+v -23.48 5.63 0.01
+v -23.40 5.63 0.01
+v -23.40 4.82 -0.54
+v -23.48 4.82 -0.54
+v -23.48 2.71 0.65
+v -23.40 2.71 0.65
+v -23.40 2.96 0.65
+v -23.48 2.96 0.65
+v -23.48 2.63 0.01
+v -23.40 2.63 0.01
+v -23.40 2.71 0.55
+v -23.48 2.71 0.55
+v -23.57 2.71 -0.54
+v -23.57 2.92 -0.35
+v -23.57 2.96 -0.54
+v -23.48 5.22 0.01
+v -23.48 4.66 -0.35
+v -23.57 2.96 0.55
+v -23.57 2.94 0.37
+v -23.57 2.71 0.55
+v -23.57 2.63 0.01
+v -23.57 2.88 0.01
+v -23.42 4.66 0.37
+v -23.42 2.94 0.37
+v -23.48 4.82 0.55
+v -23.40 4.82 0.55
+v -23.48 2.71 -0.54
+v -23.40 2.71 -0.54
+v -23.48 4.66 0.37
+v -23.48 2.92 -0.35
+v -23.48 2.94 0.37
+v -23.48 2.88 0.01
+v -23.48 2.96 0.55
+v -23.40 2.96 0.55
+v -23.40 2.96 -0.54
+v -23.48 2.96 -0.54
+v -23.57 2.71 -0.63
+v -23.57 2.96 -0.63
+v -23.57 2.96 0.65
+v -23.57 2.71 0.65
+v -19.96 4.66 6.78
+v -19.96 2.92 6.78
+v -19.60 2.88 6.78
+v -19.60 5.22 6.78
+v -20.24 2.96 6.85
+v -20.24 2.96 6.76
+v -20.24 2.71 6.76
+v -20.24 2.71 6.85
+v -19.60 5.63 6.85
+v -19.60 5.63 6.76
+v -20.15 4.82 6.76
+v -20.15 4.82 6.85
+v -18.96 2.71 6.85
+v -18.96 2.71 6.76
+v -18.96 2.96 6.76
+v -18.96 2.96 6.85
+v -19.60 2.63 6.85
+v -19.60 2.63 6.76
+v -19.05 2.71 6.76
+v -19.05 2.71 6.85
+v -20.15 2.71 6.94
+v -19.96 2.92 6.94
+v -20.15 2.96 6.94
+v -19.60 5.22 6.85
+v -19.96 4.66 6.85
+v -19.05 2.96 6.94
+v -19.24 2.94 6.94
+v -19.05 2.71 6.94
+v -19.60 2.63 6.94
+v -19.60 2.88 6.94
+v -19.24 4.66 6.78
+v -19.24 2.94 6.78
+v -19.05 4.82 6.85
+v -19.05 4.82 6.76
+v -20.15 2.71 6.85
+v -20.15 2.71 6.76
+v -19.24 4.66 6.85
+v -19.96 2.92 6.85
+v -19.24 2.94 6.85
+v -19.60 2.88 6.85
+v -19.05 2.96 6.85
+v -19.05 2.96 6.76
+v -20.15 2.96 6.76
+v -20.15 2.96 6.85
+v -20.24 2.71 6.94
+v -20.24 2.96 6.94
+v -18.96 2.96 6.94
+v -18.96 2.71 6.94
+v -5.42 9.62 11.04
+v -5.42 7.88 11.04
+v -5.06 7.83 11.04
+v -5.06 10.18 11.04
+v -5.70 7.92 11.10
+v -5.70 7.92 11.01
+v -5.70 7.67 11.01
+v -5.70 7.67 11.10
+v -5.06 10.59 11.10
+v -5.06 10.59 11.01
+v -5.61 9.78 11.01
+v -5.61 9.78 11.10
+v -4.43 7.67 11.10
+v -4.43 7.67 11.01
+v -4.43 7.92 11.01
+v -4.43 7.92 11.10
+v -5.06 7.58 11.10
+v -5.06 7.58 11.01
+v -4.52 7.67 11.01
+v -4.52 7.67 11.10
+v -5.61 7.67 11.19
+v -5.42 7.88 11.19
+v -5.61 7.92 11.19
+v -5.06 10.18 11.10
+v -5.42 9.62 11.10
+v -4.52 7.92 11.19
+v -4.71 7.89 11.19
+v -4.52 7.67 11.19
+v -5.06 7.58 11.19
+v -5.06 7.83 11.19
+v -4.71 9.62 11.04
+v -4.71 7.89 11.04
+v -4.52 9.78 11.10
+v -4.52 9.78 11.01
+v -5.61 7.67 11.10
+v -5.61 7.67 11.01
+v -4.71 9.62 11.10
+v -5.42 7.88 11.10
+v -4.71 7.89 11.10
+v -5.06 7.83 11.10
+v -4.52 7.92 11.10
+v -4.52 7.92 11.01
+v -5.61 7.92 11.01
+v -5.61 7.92 11.10
+v -5.70 7.67 11.19
+v -5.70 7.92 11.19
+v -4.43 7.92 11.19
+v -4.43 7.67 11.19
+v 3.43 9.62 11.04
+v 3.43 7.88 11.04
+v 3.79 7.83 11.04
+v 3.79 10.18 11.04
+v 3.15 7.92 11.10
+v 3.15 7.92 11.01
+v 3.15 7.67 11.01
+v 3.15 7.67 11.10
+v 3.79 10.59 11.10
+v 3.79 10.59 11.01
+v 3.24 9.78 11.01
+v 3.24 9.78 11.10
+v 4.43 7.67 11.10
+v 4.43 7.67 11.01
+v 4.43 7.92 11.01
+v 4.43 7.92 11.10
+v 3.79 7.58 11.10
+v 3.79 7.58 11.01
+v 4.33 7.67 11.01
+v 4.33 7.67 11.10
+v 3.24 7.67 11.19
+v 3.43 7.88 11.19
+v 3.24 7.92 11.19
+v 3.79 10.18 11.10
+v 3.43 9.62 11.10
+v 4.33 7.92 11.19
+v 4.15 7.89 11.19
+v 4.33 7.67 11.19
+v 3.79 7.58 11.19
+v 3.79 7.83 11.19
+v 4.15 9.62 11.04
+v 4.15 7.89 11.04
+v 4.33 9.78 11.10
+v 4.33 9.78 11.01
+v 3.24 7.67 11.10
+v 3.24 7.67 11.01
+v 4.15 9.62 11.10
+v 3.43 7.88 11.10
+v 4.15 7.89 11.10
+v 3.79 7.83 11.10
+v 4.33 7.92 11.10
+v 4.33 7.92 11.01
+v 3.24 7.92 11.01
+v 3.24 7.92 11.10
+v 3.15 7.67 11.19
+v 3.15 7.92 11.19
+v 4.43 7.92 11.19
+v 4.43 7.67 11.19
+v -0.84 4.66 11.04
+v -0.84 2.92 11.04
+v -0.48 2.88 11.04
+v -0.48 5.22 11.04
+v -1.12 2.96 11.10
+v -1.12 2.96 11.01
+v -1.12 2.71 11.01
+v -1.12 2.71 11.10
+v -0.48 5.63 11.10
+v -0.48 5.63 11.01
+v -1.03 4.82 11.01
+v -1.03 4.82 11.10
+v 0.15 2.71 11.10
+v 0.15 2.71 11.01
+v 0.15 2.96 11.01
+v 0.15 2.96 11.10
+v -0.48 2.63 11.10
+v -0.48 2.63 11.01
+v 0.06 2.71 11.01
+v 0.06 2.71 11.10
+v -1.03 2.71 11.19
+v -0.84 2.92 11.19
+v -1.03 2.96 11.19
+v -0.48 5.22 11.10
+v -0.84 4.66 11.10
+v 0.06 2.96 11.19
+v -0.13 2.94 11.19
+v 0.06 2.71 11.19
+v -0.48 2.63 11.19
+v -0.48 2.88 11.19
+v -0.13 4.66 11.04
+v -0.13 2.94 11.04
+v 0.06 4.82 11.10
+v 0.06 4.82 11.01
+v -1.03 2.71 11.10
+v -1.03 2.71 11.01
+v -0.13 4.66 11.10
+v -0.84 2.92 11.10
+v -0.13 2.94 11.10
+v -0.48 2.88 11.10
+v 0.06 2.96 11.10
+v 0.06 2.96 11.01
+v -1.03 2.96 11.01
+v -1.03 2.96 11.10
+v -1.12 2.71 11.19
+v -1.12 2.96 11.19
+v 0.15 2.96 11.19
+v 0.15 2.71 11.19
+v 0.43 20.76 3.64
+v 0.07 21.32 3.64
+v 0.07 18.98 3.64
+v 0.43 19.02 3.64
+v 0.71 19.06 3.70
+v 0.71 18.81 3.70
+v 0.71 18.81 3.61
+v 0.71 19.06 3.61
+v 0.07 21.73 3.70
+v 0.62 20.92 3.70
+v 0.62 20.92 3.61
+v 0.07 21.73 3.61
+v -0.57 18.81 3.70
+v -0.57 19.06 3.70
+v -0.57 19.06 3.61
+v -0.57 18.81 3.61
+v 0.07 18.73 3.70
+v -0.47 18.81 3.70
+v -0.47 18.81 3.61
+v 0.07 18.73 3.61
+v 0.62 18.81 3.79
+v 0.62 19.06 3.79
+v 0.43 19.02 3.79
+v 0.07 21.32 3.70
+v 0.43 20.76 3.70
+v -0.47 19.06 3.79
+v -0.47 18.81 3.79
+v -0.29 19.04 3.79
+v 0.07 18.73 3.79
+v 0.07 18.98 3.79
+v -0.29 20.76 3.64
+v -0.29 19.04 3.64
+v -0.47 20.92 3.70
+v -0.47 20.92 3.61
+v 0.62 18.81 3.70
+v 0.62 18.81 3.61
+v -0.29 20.76 3.70
+v 0.43 19.02 3.70
+v -0.29 19.04 3.70
+v 0.07 18.98 3.70
+v -0.47 19.06 3.70
+v -0.47 19.06 3.61
+v 0.62 19.06 3.70
+v 0.62 19.06 3.61
+v 0.71 19.06 3.79
+v 0.71 18.81 3.79
+v -0.57 18.81 3.79
+v -0.57 19.06 3.79
+v 6.58 20.76 3.64
+v 6.22 21.32 3.64
+v 6.22 18.98 3.64
+v 6.58 19.02 3.64
+v 6.86 19.06 3.70
+v 6.86 18.81 3.70
+v 6.86 18.81 3.61
+v 6.86 19.06 3.61
+v 6.22 21.73 3.70
+v 6.76 20.92 3.70
+v 6.76 20.92 3.61
+v 6.22 21.73 3.61
+v 5.58 18.81 3.70
+v 5.58 19.06 3.70
+v 5.58 19.06 3.61
+v 5.58 18.81 3.61
+v 6.22 18.73 3.70
+v 5.67 18.81 3.70
+v 5.67 18.81 3.61
+v 6.22 18.73 3.61
+v 6.76 18.81 3.79
+v 6.76 19.06 3.79
+v 6.58 19.02 3.79
+v 6.22 21.32 3.70
+v 6.58 20.76 3.70
+v 5.67 19.06 3.79
+v 5.67 18.81 3.79
+v 5.86 19.04 3.79
+v 6.22 18.73 3.79
+v 6.22 18.98 3.79
+v 5.86 20.76 3.64
+v 5.86 19.04 3.64
+v 5.67 20.92 3.70
+v 5.67 20.92 3.61
+v 6.76 18.81 3.70
+v 6.76 18.81 3.61
+v 5.86 20.76 3.70
+v 6.58 19.02 3.70
+v 5.86 19.04 3.70
+v 6.22 18.98 3.70
+v 5.67 19.06 3.70
+v 5.67 19.06 3.61
+v 6.76 19.06 3.70
+v 6.76 19.06 3.61
+v 6.86 19.06 3.79
+v 6.86 18.81 3.79
+v 5.58 18.81 3.79
+v 5.58 19.06 3.79
+v 12.89 4.66 -3.98
+v 12.89 5.22 -3.62
+v 12.89 2.88 -3.62
+v 12.89 2.92 -3.98
+v 12.96 2.96 -4.26
+v 12.96 2.71 -4.26
+v 12.87 2.71 -4.26
+v 12.87 2.96 -4.26
+v 12.96 5.63 -3.62
+v 12.96 4.82 -4.17
+v 12.87 4.82 -4.17
+v 12.87 5.63 -3.62
+v 12.96 2.71 -2.98
+v 12.96 2.96 -2.98
+v 12.87 2.96 -2.98
+v 12.87 2.71 -2.98
+v 12.96 2.63 -3.62
+v 12.96 2.71 -3.08
+v 12.87 2.71 -3.08
+v 12.87 2.63 -3.62
+v 13.05 2.71 -4.17
+v 13.05 2.96 -4.17
+v 13.05 2.92 -3.98
+v 12.96 5.22 -3.62
+v 12.96 4.66 -3.98
+v 13.05 2.96 -3.08
+v 13.05 2.71 -3.08
+v 13.05 2.94 -3.26
+v 13.05 2.63 -3.62
+v 13.05 2.88 -3.62
+v 12.89 4.66 -3.26
+v 12.89 2.94 -3.26
+v 12.96 4.82 -3.08
+v 12.87 4.82 -3.08
+v 12.96 2.71 -4.17
+v 12.87 2.71 -4.17
+v 12.96 4.66 -3.26
+v 12.96 2.92 -3.98
+v 12.96 2.94 -3.26
+v 12.96 2.88 -3.62
+v 12.96 2.96 -3.08
+v 12.87 2.96 -3.08
+v 12.96 2.96 -4.17
+v 12.87 2.96 -4.17
+v 13.05 2.96 -4.26
+v 13.05 2.71 -4.26
+v 13.05 2.71 -2.98
+v 13.05 2.96 -2.98
+v 12.89 4.66 3.26
+v 12.89 5.22 3.62
+v 12.89 2.88 3.62
+v 12.89 2.92 3.26
+v 12.96 2.96 2.98
+v 12.96 2.71 2.98
+v 12.87 2.71 2.98
+v 12.87 2.96 2.98
+v 12.96 5.63 3.62
+v 12.96 4.82 3.08
+v 12.87 4.82 3.08
+v 12.87 5.63 3.62
+v 12.96 2.71 4.26
+v 12.96 2.96 4.26
+v 12.87 2.96 4.26
+v 12.87 2.71 4.26
+v 12.96 2.63 3.62
+v 12.96 2.71 4.17
+v 12.87 2.71 4.17
+v 12.87 2.63 3.62
+v 13.05 2.71 3.08
+v 13.05 2.96 3.08
+v 13.05 2.92 3.26
+v 12.96 5.22 3.62
+v 12.96 4.66 3.26
+v 13.05 2.96 4.17
+v 13.05 2.71 4.17
+v 13.05 2.94 3.98
+v 13.05 2.63 3.62
+v 13.05 2.88 3.62
+v 12.89 4.66 3.98
+v 12.89 2.94 3.98
+v 12.96 4.82 4.17
+v 12.87 4.82 4.17
+v 12.96 2.71 3.08
+v 12.87 2.71 3.08
+v 12.96 4.66 3.98
+v 12.96 2.92 3.26
+v 12.96 2.94 3.98
+v 12.96 2.88 3.62
+v 12.96 2.96 4.17
+v 12.87 2.96 4.17
+v 12.96 2.96 3.08
+v 12.87 2.96 3.08
+v 13.05 2.96 2.98
+v 13.05 2.71 2.98
+v 13.05 2.71 4.26
+v 13.05 2.96 4.26
+v 8.75 20.76 0.36
+v 8.75 19.02 0.36
+v 8.75 18.98 -0.00
+v 8.75 21.32 -0.00
+v 8.81 19.06 0.64
+v 8.73 19.06 0.64
+v 8.73 18.81 0.64
+v 8.81 18.81 0.64
+v 8.81 21.73 -0.00
+v 8.73 21.73 -0.00
+v 8.73 20.92 0.55
+v 8.81 20.92 0.55
+v 8.81 18.81 -0.64
+v 8.73 18.81 -0.64
+v 8.73 19.06 -0.64
+v 8.81 19.06 -0.64
+v 8.81 18.73 -0.00
+v 8.73 18.73 -0.00
+v 8.73 18.81 -0.55
+v 8.81 18.81 -0.55
+v 8.90 18.81 0.55
+v 8.90 19.02 0.36
+v 8.90 19.06 0.55
+v 8.81 21.32 -0.00
+v 8.81 20.76 0.36
+v 8.90 19.06 -0.55
+v 8.90 19.04 -0.36
+v 8.90 18.81 -0.55
+v 8.90 18.73 -0.00
+v 8.90 18.98 -0.00
+v 8.75 20.76 -0.36
+v 8.75 19.04 -0.36
+v 8.81 20.92 -0.55
+v 8.73 20.92 -0.55
+v 8.81 18.81 0.55
+v 8.73 18.81 0.55
+v 8.81 20.76 -0.36
+v 8.81 19.02 0.36
+v 8.81 19.04 -0.36
+v 8.81 18.98 -0.00
+v 8.81 19.06 -0.55
+v 8.73 19.06 -0.55
+v 8.73 19.06 0.55
+v 8.81 19.06 0.55
+v 8.90 18.81 0.64
+v 8.90 19.06 0.64
+v 8.90 19.06 -0.64
+v 8.90 18.81 -0.64
+v -5.91 20.76 3.64
+v -6.27 21.32 3.64
+v -6.27 18.98 3.64
+v -5.91 19.02 3.64
+v -5.63 19.06 3.70
+v -5.63 18.81 3.70
+v -5.63 18.81 3.61
+v -5.63 19.06 3.61
+v -6.27 21.73 3.70
+v -5.73 20.92 3.70
+v -5.73 20.92 3.61
+v -6.27 21.73 3.61
+v -6.91 18.81 3.70
+v -6.91 19.06 3.70
+v -6.91 19.06 3.61
+v -6.91 18.81 3.61
+v -6.27 18.73 3.70
+v -6.82 18.81 3.70
+v -6.82 18.81 3.61
+v -6.27 18.73 3.61
+v -5.73 18.81 3.79
+v -5.73 19.06 3.79
+v -5.91 19.02 3.79
+v -6.27 21.32 3.70
+v -5.91 20.76 3.70
+v -6.82 19.06 3.79
+v -6.82 18.81 3.79
+v -6.63 19.04 3.79
+v -6.27 18.73 3.79
+v -6.27 18.98 3.79
+v -6.63 20.76 3.64
+v -6.63 19.04 3.64
+v -6.82 20.92 3.70
+v -6.82 20.92 3.61
+v -5.73 18.81 3.70
+v -5.73 18.81 3.61
+v -6.63 20.76 3.70
+v -5.91 19.02 3.70
+v -6.63 19.04 3.70
+v -6.27 18.98 3.70
+v -6.82 19.06 3.70
+v -6.82 19.06 3.61
+v -5.73 19.06 3.70
+v -5.73 19.06 3.61
+v -5.63 19.06 3.79
+v -5.63 18.81 3.79
+v -6.91 18.81 3.79
+v -6.91 19.06 3.79
+v 1.22 3.89 -13.04
+v 1.22 0.00 -13.04
+v 0.00 0.00 -13.04
+v 0.00 4.45 -13.04
+v -2.44 3.02 -13.04
+v -1.22 3.89 -13.04
+v -1.22 0.00 -13.04
+v -2.44 0.00 -13.04
+v 2.44 3.02 -13.04
+v 2.44 0.00 -13.04
+v 2.76 0.00 -12.61
+v 2.76 0.00 -13.28
+v 2.72 2.63 -13.28
+v 2.72 2.63 -12.61
+v 2.32 0.00 -13.28
+v 2.28 2.21 -13.28
+v 2.32 0.00 -12.61
+v 2.28 2.21 -12.61
+v 1.57 4.51 -13.28
+v 1.57 4.51 -12.61
+v 1.32 3.79 -13.28
+v 1.32 3.79 -12.61
+v 0.00 5.20 -13.28
+v 0.00 5.20 -12.61
+v 0.00 4.45 -13.28
+v 0.00 4.45 -12.61
+v -1.57 4.51 -13.28
+v -1.57 4.51 -12.61
+v -1.32 3.79 -13.28
+v -1.32 3.79 -12.61
+v -2.72 2.63 -13.28
+v -2.72 2.63 -12.61
+v -2.28 2.21 -13.28
+v -2.28 2.21 -12.61
+v -2.76 0.00 -13.28
+v -2.76 0.00 -12.61
+v -2.32 0.00 -13.28
+v -2.32 0.00 -12.61
+v -23.02 0.02 -7.19
+v -23.81 0.02 -7.26
+v -23.50 3.76 -6.94
+v -22.95 3.76 -6.89
+v -23.10 0.02 -6.35
+v -23.01 3.76 -6.25
+v -23.88 0.02 -6.42
+v -23.56 3.76 -6.30
+v -23.00 6.77 -7.20
+v -23.83 6.77 -7.27
+v -23.08 7.23 -6.33
+v -23.90 7.23 -6.41
+v -23.14 6.61 -6.66
+v -23.14 6.39 0.01
+v -23.82 6.39 0.01
+v -23.82 6.61 -6.66
+v -23.82 7.03 0.01
+v -23.82 7.24 -6.66
+v -23.14 7.03 0.01
+v -23.14 7.24 -6.66
+v -23.14 6.61 6.68
+v -23.82 6.61 6.68
+v -23.82 7.24 6.68
+v -23.14 7.24 6.68
+v -10.64 6.61 -6.65
+v -17.31 6.39 -6.65
+v -17.31 6.39 -7.33
+v -10.64 6.61 -7.33
+v -17.31 7.03 -7.33
+v -10.64 7.24 -7.33
+v -17.31 7.03 -6.65
+v -10.64 7.24 -6.65
+v -23.99 6.61 -6.65
+v -23.99 6.61 -7.33
+v -23.99 7.24 -7.33
+v -23.99 7.24 -6.65
+v -23.02 0.02 7.20
+v -22.95 3.76 6.91
+v -23.50 3.76 6.95
+v -23.81 0.02 7.27
+v -23.10 0.02 6.37
+v -23.01 3.76 6.27
+v -23.88 0.02 6.44
+v -23.56 3.76 6.32
+v -23.00 6.77 7.22
+v -23.83 6.77 7.29
+v -23.08 7.23 6.35
+v -23.90 7.23 6.42
+v -10.64 6.61 6.68
+v -10.64 6.61 7.36
+v -17.31 6.39 7.36
+v -17.31 6.39 6.68
+v -10.64 7.24 7.36
+v -17.31 7.03 7.36
+v -10.64 7.24 6.68
+v -17.31 7.03 6.68
+v -23.99 6.61 7.36
+v -23.99 6.61 6.68
+v -23.99 7.24 7.36
+v -23.99 7.24 6.68
+v 8.74 6.44 10.70
+v 8.74 6.44 11.59
+v 0.00 6.16 11.59
+v 0.00 6.16 10.70
+v 8.74 7.27 11.59
+v 0.00 6.98 11.59
+v 8.74 7.27 10.70
+v 0.00 6.98 10.70
+v -8.74 6.44 11.59
+v -8.74 6.44 10.70
+v -8.74 7.27 11.59
+v -8.74 7.27 10.70
+v 8.74 17.79 -0.00
+v 8.74 27.72 -0.00
+v 8.74 23.62 3.62
+v 0.00 17.79 -3.62
+v 0.00 23.02 -3.62
+v 8.74 23.62 -3.62
+v -8.74 17.79 -0.00
+v -8.74 27.60 -0.00
+v -8.74 23.62 -3.62
+v 0.00 17.79 3.62
+v 0.00 23.02 3.62
+v -8.74 23.62 3.62
+v 8.34 17.58 -3.11
+v 8.50 20.48 -3.15
+v 8.50 20.48 -3.73
+v 8.34 17.58 -3.92
+v 8.34 24.35 -3.11
+v 8.34 23.76 -3.83
+v 9.14 17.58 -3.11
+v 9.09 20.48 -3.15
+v 9.14 24.35 -3.11
+v 9.14 17.58 -3.92
+v 9.09 20.48 -3.73
+v 9.14 23.76 -3.83
+v -0.81 20.18 -3.56
+v -0.81 17.74 -3.56
+v -0.81 17.74 -3.74
+v -0.81 20.18 -3.74
+v -0.95 20.13 -3.74
+v -0.95 17.74 -3.74
+v -0.95 17.74 -3.56
+v -0.95 20.13 -3.56
+v -1.04 20.10 -3.76
+v -1.04 20.10 -3.58
+v -1.04 20.32 -3.58
+v -1.04 20.32 -3.76
+v 1.04 20.32 -3.58
+v 1.04 20.10 -3.58
+v 1.04 20.10 -3.76
+v 1.04 20.32 -3.76
+v -0.39 20.29 -3.76
+v -0.39 20.29 -3.58
+v -0.39 20.51 -3.76
+v -0.39 20.51 -3.58
+v 0.94 20.15 -3.56
+v 0.94 17.74 -3.56
+v 0.94 17.74 -3.74
+v 0.94 20.15 -3.74
+v 0.80 17.74 -3.74
+v 0.80 20.19 -3.74
+v 0.80 17.74 -3.56
+v 0.80 20.19 -3.56
+v 0.39 20.29 -3.76
+v 0.39 20.29 -3.58
+v 0.39 20.51 -3.76
+v 0.39 20.51 -3.58
+v 0.00 20.34 -3.76
+v 0.00 20.34 -3.58
+v 0.00 20.56 -3.76
+v 0.00 20.56 -3.58
+v -0.01 17.69 -4.00
+v 0.78 17.69 -4.00
+v 0.78 17.66 -3.95
+v -0.01 17.66 -3.95
+v -0.01 17.76 -4.01
+v 0.78 17.76 -4.01
+v 0.78 17.75 -3.95
+v 0.78 17.85 -3.95
+v 0.78 17.85 -3.64
+v 0.78 17.75 -3.64
+v 0.78 17.82 -4.00
+v 0.78 17.66 -3.64
+v -0.01 17.85 -3.95
+v -0.01 17.85 -3.64
+v -0.01 17.82 -4.00
+v -0.80 17.66 -3.95
+v -0.80 17.69 -4.00
+v -0.80 17.76 -4.01
+v -0.80 17.85 -3.64
+v -0.80 17.85 -3.95
+v -0.80 17.75 -3.95
+v -0.80 17.75 -3.64
+v -0.80 17.82 -4.00
+v -0.80 17.66 -3.64
+v 0.86 20.19 -3.66
+v 0.86 17.72 -3.66
+v 0.02 17.72 -3.66
+v 0.02 20.45 -3.66
+v -0.82 20.19 -3.66
+v -0.82 17.72 -3.66
+v -9.14 17.58 -3.11
+v -8.97 20.48 -3.15
+v -8.97 20.48 -3.73
+v -9.14 17.58 -3.92
+v -9.14 24.35 -3.11
+v -9.14 23.76 -3.83
+v -8.34 17.58 -3.11
+v -8.39 20.48 -3.15
+v -8.34 24.35 -3.11
+v -8.34 17.58 -3.92
+v -8.39 20.48 -3.73
+v -8.34 23.76 -3.83
+v -9.14 17.58 3.11
+v -9.14 17.58 3.92
+v -8.97 20.48 3.73
+v -8.97 20.48 3.15
+v -9.14 23.76 3.83
+v -9.14 24.35 3.11
+v -8.34 17.58 3.11
+v -8.39 20.48 3.15
+v -8.34 24.35 3.11
+v -8.39 20.48 3.73
+v -8.34 17.58 3.92
+v -8.34 23.76 3.83
+v 8.34 17.58 3.11
+v 8.34 17.58 3.92
+v 8.50 20.48 3.73
+v 8.50 20.48 3.15
+v 8.34 23.76 3.83
+v 8.34 24.35 3.11
+v 9.14 17.58 3.11
+v 9.09 20.48 3.15
+v 9.14 24.35 3.11
+v 9.09 20.48 3.73
+v 9.14 17.58 3.92
+v 9.14 23.76 3.83
+v 12.59 6.44 -8.74
+v 13.48 6.44 -8.74
+v 13.48 6.16 -0.00
+v 12.59 6.16 -0.00
+v 13.48 7.27 -8.74
+v 13.48 6.98 -0.00
+v 12.59 7.27 -8.74
+v 12.59 6.98 -0.00
+v 13.48 6.44 8.74
+v 12.59 6.44 8.74
+v 13.48 7.27 8.74
+v 12.59 7.27 8.74
+v -9.92 18.64 4.67
+v -10.78 18.64 4.67
+v -10.78 18.64 6.66
+v -9.92 18.64 6.66
+v -9.92 17.79 4.67
+v -10.78 17.79 4.67
+v -10.78 17.79 6.66
+v -9.92 17.79 6.66
+v -12.40 7.80 6.90
+v -12.40 7.80 6.03
+v -14.38 7.80 6.03
+v -14.38 7.80 6.90
+v -12.40 6.95 6.90
+v -12.40 6.95 6.03
+v -14.38 6.95 6.03
+v -14.38 6.95 6.90
+v -12.40 7.80 -5.99
+v -12.40 7.80 -6.86
+v -14.38 7.80 -6.86
+v -14.38 7.80 -5.99
+v -12.40 6.95 -5.99
+v -12.40 6.95 -6.86
+v -14.38 6.95 -6.86
+v -14.38 6.95 -5.99
+v -16.55 0.00 12.98
+v -16.55 7.76 12.98
+v -17.17 7.76 10.68
+v -17.17 0.00 10.68
+v -14.87 0.00 14.66
+v -14.87 7.76 14.66
+v -12.57 0.00 15.28
+v -12.57 7.76 15.28
+v -10.27 0.00 14.66
+v -10.27 7.76 14.66
+v -8.58 0.00 12.98
+v -8.58 7.76 12.98
+v -7.97 0.00 10.68
+v -7.97 7.76 10.68
+v -8.58 0.00 8.38
+v -8.58 7.76 8.38
+v -10.27 0.00 6.69
+v -10.27 7.76 6.69
+v -12.57 0.00 6.08
+v -12.57 7.76 6.08
+v -14.87 0.00 6.69
+v -14.87 7.76 6.69
+v -16.55 0.00 8.38
+v -16.55 7.76 8.38
+v -16.78 7.76 13.11
+v -16.78 8.57 13.11
+v -17.43 8.57 10.68
+v -17.43 7.76 10.68
+v -15.00 7.76 14.89
+v -15.00 8.57 14.89
+v -12.57 7.76 15.54
+v -12.57 8.57 15.54
+v -10.13 7.76 14.89
+v -10.13 8.57 14.89
+v -8.35 7.76 13.11
+v -8.35 8.57 13.11
+v -7.70 7.76 10.68
+v -7.70 8.57 10.68
+v -8.35 7.76 8.24
+v -8.35 8.57 8.24
+v -10.13 7.76 6.46
+v -10.13 8.57 6.46
+v -12.57 7.76 5.81
+v -12.57 8.57 5.81
+v -15.00 7.76 6.46
+v -15.00 8.57 6.46
+v -16.78 7.76 8.24
+v -16.78 8.57 8.24
+v -17.17 8.57 10.68
+v -16.55 8.57 12.98
+v -14.87 8.57 14.66
+v -12.57 8.57 15.28
+v -10.27 8.57 14.66
+v -8.58 8.57 12.98
+v -7.97 8.57 10.68
+v -8.58 8.57 8.38
+v -10.27 8.57 6.69
+v -12.57 8.57 6.08
+v -14.87 8.57 6.69
+v -16.55 8.57 8.38
+v -16.55 16.89 12.98
+v -17.17 16.89 10.68
+v -14.87 16.89 14.66
+v -12.57 16.89 15.28
+v -10.27 16.89 14.66
+v -8.58 16.89 12.98
+v -7.97 16.89 10.68
+v -8.58 16.89 8.38
+v -10.27 16.89 6.69
+v -12.57 16.89 6.08
+v -14.87 16.89 6.69
+v -16.55 16.89 8.38
+v -17.13 21.30 13.31
+v -17.47 21.30 13.51
+v -18.23 21.30 10.68
+v -17.83 21.30 10.68
+v -15.20 21.30 15.24
+v -15.40 21.30 15.58
+v -12.57 21.30 15.94
+v -12.57 21.30 16.34
+v -9.93 21.30 15.24
+v -9.73 21.30 15.58
+v -8.01 21.30 13.31
+v -7.66 21.30 13.51
+v -7.30 21.30 10.68
+v -6.90 21.30 10.68
+v -8.01 21.30 8.04
+v -7.66 21.30 7.84
+v -9.93 21.30 6.12
+v -9.73 21.30 5.77
+v -12.57 21.30 5.41
+v -12.57 21.30 5.01
+v -15.20 21.30 6.12
+v -15.40 21.30 5.77
+v -17.13 21.30 8.04
+v -17.47 21.30 7.84
+v -16.17 24.76 12.76
+v -16.72 24.76 10.68
+v -14.64 24.76 14.28
+v -12.57 24.76 14.83
+v -10.49 24.76 14.28
+v -8.97 24.76 12.76
+v -8.41 24.76 10.68
+v -8.97 24.76 8.60
+v -10.49 24.76 7.08
+v -12.57 24.76 6.52
+v -14.64 24.76 7.08
+v -16.17 24.76 8.60
+v -16.13 28.50 12.74
+v -16.69 28.50 10.68
+v -14.63 28.50 14.24
+v -12.57 28.50 14.80
+v -10.51 28.50 14.24
+v -9.00 28.50 12.74
+v -8.45 28.50 10.68
+v -9.00 28.50 8.62
+v -10.51 28.50 7.11
+v -12.57 28.50 6.56
+v -14.63 28.50 7.11
+v -16.13 28.50 8.62
+v -17.13 17.36 13.31
+v -17.83 17.36 10.68
+v -15.20 17.36 15.24
+v -12.57 17.36 15.94
+v -9.93 17.36 15.24
+v -8.01 17.36 13.31
+v -7.30 17.36 10.68
+v -8.01 17.36 8.04
+v -9.93 17.36 6.12
+v -12.57 17.36 5.41
+v -15.20 17.36 6.12
+v -17.13 17.36 8.04
+v -17.91 20.21 10.37
+v -17.91 19.23 10.37
+v -17.91 19.21 10.80
+v -17.91 20.52 10.80
+v -17.81 19.26 10.03
+v -17.81 19.12 10.03
+v -17.91 19.12 10.04
+v -17.91 19.26 10.04
+v -17.89 20.75 10.80
+v -17.84 20.29 10.15
+v -17.94 20.29 10.15
+v -17.98 20.75 10.81
+v -17.68 19.12 11.55
+v -17.68 19.26 11.55
+v -17.78 19.26 11.56
+v -17.78 19.12 11.56
+v -17.89 19.07 10.80
+v -17.73 19.12 11.45
+v -17.82 19.12 11.45
+v -17.98 19.07 10.81
+v -18.05 19.12 10.16
+v -18.08 19.23 10.39
+v -18.05 19.26 10.16
+v -17.98 20.21 10.38
+v -17.98 20.52 10.81
+v -17.93 19.26 11.46
+v -18.01 19.24 11.24
+v -17.93 19.12 11.46
+v -18.09 19.07 10.82
+v -18.09 19.21 10.82
+v -17.83 20.21 11.23
+v -17.83 19.24 11.23
+v -17.73 20.29 11.45
+v -17.82 20.29 11.45
+v -17.84 19.12 10.15
+v -17.94 19.12 10.15
+v -17.90 20.21 11.23
+v -17.98 19.23 10.38
+v -17.90 19.24 11.23
+v -17.98 19.21 10.81
+v -17.82 19.26 11.45
+v -17.73 19.26 11.45
+v -17.84 19.26 10.15
+v -17.94 19.26 10.15
+v -18.02 19.12 10.05
+v -18.02 19.26 10.05
+v -17.88 19.26 11.57
+v -17.88 19.12 11.57
+v -12.87 20.21 16.02
+v -12.87 19.23 16.02
+v -12.44 19.21 16.02
+v -12.44 20.52 16.02
+v -13.21 19.26 15.92
+v -13.21 19.12 15.92
+v -13.20 19.12 16.02
+v -13.20 19.26 16.02
+v -12.44 20.75 16.00
+v -13.10 20.29 15.95
+v -13.09 20.29 16.05
+v -12.43 20.75 16.10
+v -11.69 19.12 15.79
+v -11.69 19.26 15.79
+v -11.68 19.26 15.89
+v -11.68 19.12 15.89
+v -12.44 19.07 16.00
+v -11.80 19.12 15.84
+v -11.79 19.12 15.94
+v -12.43 19.07 16.10
+v -13.08 19.12 16.16
+v -12.85 19.23 16.20
+v -13.08 19.26 16.16
+v -12.86 20.21 16.09
+v -12.43 20.52 16.10
+v -11.78 19.26 16.04
+v -12.00 19.24 16.12
+v -11.78 19.12 16.04
+v -12.42 19.07 16.20
+v -12.42 19.21 16.20
+v -12.01 20.21 15.94
+v -12.01 19.24 15.94
+v -11.80 20.29 15.84
+v -11.79 20.29 15.94
+v -13.10 19.12 15.95
+v -13.09 19.12 16.05
+v -12.01 20.21 16.01
+v -12.86 19.23 16.09
+v -12.01 19.24 16.01
+v -12.43 19.21 16.10
+v -11.79 19.26 15.94
+v -11.80 19.26 15.84
+v -13.10 19.26 15.95
+v -13.09 19.26 16.05
+v -13.19 19.12 16.13
+v -13.19 19.26 16.13
+v -11.67 19.26 16.00
+v -11.67 19.12 16.00
+v -9.24 23.34 12.52
+v -8.56 24.92 12.99
+v -9.10 24.92 13.76
+v -9.78 23.34 13.29
+v -9.53 28.41 12.29
+v -8.63 28.41 12.92
+v -9.18 28.41 13.70
+v -10.08 28.41 13.07
+v -12.87 27.21 14.81
+v -12.87 26.24 14.81
+v -12.44 26.21 14.82
+v -12.44 27.52 14.82
+v -13.21 26.26 14.72
+v -13.21 26.12 14.72
+v -13.20 26.12 14.82
+v -13.20 26.26 14.82
+v -12.44 27.75 14.80
+v -13.10 27.30 14.75
+v -13.09 27.30 14.85
+v -12.43 27.75 14.89
+v -11.69 26.12 14.59
+v -11.69 26.26 14.59
+v -11.68 26.26 14.69
+v -11.68 26.12 14.69
+v -12.44 26.07 14.80
+v -11.80 26.12 14.64
+v -11.79 26.12 14.73
+v -12.43 26.07 14.89
+v -13.08 26.12 14.96
+v -12.85 26.24 14.99
+v -13.08 26.26 14.96
+v -12.86 27.21 14.89
+v -12.43 27.52 14.89
+v -11.78 26.26 14.84
+v -12.00 26.25 14.92
+v -11.78 26.12 14.84
+v -12.42 26.07 15.00
+v -12.42 26.21 15.00
+v -12.01 27.21 14.74
+v -12.01 26.25 14.74
+v -11.80 27.30 14.64
+v -11.79 27.30 14.73
+v -13.10 26.12 14.75
+v -13.09 26.12 14.85
+v -12.01 27.21 14.81
+v -12.86 26.24 14.89
+v -12.01 26.25 14.81
+v -12.43 26.21 14.89
+v -11.79 26.26 14.73
+v -11.80 26.26 14.64
+v -13.10 26.26 14.75
+v -13.09 26.26 14.85
+v -13.19 26.12 14.93
+v -13.19 26.26 14.93
+v -11.67 26.26 14.79
+v -11.67 26.12 14.79
+v -14.41 23.34 14.01
+v -14.88 24.92 14.68
+v -15.65 24.92 14.14
+v -15.18 23.34 13.46
+v -14.18 28.41 13.71
+v -14.81 28.41 14.61
+v -15.59 28.41 14.07
+v -14.96 28.41 13.17
+v -8.43 27.21 10.98
+v -8.43 26.24 10.98
+v -8.42 26.21 10.55
+v -8.42 27.52 10.55
+v -8.52 26.26 11.32
+v -8.52 26.12 11.32
+v -8.42 26.12 11.31
+v -8.42 26.26 11.31
+v -8.45 27.75 10.55
+v -8.49 27.30 11.21
+v -8.39 27.30 11.20
+v -8.35 27.75 10.54
+v -8.65 26.12 9.80
+v -8.65 26.26 9.80
+v -8.56 26.26 9.79
+v -8.56 26.12 9.79
+v -8.45 26.07 10.55
+v -8.61 26.12 9.91
+v -8.51 26.12 9.90
+v -8.35 26.07 10.54
+v -8.29 26.12 11.19
+v -8.25 26.24 10.96
+v -8.29 26.26 11.19
+v -8.35 27.21 10.97
+v -8.35 27.52 10.54
+v -8.40 26.26 9.89
+v -8.32 26.25 10.11
+v -8.40 26.12 9.89
+v -8.24 26.07 10.53
+v -8.24 26.21 10.53
+v -8.50 27.21 10.13
+v -8.50 26.25 10.13
+v -8.61 27.30 9.91
+v -8.51 27.30 9.90
+v -8.49 26.12 11.21
+v -8.39 26.12 11.20
+v -8.43 27.21 10.12
+v -8.35 26.24 10.97
+v -8.43 26.25 10.12
+v -8.35 26.21 10.54
+v -8.51 26.26 9.90
+v -8.61 26.26 9.91
+v -8.49 26.26 11.21
+v -8.39 26.26 11.20
+v -8.32 26.12 11.30
+v -8.32 26.26 11.30
+v -8.45 26.26 9.78
+v -8.45 26.12 9.78
+v -13.04 12.70 6.81
+v -13.04 14.28 5.99
+v -12.09 14.28 5.99
+v -12.09 12.70 6.81
+v -13.04 17.34 6.74
+v -13.04 17.34 5.64
+v -12.09 17.34 5.64
+v -12.09 17.34 6.74
+v -8.98 12.70 12.20
+v -8.27 14.28 12.61
+v -8.74 14.28 13.43
+v -9.46 12.70 13.02
+v -8.92 17.34 12.24
+v -7.97 17.34 12.79
+v -8.44 17.34 13.61
+v -9.39 17.34 13.06
+v -12.09 12.70 14.54
+v -12.09 14.28 15.36
+v -13.04 14.28 15.36
+v -13.04 12.70 14.54
+v -12.09 17.34 14.62
+v -12.09 17.34 15.71
+v -13.04 17.34 15.71
+v -13.04 17.34 14.62
+v -10.73 23.34 7.35
+v -10.25 24.92 6.67
+v -9.48 24.92 7.22
+v -9.95 23.34 7.89
+v -10.95 28.41 7.65
+v -10.32 28.41 6.74
+v -9.55 28.41 7.29
+v -10.18 28.41 8.19
+v -9.46 12.70 8.34
+v -8.74 14.28 7.92
+v -8.27 14.28 8.74
+v -8.98 12.70 9.15
+v -9.39 17.34 8.30
+v -8.44 17.34 7.75
+v -7.97 17.34 8.57
+v -8.92 17.34 9.12
+v -7.23 20.21 10.98
+v -7.23 19.23 10.98
+v -7.22 19.21 10.55
+v -7.22 20.52 10.55
+v -7.32 19.26 11.32
+v -7.32 19.12 11.32
+v -7.22 19.12 11.31
+v -7.22 19.26 11.31
+v -7.24 20.75 10.55
+v -7.29 20.29 11.21
+v -7.19 20.29 11.20
+v -7.15 20.75 10.54
+v -7.45 19.12 9.80
+v -7.45 19.26 9.80
+v -7.35 19.26 9.79
+v -7.35 19.12 9.79
+v -7.24 19.07 10.55
+v -7.41 19.12 9.91
+v -7.31 19.12 9.90
+v -7.15 19.07 10.54
+v -7.09 19.12 11.19
+v -7.05 19.23 10.96
+v -7.09 19.26 11.19
+v -7.15 20.21 10.97
+v -7.15 20.52 10.54
+v -7.20 19.26 9.89
+v -7.12 19.24 10.11
+v -7.20 19.12 9.89
+v -7.04 19.07 10.53
+v -7.04 19.21 10.53
+v -7.30 20.21 10.13
+v -7.30 19.24 10.13
+v -7.41 20.29 9.91
+v -7.31 20.29 9.90
+v -7.29 19.12 11.21
+v -7.19 19.12 11.20
+v -7.23 20.21 10.12
+v -7.15 19.23 10.97
+v -7.23 19.24 10.12
+v -7.15 19.21 10.54
+v -7.31 19.26 9.90
+v -7.41 19.26 9.91
+v -7.29 19.26 11.21
+v -7.19 19.26 11.20
+v -7.11 19.12 11.30
+v -7.11 19.26 11.30
+v -7.25 19.26 9.78
+v -7.25 19.12 9.78
+v -12.26 27.21 6.54
+v -12.26 26.24 6.54
+v -12.69 26.21 6.53
+v -12.69 27.52 6.53
+v -11.92 26.26 6.63
+v -11.92 26.12 6.63
+v -11.93 26.12 6.53
+v -11.93 26.26 6.53
+v -12.69 27.75 6.56
+v -12.03 27.30 6.60
+v -12.04 27.30 6.51
+v -12.70 27.75 6.46
+v -13.44 26.12 6.76
+v -13.44 26.26 6.76
+v -13.45 26.26 6.67
+v -13.45 26.12 6.67
+v -12.69 26.07 6.56
+v -13.34 26.12 6.72
+v -13.34 26.12 6.62
+v -12.70 26.07 6.46
+v -12.05 26.12 6.40
+v -12.28 26.24 6.36
+v -12.05 26.26 6.40
+v -12.27 27.21 6.47
+v -12.70 27.52 6.46
+v -13.35 26.26 6.51
+v -13.13 26.25 6.43
+v -13.35 26.12 6.51
+v -12.71 26.07 6.35
+v -12.71 26.21 6.35
+v -13.12 27.21 6.61
+v -13.12 26.25 6.61
+v -13.34 27.30 6.72
+v -13.34 27.30 6.62
+v -12.03 26.12 6.60
+v -12.04 26.12 6.51
+v -13.12 27.21 6.54
+v -12.27 26.24 6.47
+v -13.12 26.25 6.54
+v -12.70 26.21 6.46
+v -13.34 26.26 6.62
+v -13.34 26.26 6.72
+v -12.03 26.26 6.60
+v -12.04 26.26 6.51
+v -11.94 26.12 6.43
+v -11.94 26.26 6.43
+v -13.46 26.26 6.56
+v -13.46 26.12 6.56
+v -16.15 12.70 9.15
+v -16.86 14.28 8.74
+v -16.39 14.28 7.92
+v -15.67 12.70 8.34
+v -16.21 17.34 9.12
+v -17.17 17.34 8.57
+v -16.69 17.34 7.75
+v -15.74 17.34 8.30
+v -12.26 20.21 5.34
+v -12.26 19.23 5.34
+v -12.69 19.21 5.33
+v -12.69 20.52 5.33
+v -11.92 19.26 5.43
+v -11.92 19.12 5.43
+v -11.93 19.12 5.33
+v -11.93 19.26 5.33
+v -12.69 20.75 5.36
+v -12.03 20.29 5.40
+v -12.04 20.29 5.30
+v -12.70 20.75 5.26
+v -13.44 19.12 5.56
+v -13.44 19.26 5.56
+v -13.45 19.26 5.47
+v -13.45 19.12 5.47
+v -12.69 19.07 5.36
+v -13.34 19.12 5.52
+v -13.34 19.12 5.42
+v -12.70 19.07 5.26
+v -12.05 19.12 5.20
+v -12.28 19.23 5.16
+v -12.05 19.26 5.20
+v -12.27 20.21 5.26
+v -12.70 20.52 5.26
+v -13.35 19.26 5.31
+v -13.13 19.24 5.23
+v -13.35 19.12 5.31
+v -12.71 19.07 5.15
+v -12.71 19.21 5.15
+v -13.12 20.21 5.41
+v -13.12 19.24 5.41
+v -13.34 20.29 5.52
+v -13.34 20.29 5.42
+v -12.03 19.12 5.40
+v -12.04 19.12 5.30
+v -13.12 20.21 5.34
+v -12.27 19.23 5.26
+v -13.12 19.24 5.34
+v -12.70 19.21 5.26
+v -13.34 19.26 5.42
+v -13.34 19.26 5.52
+v -12.03 19.26 5.40
+v -12.04 19.26 5.30
+v -11.94 19.12 5.23
+v -11.94 19.26 5.23
+v -13.46 19.26 5.36
+v -13.46 19.12 5.36
+v -15.89 23.34 8.84
+v -16.57 24.92 8.36
+v -16.03 24.92 7.59
+v -15.35 23.34 8.06
+v -15.60 28.41 9.06
+v -16.50 28.41 8.43
+v -15.96 28.41 7.66
+v -15.06 28.41 8.29
+v -16.70 27.21 10.37
+v -16.70 26.24 10.37
+v -16.71 26.21 10.80
+v -16.71 27.52 10.80
+v -16.61 26.26 10.03
+v -16.61 26.12 10.03
+v -16.71 26.12 10.04
+v -16.71 26.26 10.04
+v -16.69 27.75 10.80
+v -16.64 27.30 10.15
+v -16.74 27.30 10.15
+v -16.78 27.75 10.81
+v -16.48 26.12 11.55
+v -16.48 26.26 11.55
+v -16.58 26.26 11.56
+v -16.58 26.12 11.56
+v -16.69 26.07 10.80
+v -16.53 26.12 11.45
+v -16.62 26.12 11.45
+v -16.78 26.07 10.81
+v -16.84 26.12 10.16
+v -16.88 26.24 10.39
+v -16.84 26.26 10.16
+v -16.78 27.21 10.38
+v -16.78 27.52 10.81
+v -16.73 26.26 11.46
+v -16.81 26.25 11.24
+v -16.73 26.12 11.46
+v -16.89 26.07 10.82
+v -16.89 26.21 10.82
+v -16.63 27.21 11.23
+v -16.63 26.25 11.23
+v -16.53 27.30 11.45
+v -16.62 27.30 11.45
+v -16.64 26.12 10.15
+v -16.74 26.12 10.15
+v -16.70 27.21 11.23
+v -16.78 26.24 10.38
+v -16.70 26.25 11.23
+v -16.78 26.21 10.81
+v -16.62 26.26 11.45
+v -16.53 26.26 11.45
+v -16.64 26.26 10.15
+v -16.74 26.26 10.15
+v -16.82 26.12 10.05
+v -16.82 26.26 10.05
+v -16.68 26.26 11.57
+v -16.68 26.12 11.57
+v -15.67 12.70 13.02
+v -16.39 14.28 13.43
+v -16.86 14.28 12.61
+v -16.15 12.70 12.20
+v -15.74 17.34 13.06
+v -16.69 17.34 13.61
+v -17.17 17.34 12.79
+v -16.21 17.34 12.24
+v -16.83 28.50 13.14
+v -16.83 30.29 13.14
+v -17.49 30.29 10.68
+v -17.49 28.50 10.68
+v -15.03 28.50 14.94
+v -15.03 30.29 14.94
+v -12.57 28.50 15.60
+v -12.57 30.29 15.60
+v -10.10 28.50 14.94
+v -10.10 30.29 14.94
+v -8.30 28.50 13.14
+v -8.30 30.29 13.14
+v -7.64 28.50 10.68
+v -7.64 30.29 10.68
+v -8.30 28.50 8.21
+v -8.30 30.29 8.21
+v -10.10 28.50 6.41
+v -10.10 30.29 6.41
+v -12.57 28.50 5.75
+v -12.57 30.29 5.75
+v -15.03 28.50 6.41
+v -15.03 30.29 6.41
+v -16.83 28.50 8.21
+v -16.83 30.29 8.21
+v -16.21 30.29 12.78
+v -16.78 30.29 10.68
+v -15.03 30.90 14.94
+v -14.67 30.90 14.32
+v -16.21 30.90 12.78
+v -16.83 30.90 13.14
+v -12.57 30.29 14.89
+v -14.67 30.29 14.32
+v -10.10 30.90 14.94
+v -10.46 30.90 14.32
+v -12.57 30.90 14.89
+v -12.57 30.90 15.60
+v -8.92 30.29 12.78
+v -10.46 30.29 14.32
+v -7.64 30.90 10.68
+v -8.36 30.90 10.68
+v -8.92 30.90 12.78
+v -8.30 30.90 13.14
+v -8.92 30.29 8.57
+v -8.36 30.29 10.68
+v -10.10 30.90 6.41
+v -10.46 30.90 7.03
+v -8.92 30.90 8.57
+v -8.30 30.90 8.21
+v -12.57 30.29 6.47
+v -10.46 30.29 7.03
+v -15.03 30.90 6.41
+v -14.67 30.90 7.03
+v -12.57 30.90 6.47
+v -12.57 30.90 5.75
+v -16.21 30.29 8.57
+v -14.67 30.29 7.03
+v -17.49 30.90 10.68
+v -16.78 30.90 10.68
+v -16.21 30.90 8.57
+v -16.83 30.90 8.21
+v -16.21 29.42 12.78
+v -16.78 29.42 10.68
+v -14.67 29.42 14.32
+v -12.57 29.42 14.89
+v -10.46 29.42 14.32
+v -8.92 29.42 12.78
+v -8.36 29.42 10.68
+v -8.92 29.42 8.57
+v -10.46 29.42 7.03
+v -12.57 29.42 6.47
+v -14.67 29.42 7.03
+v -16.21 29.42 8.57
+v -12.57 29.42 10.68
+v 17.17 7.76 10.68
+v 16.55 7.76 12.98
+v 16.55 0.00 12.98
+v 17.17 0.00 10.68
+v 14.87 7.76 14.66
+v 14.87 0.00 14.66
+v 12.57 7.76 15.28
+v 12.57 0.00 15.28
+v 10.27 7.76 14.66
+v 10.27 0.00 14.66
+v 8.58 7.76 12.98
+v 8.58 0.00 12.98
+v 7.97 7.76 10.68
+v 7.97 0.00 10.68
+v 8.58 7.76 8.38
+v 8.58 0.00 8.38
+v 10.27 7.76 6.69
+v 10.27 0.00 6.69
+v 12.57 7.76 6.08
+v 12.57 0.00 6.08
+v 14.87 7.76 6.69
+v 14.87 0.00 6.69
+v 16.55 7.76 8.38
+v 16.55 0.00 8.38
+v 16.78 7.76 13.11
+v 17.43 7.76 10.68
+v 17.43 8.57 10.68
+v 16.78 8.57 13.11
+v 15.00 7.76 14.89
+v 15.00 8.57 14.89
+v 12.57 7.76 15.54
+v 12.57 8.57 15.54
+v 10.13 7.76 14.89
+v 10.13 8.57 14.89
+v 8.35 7.76 13.11
+v 8.35 8.57 13.11
+v 7.70 7.76 10.68
+v 7.70 8.57 10.68
+v 8.35 7.76 8.24
+v 8.35 8.57 8.24
+v 10.13 7.76 6.46
+v 10.13 8.57 6.46
+v 12.57 7.76 5.81
+v 12.57 8.57 5.81
+v 15.00 7.76 6.46
+v 15.00 8.57 6.46
+v 16.78 7.76 8.24
+v 16.78 8.57 8.24
+v 17.17 8.57 10.68
+v 16.55 8.57 12.98
+v 14.87 8.57 14.66
+v 12.57 8.57 15.28
+v 10.27 8.57 14.66
+v 8.58 8.57 12.98
+v 7.97 8.57 10.68
+v 8.58 8.57 8.38
+v 10.27 8.57 6.69
+v 12.57 8.57 6.08
+v 14.87 8.57 6.69
+v 16.55 8.57 8.38
+v 17.17 16.89 10.68
+v 16.55 16.89 12.98
+v 14.87 16.89 14.66
+v 12.57 16.89 15.28
+v 10.27 16.89 14.66
+v 8.58 16.89 12.98
+v 7.97 16.89 10.68
+v 8.58 16.89 8.38
+v 10.27 16.89 6.69
+v 12.57 16.89 6.08
+v 14.87 16.89 6.69
+v 16.55 16.89 8.38
+v 17.13 21.30 13.31
+v 17.83 21.30 10.68
+v 18.23 21.30 10.68
+v 17.47 21.30 13.51
+v 15.20 21.30 15.24
+v 15.40 21.30 15.58
+v 12.57 21.30 15.94
+v 12.57 21.30 16.34
+v 9.93 21.30 15.24
+v 9.73 21.30 15.58
+v 8.01 21.30 13.31
+v 7.66 21.30 13.51
+v 7.30 21.30 10.68
+v 6.90 21.30 10.68
+v 8.01 21.30 8.04
+v 7.66 21.30 7.84
+v 9.93 21.30 6.12
+v 9.73 21.30 5.77
+v 12.57 21.30 5.41
+v 12.57 21.30 5.01
+v 15.20 21.30 6.12
+v 15.40 21.30 5.77
+v 17.13 21.30 8.04
+v 17.47 21.30 7.84
+v 16.72 24.76 10.68
+v 16.17 24.76 12.76
+v 14.64 24.76 14.28
+v 12.57 24.76 14.83
+v 10.49 24.76 14.28
+v 8.97 24.76 12.76
+v 8.41 24.76 10.68
+v 8.97 24.76 8.60
+v 10.49 24.76 7.08
+v 12.57 24.76 6.52
+v 14.64 24.76 7.08
+v 16.17 24.76 8.60
+v 16.69 28.50 10.68
+v 16.13 28.50 12.74
+v 14.63 28.50 14.24
+v 12.57 28.50 14.80
+v 10.51 28.50 14.24
+v 9.00 28.50 12.74
+v 8.45 28.50 10.68
+v 9.00 28.50 8.62
+v 10.51 28.50 7.11
+v 12.57 28.50 6.56
+v 14.63 28.50 7.11
+v 16.13 28.50 8.62
+v 17.83 17.36 10.68
+v 17.13 17.36 13.31
+v 15.20 17.36 15.24
+v 12.57 17.36 15.94
+v 9.93 17.36 15.24
+v 8.01 17.36 13.31
+v 7.30 17.36 10.68
+v 8.01 17.36 8.04
+v 9.93 17.36 6.12
+v 12.57 17.36 5.41
+v 15.20 17.36 6.12
+v 17.13 17.36 8.04
+v 17.91 20.21 10.37
+v 17.91 20.52 10.80
+v 17.91 19.21 10.80
+v 17.91 19.23 10.37
+v 17.81 19.26 10.03
+v 17.91 19.26 10.04
+v 17.91 19.12 10.04
+v 17.81 19.12 10.03
+v 17.89 20.75 10.80
+v 17.98 20.75 10.81
+v 17.94 20.29 10.15
+v 17.84 20.29 10.15
+v 17.68 19.12 11.55
+v 17.78 19.12 11.56
+v 17.78 19.26 11.56
+v 17.68 19.26 11.55
+v 17.89 19.07 10.80
+v 17.98 19.07 10.81
+v 17.82 19.12 11.45
+v 17.73 19.12 11.45
+v 18.05 19.12 10.16
+v 18.05 19.26 10.16
+v 18.08 19.23 10.39
+v 17.98 20.52 10.81
+v 17.98 20.21 10.38
+v 17.93 19.26 11.46
+v 17.93 19.12 11.46
+v 18.01 19.24 11.24
+v 18.09 19.07 10.82
+v 18.09 19.21 10.82
+v 17.83 20.21 11.23
+v 17.83 19.24 11.23
+v 17.73 20.29 11.45
+v 17.82 20.29 11.45
+v 17.84 19.12 10.15
+v 17.94 19.12 10.15
+v 17.90 20.21 11.23
+v 17.98 19.23 10.38
+v 17.90 19.24 11.23
+v 17.98 19.21 10.81
+v 17.82 19.26 11.45
+v 17.73 19.26 11.45
+v 17.94 19.26 10.15
+v 17.84 19.26 10.15
+v 18.02 19.26 10.05
+v 18.02 19.12 10.05
+v 17.88 19.12 11.57
+v 17.88 19.26 11.57
+v 12.87 20.21 16.02
+v 12.44 20.52 16.02
+v 12.44 19.21 16.02
+v 12.87 19.23 16.02
+v 13.21 19.26 15.92
+v 13.20 19.26 16.02
+v 13.20 19.12 16.02
+v 13.21 19.12 15.92
+v 12.44 20.75 16.00
+v 12.43 20.75 16.10
+v 13.09 20.29 16.05
+v 13.10 20.29 15.95
+v 11.69 19.12 15.79
+v 11.68 19.12 15.89
+v 11.68 19.26 15.89
+v 11.69 19.26 15.79
+v 12.44 19.07 16.00
+v 12.43 19.07 16.10
+v 11.79 19.12 15.94
+v 11.80 19.12 15.84
+v 13.08 19.12 16.16
+v 13.08 19.26 16.16
+v 12.85 19.23 16.20
+v 12.43 20.52 16.10
+v 12.86 20.21 16.09
+v 11.78 19.26 16.04
+v 11.78 19.12 16.04
+v 12.00 19.24 16.12
+v 12.42 19.07 16.20
+v 12.42 19.21 16.20
+v 12.01 20.21 15.94
+v 12.01 19.24 15.94
+v 11.80 20.29 15.84
+v 11.79 20.29 15.94
+v 13.10 19.12 15.95
+v 13.09 19.12 16.05
+v 12.01 20.21 16.01
+v 12.86 19.23 16.09
+v 12.01 19.24 16.01
+v 12.43 19.21 16.10
+v 11.79 19.26 15.94
+v 11.80 19.26 15.84
+v 13.09 19.26 16.05
+v 13.10 19.26 15.95
+v 13.19 19.26 16.13
+v 13.19 19.12 16.13
+v 11.67 19.12 16.00
+v 11.67 19.26 16.00
+v 9.24 23.34 12.52
+v 9.78 23.34 13.29
+v 9.10 24.92 13.76
+v 8.56 24.92 12.99
+v 8.63 28.41 12.92
+v 9.53 28.41 12.29
+v 9.18 28.41 13.70
+v 10.08 28.41 13.07
+v 12.87 27.21 14.81
+v 12.44 27.52 14.82
+v 12.44 26.21 14.82
+v 12.87 26.24 14.81
+v 13.21 26.26 14.72
+v 13.20 26.26 14.82
+v 13.20 26.12 14.82
+v 13.21 26.12 14.72
+v 12.44 27.75 14.80
+v 12.43 27.75 14.89
+v 13.09 27.30 14.85
+v 13.10 27.30 14.75
+v 11.69 26.12 14.59
+v 11.68 26.12 14.69
+v 11.68 26.26 14.69
+v 11.69 26.26 14.59
+v 12.44 26.07 14.80
+v 12.43 26.07 14.89
+v 11.79 26.12 14.73
+v 11.80 26.12 14.64
+v 13.08 26.12 14.96
+v 13.08 26.26 14.96
+v 12.85 26.24 14.99
+v 12.43 27.52 14.89
+v 12.86 27.21 14.89
+v 11.78 26.26 14.84
+v 11.78 26.12 14.84
+v 12.00 26.25 14.92
+v 12.42 26.07 15.00
+v 12.42 26.21 15.00
+v 12.01 27.21 14.74
+v 12.01 26.25 14.74
+v 11.80 27.30 14.64
+v 11.79 27.30 14.73
+v 13.10 26.12 14.75
+v 13.09 26.12 14.85
+v 12.01 27.21 14.81
+v 12.86 26.24 14.89
+v 12.01 26.25 14.81
+v 12.43 26.21 14.89
+v 11.79 26.26 14.73
+v 11.80 26.26 14.64
+v 13.09 26.26 14.85
+v 13.10 26.26 14.75
+v 13.19 26.26 14.93
+v 13.19 26.12 14.93
+v 11.67 26.12 14.79
+v 11.67 26.26 14.79
+v 14.41 23.34 14.01
+v 15.18 23.34 13.46
+v 15.65 24.92 14.14
+v 14.88 24.92 14.68
+v 14.81 28.41 14.61
+v 14.18 28.41 13.71
+v 15.59 28.41 14.07
+v 14.96 28.41 13.17
+v 8.43 27.21 10.98
+v 8.42 27.52 10.55
+v 8.42 26.21 10.55
+v 8.43 26.24 10.98
+v 8.52 26.26 11.32
+v 8.42 26.26 11.31
+v 8.42 26.12 11.31
+v 8.52 26.12 11.32
+v 8.45 27.75 10.55
+v 8.35 27.75 10.54
+v 8.39 27.30 11.20
+v 8.49 27.30 11.21
+v 8.65 26.12 9.80
+v 8.56 26.12 9.79
+v 8.56 26.26 9.79
+v 8.65 26.26 9.80
+v 8.45 26.07 10.55
+v 8.35 26.07 10.54
+v 8.51 26.12 9.90
+v 8.61 26.12 9.91
+v 8.29 26.12 11.19
+v 8.29 26.26 11.19
+v 8.25 26.24 10.96
+v 8.35 27.52 10.54
+v 8.35 27.21 10.97
+v 8.40 26.26 9.89
+v 8.40 26.12 9.89
+v 8.32 26.25 10.11
+v 8.24 26.07 10.53
+v 8.24 26.21 10.53
+v 8.50 27.21 10.13
+v 8.50 26.25 10.13
+v 8.61 27.30 9.91
+v 8.51 27.30 9.90
+v 8.49 26.12 11.21
+v 8.39 26.12 11.20
+v 8.43 27.21 10.12
+v 8.35 26.24 10.97
+v 8.43 26.25 10.12
+v 8.35 26.21 10.54
+v 8.51 26.26 9.90
+v 8.61 26.26 9.91
+v 8.39 26.26 11.20
+v 8.49 26.26 11.21
+v 8.32 26.26 11.30
+v 8.32 26.12 11.30
+v 8.45 26.12 9.78
+v 8.45 26.26 9.78
+v 13.04 12.70 6.81
+v 12.09 12.70 6.81
+v 12.09 14.28 5.99
+v 13.04 14.28 5.99
+v 13.04 17.34 5.64
+v 13.04 17.34 6.74
+v 12.09 17.34 5.64
+v 12.09 17.34 6.74
+v 8.98 12.70 12.20
+v 9.46 12.70 13.02
+v 8.74 14.28 13.43
+v 8.27 14.28 12.61
+v 7.97 17.34 12.79
+v 8.92 17.34 12.24
+v 8.44 17.34 13.61
+v 9.39 17.34 13.06
+v 12.09 12.70 14.54
+v 13.04 12.70 14.54
+v 13.04 14.28 15.36
+v 12.09 14.28 15.36
+v 12.09 17.34 15.71
+v 12.09 17.34 14.62
+v 13.04 17.34 15.71
+v 13.04 17.34 14.62
+v 10.73 23.34 7.35
+v 9.95 23.34 7.89
+v 9.48 24.92 7.22
+v 10.25 24.92 6.67
+v 10.32 28.41 6.74
+v 10.95 28.41 7.65
+v 9.55 28.41 7.29
+v 10.18 28.41 8.19
+v 9.46 12.70 8.34
+v 8.98 12.70 9.15
+v 8.27 14.28 8.74
+v 8.74 14.28 7.92
+v 8.44 17.34 7.75
+v 9.39 17.34 8.30
+v 7.97 17.34 8.57
+v 8.92 17.34 9.12
+v 7.23 20.21 10.98
+v 7.22 20.52 10.55
+v 7.22 19.21 10.55
+v 7.23 19.23 10.98
+v 7.32 19.26 11.32
+v 7.22 19.26 11.31
+v 7.22 19.12 11.31
+v 7.32 19.12 11.32
+v 7.24 20.75 10.55
+v 7.15 20.75 10.54
+v 7.19 20.29 11.20
+v 7.29 20.29 11.21
+v 7.45 19.12 9.80
+v 7.35 19.12 9.79
+v 7.35 19.26 9.79
+v 7.45 19.26 9.80
+v 7.24 19.07 10.55
+v 7.15 19.07 10.54
+v 7.31 19.12 9.90
+v 7.41 19.12 9.91
+v 7.09 19.12 11.19
+v 7.09 19.26 11.19
+v 7.05 19.23 10.96
+v 7.15 20.52 10.54
+v 7.15 20.21 10.97
+v 7.20 19.26 9.89
+v 7.20 19.12 9.89
+v 7.12 19.24 10.11
+v 7.04 19.07 10.53
+v 7.04 19.21 10.53
+v 7.30 20.21 10.13
+v 7.30 19.24 10.13
+v 7.41 20.29 9.91
+v 7.31 20.29 9.90
+v 7.29 19.12 11.21
+v 7.19 19.12 11.20
+v 7.23 20.21 10.12
+v 7.15 19.23 10.97
+v 7.23 19.24 10.12
+v 7.15 19.21 10.54
+v 7.31 19.26 9.90
+v 7.41 19.26 9.91
+v 7.19 19.26 11.20
+v 7.29 19.26 11.21
+v 7.11 19.26 11.30
+v 7.11 19.12 11.30
+v 7.25 19.12 9.78
+v 7.25 19.26 9.78
+v 12.26 27.21 6.54
+v 12.69 27.52 6.53
+v 12.69 26.21 6.53
+v 12.26 26.24 6.54
+v 11.92 26.26 6.63
+v 11.93 26.26 6.53
+v 11.93 26.12 6.53
+v 11.92 26.12 6.63
+v 12.69 27.75 6.56
+v 12.70 27.75 6.46
+v 12.04 27.30 6.51
+v 12.03 27.30 6.60
+v 13.44 26.12 6.76
+v 13.45 26.12 6.67
+v 13.45 26.26 6.67
+v 13.44 26.26 6.76
+v 12.69 26.07 6.56
+v 12.70 26.07 6.46
+v 13.34 26.12 6.62
+v 13.34 26.12 6.72
+v 12.05 26.12 6.40
+v 12.05 26.26 6.40
+v 12.28 26.24 6.36
+v 12.70 27.52 6.46
+v 12.27 27.21 6.47
+v 13.35 26.26 6.51
+v 13.35 26.12 6.51
+v 13.13 26.25 6.43
+v 12.71 26.07 6.35
+v 12.71 26.21 6.35
+v 13.12 27.21 6.61
+v 13.12 26.25 6.61
+v 13.34 27.30 6.72
+v 13.34 27.30 6.62
+v 12.03 26.12 6.60
+v 12.04 26.12 6.51
+v 13.12 27.21 6.54
+v 12.27 26.24 6.47
+v 13.12 26.25 6.54
+v 12.70 26.21 6.46
+v 13.34 26.26 6.62
+v 13.34 26.26 6.72
+v 12.04 26.26 6.51
+v 12.03 26.26 6.60
+v 11.94 26.26 6.43
+v 11.94 26.12 6.43
+v 13.46 26.12 6.56
+v 13.46 26.26 6.56
+v 16.15 12.70 9.15
+v 15.67 12.70 8.34
+v 16.39 14.28 7.92
+v 16.86 14.28 8.74
+v 17.17 17.34 8.57
+v 16.21 17.34 9.12
+v 16.69 17.34 7.75
+v 15.74 17.34 8.30
+v 12.26 20.21 5.34
+v 12.69 20.52 5.33
+v 12.69 19.21 5.33
+v 12.26 19.23 5.34
+v 11.92 19.26 5.43
+v 11.93 19.26 5.33
+v 11.93 19.12 5.33
+v 11.92 19.12 5.43
+v 12.69 20.75 5.36
+v 12.70 20.75 5.26
+v 12.04 20.29 5.30
+v 12.03 20.29 5.40
+v 13.44 19.12 5.56
+v 13.45 19.12 5.47
+v 13.45 19.26 5.47
+v 13.44 19.26 5.56
+v 12.69 19.07 5.36
+v 12.70 19.07 5.26
+v 13.34 19.12 5.42
+v 13.34 19.12 5.52
+v 12.05 19.12 5.20
+v 12.05 19.26 5.20
+v 12.28 19.23 5.16
+v 12.70 20.52 5.26
+v 12.27 20.21 5.26
+v 13.35 19.26 5.31
+v 13.35 19.12 5.31
+v 13.13 19.24 5.23
+v 12.71 19.07 5.15
+v 12.71 19.21 5.15
+v 13.12 20.21 5.41
+v 13.12 19.24 5.41
+v 13.34 20.29 5.52
+v 13.34 20.29 5.42
+v 12.03 19.12 5.40
+v 12.04 19.12 5.30
+v 13.12 20.21 5.34
+v 12.27 19.23 5.26
+v 13.12 19.24 5.34
+v 12.70 19.21 5.26
+v 13.34 19.26 5.42
+v 13.34 19.26 5.52
+v 12.04 19.26 5.30
+v 12.03 19.26 5.40
+v 11.94 19.26 5.23
+v 11.94 19.12 5.23
+v 13.46 19.12 5.36
+v 13.46 19.26 5.36
+v 15.89 23.34 8.84
+v 15.35 23.34 8.06
+v 16.03 24.92 7.59
+v 16.57 24.92 8.36
+v 16.50 28.41 8.43
+v 15.60 28.41 9.06
+v 15.96 28.41 7.66
+v 15.06 28.41 8.29
+v 16.70 27.21 10.37
+v 16.71 27.52 10.80
+v 16.71 26.21 10.80
+v 16.70 26.24 10.37
+v 16.61 26.26 10.03
+v 16.71 26.26 10.04
+v 16.71 26.12 10.04
+v 16.61 26.12 10.03
+v 16.69 27.75 10.80
+v 16.78 27.75 10.81
+v 16.74 27.30 10.15
+v 16.64 27.30 10.15
+v 16.48 26.12 11.55
+v 16.58 26.12 11.56
+v 16.58 26.26 11.56
+v 16.48 26.26 11.55
+v 16.69 26.07 10.80
+v 16.78 26.07 10.81
+v 16.62 26.12 11.45
+v 16.53 26.12 11.45
+v 16.84 26.12 10.16
+v 16.84 26.26 10.16
+v 16.88 26.24 10.39
+v 16.78 27.52 10.81
+v 16.78 27.21 10.38
+v 16.73 26.26 11.46
+v 16.73 26.12 11.46
+v 16.81 26.25 11.24
+v 16.89 26.07 10.82
+v 16.89 26.21 10.82
+v 16.63 27.21 11.23
+v 16.63 26.25 11.23
+v 16.53 27.30 11.45
+v 16.62 27.30 11.45
+v 16.64 26.12 10.15
+v 16.74 26.12 10.15
+v 16.70 27.21 11.23
+v 16.78 26.24 10.38
+v 16.70 26.25 11.23
+v 16.78 26.21 10.81
+v 16.62 26.26 11.45
+v 16.53 26.26 11.45
+v 16.74 26.26 10.15
+v 16.64 26.26 10.15
+v 16.82 26.26 10.05
+v 16.82 26.12 10.05
+v 16.68 26.12 11.57
+v 16.68 26.26 11.57
+v 15.67 12.70 13.02
+v 16.15 12.70 12.20
+v 16.86 14.28 12.61
+v 16.39 14.28 13.43
+v 16.69 17.34 13.61
+v 15.74 17.34 13.06
+v 17.17 17.34 12.79
+v 16.21 17.34 12.24
+v 16.83 28.50 13.14
+v 17.49 28.50 10.68
+v 17.49 30.29 10.68
+v 16.83 30.29 13.14
+v 15.03 28.50 14.94
+v 15.03 30.29 14.94
+v 12.57 28.50 15.60
+v 12.57 30.29 15.60
+v 10.10 28.50 14.94
+v 10.10 30.29 14.94
+v 8.30 28.50 13.14
+v 8.30 30.29 13.14
+v 7.64 28.50 10.68
+v 7.64 30.29 10.68
+v 8.30 28.50 8.21
+v 8.30 30.29 8.21
+v 10.10 28.50 6.41
+v 10.10 30.29 6.41
+v 12.57 28.50 5.75
+v 12.57 30.29 5.75
+v 15.03 28.50 6.41
+v 15.03 30.29 6.41
+v 16.83 28.50 8.21
+v 16.83 30.29 8.21
+v 16.78 30.29 10.68
+v 16.21 30.29 12.78
+v 15.03 30.90 14.94
+v 16.83 30.90 13.14
+v 16.21 30.90 12.78
+v 14.67 30.90 14.32
+v 14.67 30.29 14.32
+v 12.57 30.29 14.89
+v 10.10 30.90 14.94
+v 12.57 30.90 15.60
+v 12.57 30.90 14.89
+v 10.46 30.90 14.32
+v 10.46 30.29 14.32
+v 8.92 30.29 12.78
+v 7.64 30.90 10.68
+v 8.30 30.90 13.14
+v 8.92 30.90 12.78
+v 8.36 30.90 10.68
+v 8.36 30.29 10.68
+v 8.92 30.29 8.57
+v 10.10 30.90 6.41
+v 8.30 30.90 8.21
+v 8.92 30.90 8.57
+v 10.46 30.90 7.03
+v 10.46 30.29 7.03
+v 12.57 30.29 6.47
+v 15.03 30.90 6.41
+v 12.57 30.90 5.75
+v 12.57 30.90 6.47
+v 14.67 30.90 7.03
+v 14.67 30.29 7.03
+v 16.21 30.29 8.57
+v 17.49 30.90 10.68
+v 16.83 30.90 8.21
+v 16.21 30.90 8.57
+v 16.78 30.90 10.68
+v 16.78 29.42 10.68
+v 16.21 29.42 12.78
+v 14.67 29.42 14.32
+v 12.57 29.42 14.89
+v 10.46 29.42 14.32
+v 8.92 29.42 12.78
+v 8.36 29.42 10.68
+v 8.92 29.42 8.57
+v 10.46 29.42 7.03
+v 12.57 29.42 6.47
+v 14.67 29.42 7.03
+v 16.21 29.42 8.57
+v 12.57 29.42 10.68
+v 16.55 0.00 -12.98
+v 16.55 7.76 -12.98
+v 17.17 7.76 -10.68
+v 17.17 0.00 -10.68
+v 14.87 0.00 -14.66
+v 14.87 7.76 -14.66
+v 12.57 0.00 -15.28
+v 12.57 7.76 -15.28
+v 10.27 0.00 -14.66
+v 10.27 7.76 -14.66
+v 8.58 0.00 -12.98
+v 8.58 7.76 -12.98
+v 7.97 0.00 -10.68
+v 7.97 7.76 -10.68
+v 8.58 0.00 -8.38
+v 8.58 7.76 -8.38
+v 10.27 0.00 -6.69
+v 10.27 7.76 -6.69
+v 12.57 0.00 -6.08
+v 12.57 7.76 -6.08
+v 14.87 0.00 -6.69
+v 14.87 7.76 -6.69
+v 16.55 0.00 -8.38
+v 16.55 7.76 -8.38
+v 16.78 7.76 -13.11
+v 16.78 8.57 -13.11
+v 17.43 8.57 -10.68
+v 17.43 7.76 -10.68
+v 15.00 7.76 -14.89
+v 15.00 8.57 -14.89
+v 12.57 7.76 -15.54
+v 12.57 8.57 -15.54
+v 10.13 7.76 -14.89
+v 10.13 8.57 -14.89
+v 8.35 7.76 -13.11
+v 8.35 8.57 -13.11
+v 7.70 7.76 -10.68
+v 7.70 8.57 -10.68
+v 8.35 7.76 -8.24
+v 8.35 8.57 -8.24
+v 10.13 7.76 -6.46
+v 10.13 8.57 -6.46
+v 12.57 7.76 -5.81
+v 12.57 8.57 -5.81
+v 15.00 7.76 -6.46
+v 15.00 8.57 -6.46
+v 16.78 7.76 -8.24
+v 16.78 8.57 -8.24
+v 17.17 8.57 -10.68
+v 16.55 8.57 -12.98
+v 14.87 8.57 -14.66
+v 12.57 8.57 -15.28
+v 10.27 8.57 -14.66
+v 8.58 8.57 -12.98
+v 7.97 8.57 -10.68
+v 8.58 8.57 -8.38
+v 10.27 8.57 -6.69
+v 12.57 8.57 -6.08
+v 14.87 8.57 -6.69
+v 16.55 8.57 -8.38
+v 16.55 16.89 -12.98
+v 17.17 16.89 -10.68
+v 14.87 16.89 -14.66
+v 12.57 16.89 -15.28
+v 10.27 16.89 -14.66
+v 8.58 16.89 -12.98
+v 7.97 16.89 -10.68
+v 8.58 16.89 -8.38
+v 10.27 16.89 -6.69
+v 12.57 16.89 -6.08
+v 14.87 16.89 -6.69
+v 16.55 16.89 -8.38
+v 17.13 21.30 -13.31
+v 17.47 21.30 -13.51
+v 18.23 21.30 -10.68
+v 17.83 21.30 -10.68
+v 15.20 21.30 -15.24
+v 15.40 21.30 -15.58
+v 12.57 21.30 -15.94
+v 12.57 21.30 -16.34
+v 9.93 21.30 -15.24
+v 9.73 21.30 -15.58
+v 8.01 21.30 -13.31
+v 7.66 21.30 -13.51
+v 7.30 21.30 -10.68
+v 6.90 21.30 -10.68
+v 8.01 21.30 -8.04
+v 7.66 21.30 -7.84
+v 9.93 21.30 -6.12
+v 9.73 21.30 -5.77
+v 12.57 21.30 -5.41
+v 12.57 21.30 -5.01
+v 15.20 21.30 -6.12
+v 15.40 21.30 -5.77
+v 17.13 21.30 -8.04
+v 17.47 21.30 -7.84
+v 16.17 24.76 -12.76
+v 16.72 24.76 -10.68
+v 14.64 24.76 -14.28
+v 12.57 24.76 -14.83
+v 10.49 24.76 -14.28
+v 8.97 24.76 -12.76
+v 8.41 24.76 -10.68
+v 8.97 24.76 -8.60
+v 10.49 24.76 -7.08
+v 12.57 24.76 -6.52
+v 14.64 24.76 -7.08
+v 16.17 24.76 -8.60
+v 16.13 28.50 -12.74
+v 16.69 28.50 -10.68
+v 14.63 28.50 -14.24
+v 12.57 28.50 -14.80
+v 10.51 28.50 -14.24
+v 9.00 28.50 -12.74
+v 8.45 28.50 -10.68
+v 9.00 28.50 -8.62
+v 10.51 28.50 -7.11
+v 12.57 28.50 -6.56
+v 14.63 28.50 -7.11
+v 16.13 28.50 -8.62
+v 17.13 17.36 -13.31
+v 17.83 17.36 -10.68
+v 15.20 17.36 -15.24
+v 12.57 17.36 -15.94
+v 9.93 17.36 -15.24
+v 8.01 17.36 -13.31
+v 7.30 17.36 -10.68
+v 8.01 17.36 -8.04
+v 9.93 17.36 -6.12
+v 12.57 17.36 -5.41
+v 15.20 17.36 -6.12
+v 17.13 17.36 -8.04
+v 17.91 20.21 -10.37
+v 17.91 19.23 -10.37
+v 17.91 19.21 -10.80
+v 17.91 20.52 -10.80
+v 17.81 19.26 -10.03
+v 17.81 19.12 -10.03
+v 17.91 19.12 -10.04
+v 17.91 19.26 -10.04
+v 17.89 20.75 -10.80
+v 17.84 20.29 -10.15
+v 17.94 20.29 -10.15
+v 17.98 20.75 -10.81
+v 17.68 19.12 -11.55
+v 17.68 19.26 -11.55
+v 17.78 19.26 -11.56
+v 17.78 19.12 -11.56
+v 17.89 19.07 -10.80
+v 17.73 19.12 -11.45
+v 17.82 19.12 -11.45
+v 17.98 19.07 -10.81
+v 18.05 19.12 -10.16
+v 18.08 19.23 -10.39
+v 18.05 19.26 -10.16
+v 17.98 20.21 -10.38
+v 17.98 20.52 -10.81
+v 17.93 19.26 -11.46
+v 18.01 19.24 -11.24
+v 17.93 19.12 -11.46
+v 18.09 19.07 -10.82
+v 18.09 19.21 -10.82
+v 17.83 20.21 -11.23
+v 17.83 19.24 -11.23
+v 17.73 20.29 -11.45
+v 17.82 20.29 -11.45
+v 17.84 19.12 -10.15
+v 17.94 19.12 -10.15
+v 17.90 20.21 -11.23
+v 17.98 19.23 -10.38
+v 17.90 19.24 -11.23
+v 17.98 19.21 -10.81
+v 17.82 19.26 -11.45
+v 17.73 19.26 -11.45
+v 17.84 19.26 -10.15
+v 17.94 19.26 -10.15
+v 18.02 19.12 -10.05
+v 18.02 19.26 -10.05
+v 17.88 19.26 -11.57
+v 17.88 19.12 -11.57
+v 12.87 20.21 -16.02
+v 12.87 19.23 -16.02
+v 12.44 19.21 -16.02
+v 12.44 20.52 -16.02
+v 13.21 19.26 -15.92
+v 13.21 19.12 -15.92
+v 13.20 19.12 -16.02
+v 13.20 19.26 -16.02
+v 12.44 20.75 -16.00
+v 13.10 20.29 -15.95
+v 13.09 20.29 -16.05
+v 12.43 20.75 -16.10
+v 11.69 19.12 -15.79
+v 11.69 19.26 -15.79
+v 11.68 19.26 -15.89
+v 11.68 19.12 -15.89
+v 12.44 19.07 -16.00
+v 11.80 19.12 -15.84
+v 11.79 19.12 -15.94
+v 12.43 19.07 -16.10
+v 13.08 19.12 -16.16
+v 12.85 19.23 -16.20
+v 13.08 19.26 -16.16
+v 12.86 20.21 -16.09
+v 12.43 20.52 -16.10
+v 11.78 19.26 -16.04
+v 12.00 19.24 -16.12
+v 11.78 19.12 -16.04
+v 12.42 19.07 -16.20
+v 12.42 19.21 -16.20
+v 12.01 20.21 -15.94
+v 12.01 19.24 -15.94
+v 11.80 20.29 -15.84
+v 11.79 20.29 -15.94
+v 13.10 19.12 -15.95
+v 13.09 19.12 -16.05
+v 12.01 20.21 -16.01
+v 12.86 19.23 -16.09
+v 12.01 19.24 -16.01
+v 12.43 19.21 -16.10
+v 11.79 19.26 -15.94
+v 11.80 19.26 -15.84
+v 13.10 19.26 -15.95
+v 13.09 19.26 -16.05
+v 13.19 19.12 -16.13
+v 13.19 19.26 -16.13
+v 11.67 19.26 -16.00
+v 11.67 19.12 -16.00
+v 9.24 23.34 -12.52
+v 8.56 24.92 -12.99
+v 9.10 24.92 -13.76
+v 9.78 23.34 -13.29
+v 9.53 28.41 -12.29
+v 8.63 28.41 -12.92
+v 9.18 28.41 -13.70
+v 10.08 28.41 -13.07
+v 12.87 27.21 -14.81
+v 12.87 26.24 -14.81
+v 12.44 26.21 -14.82
+v 12.44 27.52 -14.82
+v 13.21 26.26 -14.72
+v 13.21 26.12 -14.72
+v 13.20 26.12 -14.82
+v 13.20 26.26 -14.82
+v 12.44 27.75 -14.80
+v 13.10 27.30 -14.75
+v 13.09 27.30 -14.85
+v 12.43 27.75 -14.89
+v 11.69 26.12 -14.59
+v 11.69 26.26 -14.59
+v 11.68 26.26 -14.69
+v 11.68 26.12 -14.69
+v 12.44 26.07 -14.80
+v 11.80 26.12 -14.64
+v 11.79 26.12 -14.73
+v 12.43 26.07 -14.89
+v 13.08 26.12 -14.96
+v 12.85 26.24 -14.99
+v 13.08 26.26 -14.96
+v 12.86 27.21 -14.89
+v 12.43 27.52 -14.89
+v 11.78 26.26 -14.84
+v 12.00 26.25 -14.92
+v 11.78 26.12 -14.84
+v 12.42 26.07 -15.00
+v 12.42 26.21 -15.00
+v 12.01 27.21 -14.74
+v 12.01 26.25 -14.74
+v 11.80 27.30 -14.64
+v 11.79 27.30 -14.73
+v 13.10 26.12 -14.75
+v 13.09 26.12 -14.85
+v 12.01 27.21 -14.81
+v 12.86 26.24 -14.89
+v 12.01 26.25 -14.81
+v 12.43 26.21 -14.89
+v 11.79 26.26 -14.73
+v 11.80 26.26 -14.64
+v 13.10 26.26 -14.75
+v 13.09 26.26 -14.85
+v 13.19 26.12 -14.93
+v 13.19 26.26 -14.93
+v 11.67 26.26 -14.79
+v 11.67 26.12 -14.79
+v 14.41 23.34 -14.01
+v 14.88 24.92 -14.68
+v 15.65 24.92 -14.14
+v 15.18 23.34 -13.46
+v 14.18 28.41 -13.71
+v 14.81 28.41 -14.61
+v 15.59 28.41 -14.07
+v 14.96 28.41 -13.17
+v 8.43 27.21 -10.98
+v 8.43 26.24 -10.98
+v 8.42 26.21 -10.55
+v 8.42 27.52 -10.55
+v 8.52 26.26 -11.32
+v 8.52 26.12 -11.32
+v 8.42 26.12 -11.31
+v 8.42 26.26 -11.31
+v 8.45 27.75 -10.55
+v 8.49 27.30 -11.21
+v 8.39 27.30 -11.20
+v 8.35 27.75 -10.54
+v 8.65 26.12 -9.80
+v 8.65 26.26 -9.80
+v 8.56 26.26 -9.79
+v 8.56 26.12 -9.79
+v 8.45 26.07 -10.55
+v 8.61 26.12 -9.91
+v 8.51 26.12 -9.90
+v 8.35 26.07 -10.54
+v 8.29 26.12 -11.19
+v 8.25 26.24 -10.96
+v 8.29 26.26 -11.19
+v 8.35 27.21 -10.97
+v 8.35 27.52 -10.54
+v 8.40 26.26 -9.89
+v 8.32 26.25 -10.11
+v 8.40 26.12 -9.89
+v 8.24 26.07 -10.53
+v 8.24 26.21 -10.53
+v 8.50 27.21 -10.13
+v 8.50 26.25 -10.13
+v 8.61 27.30 -9.91
+v 8.51 27.30 -9.90
+v 8.49 26.12 -11.21
+v 8.39 26.12 -11.20
+v 8.43 27.21 -10.12
+v 8.35 26.24 -10.97
+v 8.43 26.25 -10.12
+v 8.35 26.21 -10.54
+v 8.51 26.26 -9.90
+v 8.61 26.26 -9.91
+v 8.49 26.26 -11.21
+v 8.39 26.26 -11.20
+v 8.32 26.12 -11.30
+v 8.32 26.26 -11.30
+v 8.45 26.26 -9.78
+v 8.45 26.12 -9.78
+v 13.04 12.70 -6.81
+v 13.04 14.28 -5.99
+v 12.09 14.28 -5.99
+v 12.09 12.70 -6.81
+v 13.04 17.34 -6.74
+v 13.04 17.34 -5.64
+v 12.09 17.34 -5.64
+v 12.09 17.34 -6.74
+v 8.98 12.70 -12.20
+v 8.27 14.28 -12.61
+v 8.74 14.28 -13.43
+v 9.46 12.70 -13.02
+v 8.92 17.34 -12.24
+v 7.97 17.34 -12.79
+v 8.44 17.34 -13.61
+v 9.39 17.34 -13.06
+v 12.09 12.70 -14.54
+v 12.09 14.28 -15.36
+v 13.04 14.28 -15.36
+v 13.04 12.70 -14.54
+v 12.09 17.34 -14.62
+v 12.09 17.34 -15.71
+v 13.04 17.34 -15.71
+v 13.04 17.34 -14.62
+v 10.73 23.34 -7.35
+v 10.25 24.92 -6.67
+v 9.48 24.92 -7.22
+v 9.95 23.34 -7.89
+v 10.95 28.41 -7.65
+v 10.32 28.41 -6.74
+v 9.55 28.41 -7.29
+v 10.18 28.41 -8.19
+v 9.46 12.70 -8.34
+v 8.74 14.28 -7.92
+v 8.27 14.28 -8.74
+v 8.98 12.70 -9.15
+v 9.39 17.34 -8.30
+v 8.44 17.34 -7.75
+v 7.97 17.34 -8.57
+v 8.92 17.34 -9.12
+v 7.23 20.21 -10.98
+v 7.23 19.23 -10.98
+v 7.22 19.21 -10.55
+v 7.22 20.52 -10.55
+v 7.32 19.26 -11.32
+v 7.32 19.12 -11.32
+v 7.22 19.12 -11.31
+v 7.22 19.26 -11.31
+v 7.24 20.75 -10.55
+v 7.29 20.29 -11.21
+v 7.19 20.29 -11.20
+v 7.15 20.75 -10.54
+v 7.45 19.12 -9.80
+v 7.45 19.26 -9.80
+v 7.35 19.26 -9.79
+v 7.35 19.12 -9.79
+v 7.24 19.07 -10.55
+v 7.41 19.12 -9.91
+v 7.31 19.12 -9.90
+v 7.15 19.07 -10.54
+v 7.09 19.12 -11.19
+v 7.05 19.23 -10.96
+v 7.09 19.26 -11.19
+v 7.15 20.21 -10.97
+v 7.15 20.52 -10.54
+v 7.20 19.26 -9.89
+v 7.12 19.24 -10.11
+v 7.20 19.12 -9.89
+v 7.04 19.07 -10.53
+v 7.04 19.21 -10.53
+v 7.30 20.21 -10.13
+v 7.30 19.24 -10.13
+v 7.41 20.29 -9.91
+v 7.31 20.29 -9.90
+v 7.29 19.12 -11.21
+v 7.19 19.12 -11.20
+v 7.23 20.21 -10.12
+v 7.15 19.23 -10.97
+v 7.23 19.24 -10.12
+v 7.15 19.21 -10.54
+v 7.31 19.26 -9.90
+v 7.41 19.26 -9.91
+v 7.29 19.26 -11.21
+v 7.19 19.26 -11.20
+v 7.11 19.12 -11.30
+v 7.11 19.26 -11.30
+v 7.25 19.26 -9.78
+v 7.25 19.12 -9.78
+v 12.26 27.21 -6.54
+v 12.26 26.24 -6.54
+v 12.69 26.21 -6.53
+v 12.69 27.52 -6.53
+v 11.92 26.26 -6.63
+v 11.92 26.12 -6.63
+v 11.93 26.12 -6.53
+v 11.93 26.26 -6.53
+v 12.69 27.75 -6.56
+v 12.03 27.30 -6.60
+v 12.04 27.30 -6.51
+v 12.70 27.75 -6.46
+v 13.44 26.12 -6.76
+v 13.44 26.26 -6.76
+v 13.45 26.26 -6.67
+v 13.45 26.12 -6.67
+v 12.69 26.07 -6.56
+v 13.34 26.12 -6.72
+v 13.34 26.12 -6.62
+v 12.70 26.07 -6.46
+v 12.05 26.12 -6.40
+v 12.28 26.24 -6.36
+v 12.05 26.26 -6.40
+v 12.27 27.21 -6.47
+v 12.70 27.52 -6.46
+v 13.35 26.26 -6.51
+v 13.13 26.25 -6.43
+v 13.35 26.12 -6.51
+v 12.71 26.07 -6.35
+v 12.71 26.21 -6.35
+v 13.12 27.21 -6.61
+v 13.12 26.25 -6.61
+v 13.34 27.30 -6.72
+v 13.34 27.30 -6.62
+v 12.03 26.12 -6.60
+v 12.04 26.12 -6.51
+v 13.12 27.21 -6.54
+v 12.27 26.24 -6.47
+v 13.12 26.25 -6.54
+v 12.70 26.21 -6.46
+v 13.34 26.26 -6.62
+v 13.34 26.26 -6.72
+v 12.03 26.26 -6.60
+v 12.04 26.26 -6.51
+v 11.94 26.12 -6.43
+v 11.94 26.26 -6.43
+v 13.46 26.26 -6.56
+v 13.46 26.12 -6.56
+v 16.15 12.70 -9.15
+v 16.86 14.28 -8.74
+v 16.39 14.28 -7.92
+v 15.67 12.70 -8.34
+v 16.21 17.34 -9.12
+v 17.17 17.34 -8.57
+v 16.69 17.34 -7.75
+v 15.74 17.34 -8.30
+v 12.26 20.21 -5.34
+v 12.26 19.23 -5.34
+v 12.69 19.21 -5.33
+v 12.69 20.52 -5.33
+v 11.92 19.26 -5.43
+v 11.92 19.12 -5.43
+v 11.93 19.12 -5.33
+v 11.93 19.26 -5.33
+v 12.69 20.75 -5.36
+v 12.03 20.29 -5.40
+v 12.04 20.29 -5.30
+v 12.70 20.75 -5.26
+v 13.44 19.12 -5.56
+v 13.44 19.26 -5.56
+v 13.45 19.26 -5.47
+v 13.45 19.12 -5.47
+v 12.69 19.07 -5.36
+v 13.34 19.12 -5.52
+v 13.34 19.12 -5.42
+v 12.70 19.07 -5.26
+v 12.05 19.12 -5.20
+v 12.28 19.23 -5.16
+v 12.05 19.26 -5.20
+v 12.27 20.21 -5.26
+v 12.70 20.52 -5.26
+v 13.35 19.26 -5.31
+v 13.13 19.24 -5.23
+v 13.35 19.12 -5.31
+v 12.71 19.07 -5.15
+v 12.71 19.21 -5.15
+v 13.12 20.21 -5.41
+v 13.12 19.24 -5.41
+v 13.34 20.29 -5.52
+v 13.34 20.29 -5.42
+v 12.03 19.12 -5.40
+v 12.04 19.12 -5.30
+v 13.12 20.21 -5.34
+v 12.27 19.23 -5.26
+v 13.12 19.24 -5.34
+v 12.70 19.21 -5.26
+v 13.34 19.26 -5.42
+v 13.34 19.26 -5.52
+v 12.03 19.26 -5.40
+v 12.04 19.26 -5.30
+v 11.94 19.12 -5.23
+v 11.94 19.26 -5.23
+v 13.46 19.26 -5.36
+v 13.46 19.12 -5.36
+v 15.89 23.34 -8.84
+v 16.57 24.92 -8.36
+v 16.03 24.92 -7.59
+v 15.35 23.34 -8.06
+v 15.60 28.41 -9.06
+v 16.50 28.41 -8.43
+v 15.96 28.41 -7.66
+v 15.06 28.41 -8.29
+v 16.70 27.21 -10.37
+v 16.70 26.24 -10.37
+v 16.71 26.21 -10.80
+v 16.71 27.52 -10.80
+v 16.61 26.26 -10.03
+v 16.61 26.12 -10.03
+v 16.71 26.12 -10.04
+v 16.71 26.26 -10.04
+v 16.69 27.75 -10.80
+v 16.64 27.30 -10.15
+v 16.74 27.30 -10.15
+v 16.78 27.75 -10.81
+v 16.48 26.12 -11.55
+v 16.48 26.26 -11.55
+v 16.58 26.26 -11.56
+v 16.58 26.12 -11.56
+v 16.69 26.07 -10.80
+v 16.53 26.12 -11.45
+v 16.62 26.12 -11.45
+v 16.78 26.07 -10.81
+v 16.84 26.12 -10.16
+v 16.88 26.24 -10.39
+v 16.84 26.26 -10.16
+v 16.78 27.21 -10.38
+v 16.78 27.52 -10.81
+v 16.73 26.26 -11.46
+v 16.81 26.25 -11.24
+v 16.73 26.12 -11.46
+v 16.89 26.07 -10.82
+v 16.89 26.21 -10.82
+v 16.63 27.21 -11.23
+v 16.63 26.25 -11.23
+v 16.53 27.30 -11.45
+v 16.62 27.30 -11.45
+v 16.64 26.12 -10.15
+v 16.74 26.12 -10.15
+v 16.70 27.21 -11.23
+v 16.78 26.24 -10.38
+v 16.70 26.25 -11.23
+v 16.78 26.21 -10.81
+v 16.62 26.26 -11.45
+v 16.53 26.26 -11.45
+v 16.64 26.26 -10.15
+v 16.74 26.26 -10.15
+v 16.82 26.12 -10.05
+v 16.82 26.26 -10.05
+v 16.68 26.26 -11.57
+v 16.68 26.12 -11.57
+v 15.67 12.70 -13.02
+v 16.39 14.28 -13.43
+v 16.86 14.28 -12.61
+v 16.15 12.70 -12.20
+v 15.74 17.34 -13.06
+v 16.69 17.34 -13.61
+v 17.17 17.34 -12.79
+v 16.21 17.34 -12.24
+v 16.83 28.50 -13.14
+v 16.83 30.29 -13.14
+v 17.49 30.29 -10.68
+v 17.49 28.50 -10.68
+v 15.03 28.50 -14.94
+v 15.03 30.29 -14.94
+v 12.57 28.50 -15.60
+v 12.57 30.29 -15.60
+v 10.10 28.50 -14.94
+v 10.10 30.29 -14.94
+v 8.30 28.50 -13.14
+v 8.30 30.29 -13.14
+v 7.64 28.50 -10.68
+v 7.64 30.29 -10.68
+v 8.30 28.50 -8.21
+v 8.30 30.29 -8.21
+v 10.10 28.50 -6.41
+v 10.10 30.29 -6.41
+v 12.57 28.50 -5.75
+v 12.57 30.29 -5.75
+v 15.03 28.50 -6.41
+v 15.03 30.29 -6.41
+v 16.83 28.50 -8.21
+v 16.83 30.29 -8.21
+v 16.21 30.29 -12.78
+v 16.78 30.29 -10.68
+v 15.03 30.90 -14.94
+v 14.67 30.90 -14.32
+v 16.21 30.90 -12.78
+v 16.83 30.90 -13.14
+v 12.57 30.29 -14.89
+v 14.67 30.29 -14.32
+v 10.10 30.90 -14.94
+v 10.46 30.90 -14.32
+v 12.57 30.90 -14.89
+v 12.57 30.90 -15.60
+v 8.92 30.29 -12.78
+v 10.46 30.29 -14.32
+v 7.64 30.90 -10.68
+v 8.36 30.90 -10.68
+v 8.92 30.90 -12.78
+v 8.30 30.90 -13.14
+v 8.92 30.29 -8.57
+v 8.36 30.29 -10.68
+v 10.10 30.90 -6.41
+v 10.46 30.90 -7.03
+v 8.92 30.90 -8.57
+v 8.30 30.90 -8.21
+v 12.57 30.29 -6.47
+v 10.46 30.29 -7.03
+v 15.03 30.90 -6.41
+v 14.67 30.90 -7.03
+v 12.57 30.90 -6.47
+v 12.57 30.90 -5.75
+v 16.21 30.29 -8.57
+v 14.67 30.29 -7.03
+v 17.49 30.90 -10.68
+v 16.78 30.90 -10.68
+v 16.21 30.90 -8.57
+v 16.83 30.90 -8.21
+v 16.21 29.42 -12.78
+v 16.78 29.42 -10.68
+v 14.67 29.42 -14.32
+v 12.57 29.42 -14.89
+v 10.46 29.42 -14.32
+v 8.92 29.42 -12.78
+v 8.36 29.42 -10.68
+v 8.92 29.42 -8.57
+v 10.46 29.42 -7.03
+v 12.57 29.42 -6.47
+v 14.67 29.42 -7.03
+v 16.21 29.42 -8.57
+v 12.57 29.42 -10.68
+# 4553 vertices
+
+vn -1.00 0.00 -0.00
+vn -0.48 0.00 -0.88
+vn -0.17 0.00 -0.99
+vn 0.00 0.00 -1.00
+vn 0.17 0.00 -0.99
+vn 0.48 0.00 -0.88
+vn 1.00 0.00 -0.00
+vn 0.48 0.00 0.88
+vn 0.17 0.00 0.99
+vn 0.00 0.00 1.00
+vn -0.17 0.00 0.99
+vn -0.48 0.00 0.88
+vn -0.73 0.00 -0.69
+vn -0.27 0.00 -0.96
+vn -0.08 0.00 -1.00
+vn 0.08 0.00 -1.00
+vn 0.27 0.00 -0.96
+vn 0.73 0.00 -0.69
+vn 0.73 0.00 0.69
+vn 0.27 0.00 0.96
+vn 0.08 0.00 1.00
+vn -0.08 0.00 1.00
+vn -0.27 0.00 0.96
+vn -0.73 0.00 0.69
+vn -0.72 0.00 0.69
+vn 0.00 -1.00 -0.00
+vn 0.00 1.00 -0.00
+vn -0.60 0.56 -0.57
+vn -0.26 0.33 -0.91
+vn -0.07 0.25 -0.96
+vn 0.07 0.25 -0.96
+vn 0.26 0.33 -0.91
+vn 0.60 0.56 -0.57
+vn 0.60 0.56 0.57
+vn 0.26 0.33 0.91
+vn 0.07 0.25 0.96
+vn -0.07 0.25 0.96
+vn -0.26 0.33 0.91
+vn -0.60 0.56 0.57
+vn -0.73 0.01 -0.69
+vn -0.27 0.01 -0.96
+vn -0.08 0.01 -1.00
+vn -0.07 0.01 -1.00
+vn 0.08 0.01 -1.00
+vn 0.27 0.01 -0.96
+vn 0.73 0.01 -0.69
+vn 0.72 0.01 0.69
+vn 0.73 0.01 0.69
+vn 0.27 0.01 0.96
+vn 0.08 0.01 1.00
+vn -0.08 0.01 1.00
+vn -0.07 0.01 1.00
+vn -0.27 0.01 0.96
+vn -0.73 0.01 0.69
+vn -0.72 0.01 0.69
+vn -0.30 -0.91 -0.29
+vn -0.18 -0.75 -0.64
+vn -0.18 -0.74 -0.64
+vn -0.06 -0.65 -0.76
+vn 0.06 -0.65 -0.76
+vn 0.18 -0.75 -0.64
+vn 0.18 -0.74 -0.64
+vn 0.30 -0.91 -0.29
+vn 0.30 -0.91 0.29
+vn 0.18 -0.74 0.64
+vn 0.18 -0.75 0.64
+vn 0.06 -0.65 0.76
+vn -0.06 -0.65 0.76
+vn -0.18 -0.74 0.64
+vn -0.18 -0.75 0.64
+vn -0.30 -0.91 0.29
+vn -1.00 0.00 0.06
+vn -0.02 0.00 1.00
+vn -0.02 0.65 0.76
+vn 0.02 0.00 -1.00
+vn 0.00 -0.99 -0.12
+vn -0.85 0.00 0.52
+vn -0.95 0.12 0.30
+vn -0.62 0.00 -0.78
+vn -0.76 -0.16 -0.63
+vn -0.83 0.00 -0.56
+vn 0.02 0.66 -0.75
+vn -0.00 -0.99 0.12
+vn -0.72 0.09 -0.69
+vn -0.96 -0.21 0.19
+vn 0.02 -0.64 -0.77
+vn -0.02 -0.64 0.77
+vn -0.00 0.99 0.13
+vn 0.00 1.00 -0.10
+vn 0.00 0.99 -0.17
+vn 0.01 0.99 -0.17
+vn -0.00 0.99 0.10
+vn -0.74 0.00 0.67
+vn -0.75 0.00 0.67
+vn -0.54 0.00 -0.84
+vn -0.00 0.00 -1.00
+vn -0.96 0.00 -0.29
+vn -0.95 0.00 -0.30
+vn -0.31 0.95 -0.10
+vn 0.95 0.00 0.30
+vn 0.96 0.00 0.29
+vn 0.03 -1.00 0.01
+vn -0.05 0.00 -1.00
+vn -0.03 0.04 -1.00
+vn 0.10 0.00 -1.00
+vn 0.07 -0.06 -1.00
+vn 0.05 0.00 -1.00
+vn 0.31 0.95 0.10
+vn -0.04 -1.00 -0.01
+vn 0.08 0.04 -1.00
+vn -0.02 -0.06 -1.00
+vn 0.32 -0.94 0.10
+vn -0.32 -0.94 -0.10
+vn -0.04 1.00 -0.01
+vn 0.03 1.00 0.01
+vn 0.05 1.00 0.01
+vn -0.03 1.00 -0.01
+vn -0.07 0.00 -1.00
+vn 0.12 0.00 -0.99
+vn 0.33 -0.45 -0.83
+vn 0.19 -0.00 0.98
+vn 0.37 0.03 -0.93
+vn -0.19 0.00 -0.98
+vn -0.01 0.00 -1.00
+vn -0.96 0.00 -0.30
+vn 0.31 0.95 0.09
+vn -0.18 -0.35 -0.92
+vn 0.37 -0.00 -0.93
+vn -0.19 0.02 -0.98
+vn -0.37 0.00 0.93
+vn 1.00 0.00 -0.06
+vn 0.02 0.65 -0.76
+vn 0.85 0.00 -0.52
+vn 0.95 0.12 -0.30
+vn 0.62 0.00 0.78
+vn 0.76 -0.16 0.63
+vn 0.83 0.00 0.56
+vn 0.82 0.00 0.57
+vn -0.02 0.66 0.75
+vn 0.72 0.09 0.69
+vn 0.96 -0.21 -0.19
+vn 0.00 0.99 -0.13
+vn -0.00 1.00 0.10
+vn -0.00 0.99 0.17
+vn 0.00 0.99 -0.10
+vn 0.75 0.00 -0.67
+vn 0.54 0.00 0.84
+vn 0.00 -0.30 0.95
+vn 0.00 -0.07 1.00
+vn 0.38 -0.49 -0.78
+vn 0.16 0.00 0.99
+vn 0.44 -0.12 -0.89
+vn -0.16 0.00 -0.99
+vn 0.00 -0.30 -0.95
+vn 0.00 -0.07 -1.00
+vn 0.18 -0.35 0.92
+vn -0.37 -0.00 0.93
+vn 0.19 0.02 0.98
+vn 0.37 0.00 -0.93
+vn 0.38 -0.49 0.78
+vn -0.16 0.00 0.99
+vn 0.44 -0.12 0.89
+vn 0.16 0.00 -0.99
+vn 0.01 0.00 1.00
+vn 0.96 0.00 0.30
+vn -0.03 -1.00 -0.01
+vn 0.05 0.00 1.00
+vn 0.03 0.04 1.00
+vn -0.10 0.00 1.00
+vn -0.07 -0.06 1.00
+vn -0.05 0.00 1.00
+vn -0.31 0.95 -0.09
+vn 0.04 -1.00 0.01
+vn -0.08 0.04 1.00
+vn 0.02 -0.06 1.00
+vn 0.04 1.00 0.01
+vn -0.05 1.00 -0.02
+vn 0.07 0.00 1.00
+vn -0.12 0.00 0.99
+vn -0.38 -0.49 0.78
+vn -0.44 -0.12 0.89
+vn -0.43 -0.12 0.89
+vn -0.33 -0.45 0.83
+vn -0.19 -0.00 -0.98
+vn -0.37 0.03 0.93
+vn 0.19 0.00 0.98
+vn -0.38 -0.49 -0.78
+vn -0.44 -0.12 -0.89
+vn -0.43 -0.12 -0.89
+vn 0.72 0.00 0.69
+vn -0.07 0.00 1.00
+vn -0.72 0.00 -0.69
+vn 0.07 0.00 -1.00
+vn 0.72 0.00 -0.69
+vn 0.44 0.00 -0.90
+vn 0.44 0.00 0.90
+vn -0.44 0.00 0.90
+vn -0.44 0.00 -0.90
+vn 0.50 0.87 -0.00
+vn 0.00 0.45 -0.89
+vn -0.50 0.87 -0.00
+vn 0.00 0.42 0.91
+vn 0.08 1.00 -0.00
+vn 0.04 0.55 0.83
+vn -0.00 0.55 0.83
+vn 0.01 0.01 1.00
+vn -0.00 0.55 -0.83
+vn 0.04 0.55 -0.83
+vn 0.01 0.01 -1.00
+vn -0.08 1.00 -0.00
+vn -0.04 0.55 0.83
+vn -0.01 0.01 1.00
+vn -0.04 0.55 -0.83
+vn -0.01 0.01 -1.00
+vn -0.06 0.60 -0.79
+vn -0.91 -0.41 0.00
+vn -0.10 0.98 -0.19
+vn -0.06 0.60 0.79
+vn -0.91 -0.41 -0.00
+vn -0.10 0.98 0.19
+vn -0.05 0.61 -0.79
+vn -0.94 -0.35 -0.00
+vn -0.08 0.98 -0.19
+vn -0.05 0.61 0.79
+vn -0.08 0.98 0.19
+vn -0.04 0.61 -0.79
+vn -0.03 0.61 -0.79
+vn -0.97 -0.25 0.00
+vn -0.97 -0.25 -0.00
+vn -0.06 0.98 -0.19
+vn -0.04 0.61 0.79
+vn -0.03 0.61 0.79
+vn -0.06 0.98 0.19
+vn -0.01 0.61 -0.79
+vn -1.00 -0.07 -0.00
+vn -0.02 0.98 -0.19
+vn -0.01 0.61 0.79
+vn -0.02 0.98 0.19
+vn -1.00 -0.07 0.00
+vn -0.02 0.61 -0.79
+vn -0.99 -0.11 -0.00
+vn -0.02 0.61 0.79
+vn -0.99 -0.11 0.00
+vn 0.06 0.60 -0.79
+vn 0.91 -0.41 0.00
+vn 0.10 0.98 -0.19
+vn 0.06 0.60 0.79
+vn 0.91 -0.41 -0.00
+vn 0.10 0.98 0.19
+vn 0.05 0.61 -0.79
+vn 0.94 -0.35 -0.00
+vn 0.08 0.98 -0.19
+vn 0.05 0.61 0.79
+vn 0.94 -0.35 0.00
+vn 0.08 0.98 0.19
+vn 0.03 0.61 -0.79
+vn 0.04 0.61 -0.79
+vn 0.97 -0.25 0.00
+vn 0.06 0.98 -0.19
+vn 0.03 0.61 0.79
+vn 0.97 -0.25 -0.00
+vn 0.06 0.98 0.19
+vn 0.04 0.61 0.79
+vn 0.01 0.61 -0.79
+vn 1.00 -0.07 -0.00
+vn 0.02 0.98 -0.19
+vn 0.01 0.61 0.79
+vn 0.02 0.98 0.19
+vn 1.00 -0.07 0.00
+vn 0.02 0.61 -0.79
+vn 0.99 -0.11 -0.00
+vn 0.02 0.61 0.79
+vn 0.99 -0.11 0.00
+vn 0.10 0.98 -0.20
+vn 0.10 0.98 0.20
+vn 0.09 0.59 -0.80
+vn -0.82 0.57 0.00
+vn -0.82 0.57 -0.00
+vn 0.15 0.97 -0.20
+vn 0.09 0.59 0.80
+vn 0.15 0.97 0.20
+vn -0.09 0.59 -0.80
+vn 0.82 0.57 0.00
+vn -0.15 0.97 -0.20
+vn -0.09 0.59 0.80
+vn 0.82 0.57 -0.00
+vn -0.15 0.97 0.20
+vn -0.57 0.82 -0.00
+vn 0.08 -1.00 -0.00
+vn 0.57 0.82 -0.00
+vn -0.08 -1.00 -0.00
+vn 0.59 -0.81 -0.00
+vn -0.59 -0.81 -0.00
+vn 0.06 1.00 -0.00
+vn 0.10 0.99 -0.00
+vn -0.06 1.00 -0.00
+vn -0.07 -1.00 -0.00
+vn 0.07 -1.00 -0.00
+vn 0.00 0.37 0.93
+vn 0.00 -0.97 -0.26
+vn 0.00 0.37 -0.93
+vn 0.00 -0.97 0.26
+vn 0.00 -0.36 -0.93
+vn 0.00 -0.36 0.93
+vn 0.00 0.96 0.28
+vn 0.00 0.98 -0.21
+vn 0.00 0.94 -0.35
+vn 0.00 0.98 0.22
+vn 0.00 0.96 -0.28
+vn 0.00 0.98 0.21
+vn 0.00 0.94 0.35
+vn 0.00 0.98 -0.22
+vn 0.11 0.99 -0.00
+vn -0.10 0.99 -0.00
+vn 1.00 0.04 -0.00
+vn 0.87 0.50 -0.00
+vn -1.00 -0.04 -0.00
+vn -0.87 -0.50 -0.00
+vn 0.40 0.92 -0.00
+vn -0.42 -0.91 -0.00
+vn -0.40 0.92 -0.00
+vn 0.42 -0.91 -0.00
+vn -0.87 0.50 -0.00
+vn 0.87 -0.50 -0.00
+vn -1.00 0.04 -0.00
+vn 1.00 -0.04 -0.00
+vn 0.02 0.05 -1.00
+vn 0.95 -0.05 0.30
+vn -0.02 -0.01 1.00
+vn -0.94 0.18 -0.29
+vn 0.03 -0.06 -1.00
+vn 0.02 -0.06 -1.00
+vn 0.96 0.05 0.27
+vn -0.02 0.01 1.00
+vn -0.96 -0.22 -0.19
+vn 0.00 -1.00 -0.05
+vn 0.00 1.00 0.05
+vn 0.00 -1.00 0.05
+vn 0.00 1.00 -0.05
+vn 0.02 -1.00 -0.00
+vn -0.02 1.00 -0.00
+vn -0.01 1.00 -0.00
+vn -0.01 -1.00 -0.00
+vn 0.01 1.00 -0.00
+vn 0.02 0.05 1.00
+vn 0.95 -0.05 -0.30
+vn -0.02 -0.01 -1.00
+vn -0.94 0.18 0.29
+vn 0.03 -0.06 1.00
+vn 0.96 0.05 -0.27
+vn -0.02 0.01 -1.00
+vn -0.96 -0.22 0.19
+vn -0.96 -0.22 0.18
+vn 0.01 -1.00 -0.00
+vn -0.02 -1.00 -0.00
+vn 0.02 1.00 -0.00
+vn -0.99 0.12 -0.00
+vn -1.00 0.01 0.04
+vn -0.99 -0.10 0.07
+vn 0.00 0.01 1.00
+vn 0.00 -0.00 1.00
+vn 1.00 0.01 0.01
+vn 1.00 -0.03 0.02
+vn 0.00 0.04 -1.00
+vn 0.00 0.01 -1.00
+vn 0.00 -0.02 -1.00
+vn 0.13 -0.99 -0.00
+vn -0.13 0.99 -0.00
+vn -0.13 -0.99 -0.00
+vn 0.13 0.99 -0.00
+vn -0.07 1.00 -0.00
+vn 0.07 1.00 -0.00
+vn 0.00 -0.67 -0.74
+vn 0.00 -0.13 -0.99
+vn 0.00 0.67 -0.74
+vn 0.00 0.13 -0.99
+vn 0.00 0.12 -0.99
+vn -1.00 0.01 -0.04
+vn -0.99 -0.10 -0.07
+vn 0.00 -0.00 -1.00
+vn 1.00 0.01 -0.01
+vn 1.00 -0.03 -0.02
+vn 0.00 0.04 1.00
+vn 0.00 -0.02 1.00
+vn 0.72 0.01 -0.69
+vn -0.72 0.01 -0.69
+vn -1.00 0.00 -0.06
+vn -0.02 0.00 -1.00
+vn -0.02 0.65 -0.76
+vn 0.02 0.00 1.00
+vn 0.00 -0.99 0.12
+vn -0.85 0.00 -0.52
+vn -0.95 0.12 -0.30
+vn -0.62 0.00 0.78
+vn -0.76 -0.16 0.63
+vn -0.83 0.00 0.56
+vn 0.02 0.66 0.75
+vn -0.00 -0.99 -0.12
+vn -0.72 0.09 0.69
+vn -0.96 -0.21 -0.19
+vn 0.02 -0.64 0.77
+vn -0.02 -0.64 -0.77
+vn -0.00 0.99 -0.13
+vn 0.00 1.00 0.10
+vn 0.00 0.99 0.17
+vn 0.01 0.99 0.17
+vn -0.00 0.99 -0.10
+vn -0.74 0.00 -0.67
+vn -0.75 0.00 -0.67
+vn -0.54 0.00 0.84
+vn -0.00 0.00 1.00
+vn -0.96 0.00 0.29
+vn -0.95 0.00 0.30
+vn -0.31 0.95 0.10
+vn 0.95 0.00 -0.30
+vn 0.96 0.00 -0.29
+vn 0.03 -1.00 -0.01
+vn -0.03 0.04 1.00
+vn 0.10 0.00 1.00
+vn 0.07 -0.06 1.00
+vn 0.31 0.95 -0.10
+vn -0.04 -1.00 0.01
+vn 0.08 0.04 1.00
+vn -0.02 -0.06 1.00
+vn 0.32 -0.94 -0.10
+vn -0.32 -0.94 0.10
+vn -0.04 1.00 0.01
+vn 0.03 1.00 -0.01
+vn 0.05 1.00 -0.01
+vn -0.03 1.00 0.01
+vn 0.12 0.00 0.99
+vn 0.33 -0.45 0.83
+vn 0.19 -0.00 -0.98
+vn 0.37 0.03 0.93
+vn -0.19 0.00 0.98
+vn -0.01 0.00 1.00
+vn -0.96 0.00 0.30
+vn 0.31 0.95 -0.09
+vn -0.18 -0.35 0.92
+vn 0.37 -0.00 0.93
+vn -0.19 0.02 0.98
+vn -0.37 0.00 -0.93
+vn 1.00 0.00 0.06
+vn 0.02 0.65 0.76
+vn 0.85 0.00 0.52
+vn 0.95 0.12 0.30
+vn 0.62 0.00 -0.78
+vn 0.76 -0.16 -0.63
+vn 0.83 0.00 -0.56
+vn 0.82 0.00 -0.57
+vn -0.02 0.66 -0.75
+vn 0.72 0.09 -0.69
+vn 0.96 -0.21 0.19
+vn 0.00 0.99 0.13
+vn -0.00 1.00 -0.10
+vn -0.00 0.99 -0.17
+vn 0.00 0.99 0.10
+vn 0.75 0.00 0.67
+vn 0.54 0.00 -0.84
+vn 0.18 -0.35 -0.92
+vn -0.37 -0.00 -0.93
+vn 0.19 0.02 -0.98
+vn 0.37 0.00 0.93
+vn 0.01 0.00 -1.00
+vn 0.96 0.00 -0.30
+vn -0.03 -1.00 0.01
+vn 0.03 0.04 -1.00
+vn -0.10 0.00 -1.00
+vn -0.07 -0.06 -1.00
+vn -0.31 0.95 0.09
+vn 0.04 -1.00 -0.01
+vn -0.08 0.04 -1.00
+vn 0.04 1.00 -0.01
+vn -0.05 1.00 0.02
+vn -0.12 0.00 -0.99
+vn -0.33 -0.45 -0.83
+vn -0.19 -0.00 0.98
+vn -0.37 0.03 -0.93
+vn 0.19 0.00 -0.98
+vn 0.74 0.00 -0.67
+vn -0.05 1.00 -0.01
+vn -0.82 0.00 -0.57
+vn 0.05 1.00 0.02
+vn 0.74 0.00 0.67
+vn -0.05 1.00 0.01
+vn -0.82 0.00 0.57
+vn 0.05 1.00 -0.02
+# 487 vertex normals
+
+vt 0.10 0.10 0.00
+vt 0.07 0.10 0.00
+vt 0.07 0.01 0.00
+vt 0.10 0.01 0.00
+vt 0.05 0.10 0.00
+vt 0.05 0.01 0.00
+vt 0.02 0.10 0.00
+vt 0.02 0.01 0.00
+vt 0.38 0.10 0.00
+vt 0.35 0.10 0.00
+vt 0.35 0.01 0.00
+vt 0.38 0.01 0.00
+vt 0.32 0.10 0.00
+vt 0.32 0.01 0.00
+vt 0.29 0.10 0.00
+vt 0.29 0.01 0.00
+vt 0.27 0.10 0.00
+vt 0.27 0.01 0.00
+vt 0.24 0.10 0.00
+vt 0.24 0.01 0.00
+vt 0.21 0.10 0.00
+vt 0.21 0.01 0.00
+vt 0.17 0.10 0.00
+vt 0.17 0.01 0.00
+vt 0.13 0.10 0.00
+vt 0.13 0.01 0.00
+vt 0.34 0.56 0.00
+vt 0.37 0.56 0.00
+vt 0.37 0.57 0.00
+vt 0.34 0.57 0.00
+vt 0.30 0.56 0.00
+vt 0.30 0.57 0.00
+vt 0.27 0.56 0.00
+vt 0.27 0.57 0.00
+vt 0.61 0.56 0.00
+vt 0.64 0.56 0.00
+vt 0.64 0.57 0.00
+vt 0.61 0.57 0.00
+vt 0.58 0.56 0.00
+vt 0.58 0.57 0.00
+vt 0.55 0.56 0.00
+vt 0.55 0.57 0.00
+vt 0.52 0.56 0.00
+vt 0.52 0.57 0.00
+vt 0.49 0.56 0.00
+vt 0.49 0.57 0.00
+vt 0.46 0.56 0.00
+vt 0.46 0.57 0.00
+vt 0.43 0.56 0.00
+vt 0.43 0.57 0.00
+vt 0.40 0.56 0.00
+vt 0.40 0.57 0.00
+vt 0.97 0.27 0.00
+vt 0.96 0.28 0.00
+vt 0.94 0.27 0.00
+vt 0.93 0.26 0.00
+vt 0.93 0.25 0.00
+vt 0.93 0.24 0.00
+vt 0.93 0.23 0.00
+vt 0.94 0.23 0.00
+vt 0.94 0.22 0.00
+vt 0.96 0.22 0.00
+vt 0.97 0.23 0.00
+vt 0.97 0.22 0.00
+vt 0.98 0.24 0.00
+vt 0.98 0.23 0.00
+vt 0.99 0.25 0.00
+vt 0.98 0.26 0.00
+vt 0.81 0.06 0.00
+vt 0.81 0.16 0.00
+vt 0.78 0.16 0.00
+vt 0.78 0.06 0.00
+vt 0.76 0.16 0.00
+vt 0.76 0.06 0.00
+vt 0.73 0.16 0.00
+vt 0.73 0.06 0.00
+vt 0.71 0.16 0.00
+vt 0.71 0.06 0.00
+vt 0.69 0.16 0.00
+vt 0.69 0.06 0.00
+vt 0.98 0.06 0.00
+vt 0.98 0.16 0.00
+vt 0.95 0.16 0.00
+vt 0.95 0.06 0.00
+vt 0.93 0.16 0.00
+vt 0.93 0.06 0.00
+vt 0.91 0.16 0.00
+vt 0.91 0.06 0.00
+vt 0.88 0.16 0.00
+vt 0.88 0.06 0.00
+vt 0.86 0.16 0.00
+vt 0.86 0.07 0.00
+vt 0.83 0.16 0.00
+vt 0.83 0.07 0.00
+vt 0.98 0.28 0.00
+vt 0.96 0.29 0.00
+vt 0.99 0.27 0.00
+vt 1.00 0.25 0.00
+vt 0.99 0.23 0.00
+vt 0.98 0.22 0.00
+vt 0.96 0.21 0.00
+vt 0.92 0.23 0.00
+vt 0.92 0.25 0.00
+vt 0.93 0.27 0.00
+vt 0.92 0.27 0.00
+vt 0.94 0.28 0.00
+vt 0.11 0.23 0.00
+vt 0.09 0.22 0.00
+vt 0.10 0.18 0.00
+vt 0.13 0.19 0.00
+vt 0.14 0.24 0.00
+vt 0.15 0.19 0.00
+vt 0.17 0.24 0.00
+vt 0.18 0.20 0.00
+vt 0.21 0.24 0.00
+vt 0.20 0.20 0.00
+vt 0.24 0.24 0.00
+vt 0.23 0.19 0.00
+vt 0.27 0.23 0.00
+vt 0.25 0.19 0.00
+vt 0.30 0.22 0.00
+vt 0.28 0.18 0.00
+vt 0.32 0.21 0.00
+vt 0.30 0.17 0.00
+vt 0.35 0.19 0.00
+vt 0.32 0.16 0.00
+vt 0.03 0.19 0.00
+vt 0.01 0.17 0.00
+vt 0.04 0.14 0.00
+vt 0.06 0.16 0.00
+vt 0.06 0.21 0.00
+vt 0.08 0.17 0.00
+vt 0.12 0.14 0.00
+vt 0.14 0.15 0.00
+vt 0.16 0.15 0.00
+vt 0.18 0.16 0.00
+vt 0.20 0.16 0.00
+vt 0.22 0.15 0.00
+vt 0.24 0.15 0.00
+vt 0.26 0.14 0.00
+vt 0.28 0.13 0.00
+vt 0.31 0.12 0.00
+vt 0.06 0.11 0.00
+vt 0.08 0.12 0.00
+vt 0.10 0.13 0.00
+vt 0.14 0.12 0.00
+vt 0.12 0.12 0.00
+vt 0.12 0.11 0.00
+vt 0.14 0.11 0.00
+vt 0.10 0.12 0.00
+vt 0.10 0.11 0.00
+vt 0.35 0.12 0.00
+vt 0.33 0.12 0.00
+vt 0.33 0.11 0.00
+vt 0.35 0.11 0.00
+vt 0.31 0.11 0.00
+vt 0.29 0.12 0.00
+vt 0.29 0.11 0.00
+vt 0.27 0.12 0.00
+vt 0.27 0.11 0.00
+vt 0.24 0.12 0.00
+vt 0.24 0.11 0.00
+vt 0.22 0.12 0.00
+vt 0.22 0.11 0.00
+vt 0.20 0.12 0.00
+vt 0.20 0.11 0.00
+vt 0.18 0.12 0.00
+vt 0.18 0.11 0.00
+vt 0.16 0.12 0.00
+vt 0.16 0.11 0.00
+vt 0.67 0.06 0.00
+vt 0.64 0.06 0.00
+vt 0.64 0.01 0.00
+vt 0.67 0.01 0.00
+vt 0.60 0.06 0.00
+vt 0.60 0.01 0.00
+vt 0.99 0.06 0.00
+vt 0.96 0.06 0.00
+vt 0.96 0.01 0.00
+vt 0.99 0.01 0.00
+vt 0.93 0.01 0.00
+vt 0.89 0.06 0.00
+vt 0.89 0.01 0.00
+vt 0.86 0.06 0.00
+vt 0.86 0.01 0.00
+vt 0.83 0.06 0.00
+vt 0.83 0.01 0.00
+vt 0.80 0.06 0.00
+vt 0.80 0.01 0.00
+vt 0.77 0.06 0.00
+vt 0.77 0.01 0.00
+vt 0.73 0.01 0.00
+vt 0.70 0.06 0.00
+vt 0.70 0.01 0.00
+vt 0.95 0.87 0.00
+vt 0.93 0.89 0.00
+vt 0.92 0.82 0.00
+vt 0.95 0.82 0.00
+vt 0.92 0.79 0.00
+vt 0.90 0.79 0.00
+vt 0.90 0.77 0.00
+vt 0.92 0.77 0.00
+vt 0.99 0.56 0.00
+vt 0.98 0.56 0.00
+vt 0.98 0.52 0.00
+vt 0.99 0.52 0.00
+vt 0.93 0.78 0.00
+vt 0.96 0.78 0.00
+vt 0.96 0.79 0.00
+vt 0.96 0.81 0.00
+vt 0.94 0.81 0.00
+vt 0.93 0.90 0.00
+vt 0.95 0.88 0.00
+vt 0.96 0.88 0.00
+vt 0.89 0.79 0.00
+vt 0.89 0.81 0.00
+vt 0.90 0.87 0.00
+vt 0.90 0.82 0.00
+vt 0.99 0.60 0.00
+vt 0.98 0.60 0.00
+vt 0.99 0.66 0.00
+vt 0.99 0.59 0.00
+vt 0.99 0.46 0.00
+vt 0.92 0.76 0.00
+vt 0.86 0.76 0.00
+vt 0.86 0.77 0.00
+vt 0.96 0.83 0.00
+vt 0.95 0.83 0.00
+vt 0.98 0.66 0.00
+vt 0.98 0.46 0.00
+vt 0.96 0.76 0.00
+vt 0.92 0.75 0.00
+vt 0.96 0.75 0.00
+vt 0.86 0.75 0.00
+vt 0.93 0.77 0.00
+vt 0.96 0.77 0.00
+vt 0.97 0.76 0.00
+vt 0.97 0.77 0.00
+vt 0.97 0.75 0.00
+vt 0.97 0.79 0.00
+vt 0.98 0.80 0.00
+vt 0.97 0.78 0.00
+vt 0.62 0.90 0.00
+vt 0.63 0.90 0.00
+vt 0.63 0.93 0.00
+vt 0.62 0.93 0.00
+vt 0.66 0.90 0.00
+vt 0.64 0.93 0.00
+vt 0.64 0.98 0.00
+vt 0.66 0.98 0.00
+vt 0.63 0.99 0.00
+vt 0.62 0.99 0.00
+vt 0.60 0.18 0.00
+vt 0.63 0.18 0.00
+vt 0.63 0.20 0.00
+vt 0.60 0.20 0.00
+vt 0.56 0.18 0.00
+vt 0.56 0.20 0.00
+vt 0.53 0.18 0.00
+vt 0.53 0.20 0.00
+vt 0.89 0.18 0.00
+vt 0.92 0.18 0.00
+vt 0.92 0.20 0.00
+vt 0.89 0.20 0.00
+vt 0.86 0.18 0.00
+vt 0.86 0.20 0.00
+vt 0.82 0.18 0.00
+vt 0.82 0.20 0.00
+vt 0.79 0.18 0.00
+vt 0.79 0.20 0.00
+vt 0.76 0.18 0.00
+vt 0.76 0.20 0.00
+vt 0.73 0.18 0.00
+vt 0.73 0.20 0.00
+vt 0.69 0.18 0.00
+vt 0.69 0.20 0.00
+vt 0.66 0.18 0.00
+vt 0.66 0.20 0.00
+vt 0.86 0.88 0.00
+vt 0.83 0.89 0.00
+vt 0.83 0.88 0.00
+vt 0.85 0.88 0.00
+vt 0.88 0.87 0.00
+vt 0.87 0.86 0.00
+vt 0.88 0.84 0.00
+vt 0.88 0.81 0.00
+vt 0.87 0.82 0.00
+vt 0.86 0.79 0.00
+vt 0.85 0.80 0.00
+vt 0.83 0.79 0.00
+vt 0.83 0.80 0.00
+vt 0.81 0.79 0.00
+vt 0.81 0.80 0.00
+vt 0.79 0.81 0.00
+vt 0.79 0.82 0.00
+vt 0.78 0.84 0.00
+vt 0.79 0.84 0.00
+vt 0.79 0.87 0.00
+vt 0.79 0.86 0.00
+vt 0.81 0.88 0.00
+vt 0.60 0.67 0.00
+vt 0.58 0.67 0.00
+vt 0.58 0.66 0.00
+vt 0.61 0.66 0.00
+vt 0.64 0.67 0.00
+vt 0.64 0.66 0.00
+vt 0.68 0.67 0.00
+vt 0.68 0.66 0.00
+vt 0.72 0.67 0.00
+vt 0.72 0.66 0.00
+vt 0.76 0.67 0.00
+vt 0.76 0.66 0.00
+vt 0.79 0.67 0.00
+vt 0.79 0.66 0.00
+vt 0.81 0.67 0.00
+vt 0.81 0.66 0.00
+vt 0.84 0.67 0.00
+vt 0.84 0.66 0.00
+vt 0.88 0.67 0.00
+vt 0.88 0.66 0.00
+vt 0.53 0.67 0.00
+vt 0.49 0.67 0.00
+vt 0.50 0.66 0.00
+vt 0.53 0.66 0.00
+vt 0.56 0.67 0.00
+vt 0.56 0.66 0.00
+vt 0.66 0.16 0.00
+vt 0.63 0.17 0.00
+vt 0.63 0.12 0.00
+vt 0.68 0.14 0.00
+vt 0.68 0.12 0.00
+vt 0.68 0.09 0.00
+vt 0.66 0.07 0.00
+vt 0.63 0.07 0.00
+vt 0.61 0.07 0.00
+vt 0.59 0.09 0.00
+vt 0.59 0.12 0.00
+vt 0.59 0.14 0.00
+vt 0.61 0.16 0.00
+vt 0.60 0.21 0.00
+vt 0.56 0.21 0.00
+vt 0.64 0.68 0.00
+vt 0.60 0.68 0.00
+vt 0.92 0.21 0.00
+vt 0.89 0.21 0.00
+vt 0.72 0.68 0.00
+vt 0.68 0.68 0.00
+vt 0.86 0.21 0.00
+vt 0.82 0.21 0.00
+vt 0.79 0.68 0.00
+vt 0.76 0.68 0.00
+vt 0.79 0.21 0.00
+vt 0.76 0.21 0.00
+vt 0.84 0.68 0.00
+vt 0.81 0.68 0.00
+vt 0.73 0.21 0.00
+vt 0.69 0.21 0.00
+vt 0.53 0.68 0.00
+vt 0.49 0.68 0.00
+vt 0.66 0.21 0.00
+vt 0.63 0.21 0.00
+vt 0.58 0.68 0.00
+vt 0.56 0.68 0.00
+vt 0.24 0.62 0.00
+vt 0.00 0.62 0.00
+vt 0.05 0.71 0.00
+vt 0.19 0.71 0.00
+vt 0.00 0.41 0.00
+vt 0.28 0.41 0.00
+vt 0.24 0.49 0.00
+vt 0.05 0.49 0.00
+vt 0.01 0.52 0.00
+vt 0.29 0.52 0.00
+vt 0.24 0.59 0.00
+vt 0.05 0.59 0.00
+vt 0.38 0.32 0.00
+vt 0.53 0.32 0.00
+vt 0.53 0.42 0.00
+vt 0.38 0.42 0.00
+vt 0.67 0.21 0.00
+vt 0.49 0.21 0.00
+vt 0.49 0.30 0.00
+vt 0.67 0.30 0.00
+vt 0.46 0.89 0.00
+vt 0.27 0.89 0.00
+vt 0.27 0.99 0.00
+vt 0.46 0.99 0.00
+vt 0.62 0.80 0.00
+vt 0.77 0.80 0.00
+vt 0.77 0.88 0.00
+vt 0.62 0.88 0.00
+vt 0.24 0.73 0.00
+vt 0.32 0.73 0.00
+vt 0.31 0.72 0.00
+vt 0.24 0.72 0.00
+vt 0.32 0.63 0.00
+vt 0.31 0.64 0.00
+vt 0.24 0.63 0.00
+vt 0.24 0.64 0.00
+vt 0.19 0.33 0.00
+vt 0.19 0.25 0.00
+vt 0.20 0.27 0.00
+vt 0.20 0.31 0.00
+vt 0.31 0.25 0.00
+vt 0.30 0.27 0.00
+vt 0.31 0.33 0.00
+vt 0.30 0.31 0.00
+vt 0.14 0.26 0.00
+vt 0.14 0.40 0.00
+vt 0.18 0.34 0.00
+vt 0.18 0.26 0.00
+vt 0.36 0.40 0.00
+vt 0.32 0.34 0.00
+vt 0.36 0.26 0.00
+vt 0.32 0.26 0.00
+vt 0.49 0.15 0.00
+vt 0.49 0.25 0.00
+vt 0.36 0.25 0.00
+vt 0.36 0.15 0.00
+vt 0.41 0.01 0.00
+vt 0.58 0.01 0.00
+vt 0.58 0.14 0.00
+vt 0.41 0.14 0.00
+vt 0.58 0.42 0.00
+vt 0.58 0.54 0.00
+vt 0.45 0.53 0.00
+vt 0.45 0.45 0.00
+vt 0.71 0.95 0.00
+vt 0.66 0.89 0.00
+vt 0.14 0.94 0.00
+vt 0.01 0.95 0.00
+vt 0.76 0.89 0.00
+vt 0.32 0.41 0.00
+vt 0.32 0.53 0.00
+vt 0.27 0.95 0.00
+vt 0.80 0.98 0.00
+vt 0.80 0.93 0.00
+vt 0.81 0.93 0.00
+vt 0.81 0.98 0.00
+vt 0.78 0.98 0.00
+vt 0.78 0.93 0.00
+vt 0.77 0.93 0.00
+vt 0.77 0.98 0.00
+vt 0.77 0.99 0.00
+vt 0.78 0.99 0.00
+vt 0.73 0.93 0.00
+vt 0.74 0.93 0.00
+vt 0.74 0.98 0.00
+vt 0.73 0.98 0.00
+vt 0.76 0.98 0.00
+vt 0.86 0.48 0.00
+vt 0.86 0.45 0.00
+vt 0.94 0.45 0.00
+vt 0.94 0.48 0.00
+vt 0.95 0.40 0.00
+vt 0.99 0.40 0.00
+vt 0.99 0.45 0.00
+vt 0.95 0.45 0.00
+vt 0.99 0.35 0.00
+vt 0.90 0.35 0.00
+vt 0.90 0.39 0.00
+vt 0.99 0.39 0.00
+vt 0.68 0.24 0.00
+vt 0.71 0.24 0.00
+vt 0.71 0.62 0.00
+vt 0.68 0.62 0.00
+vt 0.61 0.69 0.00
+vt 0.80 0.69 0.00
+vt 0.80 0.76 0.00
+vt 0.61 0.76 0.00
+vt 0.87 0.95 0.00
+vt 0.86 0.97 0.00
+vt 0.86 0.91 0.00
+vt 0.87 0.91 0.00
+vt 0.90 0.94 0.00
+vt 0.90 0.91 0.00
+vt 0.91 0.91 0.00
+vt 0.91 0.94 0.00
+vt 0.98 0.83 0.00
+vt 0.98 0.76 0.00
+vt 0.89 0.94 0.00
+vt 0.89 0.91 0.00
+vt 0.95 0.93 0.00
+vt 0.97 0.93 0.00
+vt 0.97 0.94 0.00
+vt 0.97 0.97 0.00
+vt 0.97 0.99 0.00
+vt 0.96 0.99 0.00
+vt 0.86 0.98 0.00
+vt 0.87 0.97 0.00
+vt 0.88 0.97 0.00
+vt 0.86 0.99 0.00
+vt 0.90 0.99 0.00
+vt 0.90 0.97 0.00
+vt 0.91 0.99 0.00
+vt 0.93 0.97 0.00
+vt 0.93 0.98 0.00
+vt 0.85 0.95 0.00
+vt 0.85 0.91 0.00
+vt 0.98 0.90 0.00
+vt 0.93 0.93 0.00
+vt 0.84 0.97 0.00
+vt 0.85 0.97 0.00
+vt 0.99 0.78 0.00
+vt 0.99 0.67 0.00
+vt 0.99 0.83 0.00
+vt 0.99 0.89 0.00
+vt 0.99 0.99 0.00
+vt 0.93 0.95 0.00
+vt 0.93 0.96 0.00
+vt 0.90 0.96 0.00
+vt 0.90 0.95 0.00
+vt 0.96 0.95 0.00
+vt 0.96 0.96 0.00
+vt 0.84 0.92 0.00
+vt 0.85 0.92 0.00
+vt 0.98 0.99 0.00
+vt 0.98 0.67 0.00
+vt 0.88 0.92 0.00
+vt 0.97 0.95 0.00
+vt 0.89 0.95 0.00
+vt 0.95 0.92 0.00
+vt 0.97 0.92 0.00
+vt 0.93 0.92 0.00
+vt 0.98 0.95 0.00
+vt 0.98 0.96 0.00
+vt 0.97 0.96 0.00
+vt 0.98 0.94 0.00
+vt 0.89 0.99 0.00
+vt 0.89 0.97 0.00
+vt 0.88 0.96 0.00
+vt 0.88 0.95 0.00
+vt 0.89 0.96 0.00
+vt 0.04 0.35 0.00
+vt 0.04 0.25 0.00
+vt 0.07 0.25 0.00
+vt 0.07 0.36 0.00
+vt 0.13 0.33 0.00
+vt 0.10 0.35 0.00
+vt 0.10 0.25 0.00
+vt 0.13 0.25 0.00
+vt 0.01 0.33 0.00
+vt 0.01 0.25 0.00
+vt 0.93 0.52 0.00
+vt 0.94 0.52 0.00
+vt 0.94 0.58 0.00
+vt 0.93 0.58 0.00
+vt 0.92 0.49 0.00
+vt 0.91 0.49 0.00
+vt 0.91 0.54 0.00
+vt 0.92 0.55 0.00
+vt 0.97 0.52 0.00
+vt 0.95 0.52 0.00
+vt 0.95 0.58 0.00
+vt 0.97 0.58 0.00
+vt 0.94 0.64 0.00
+vt 0.93 0.64 0.00
+vt 0.89 0.58 0.00
+vt 0.89 0.59 0.00
+vt 0.95 0.64 0.00
+vt 0.97 0.64 0.00
+vt 0.94 0.69 0.00
+vt 0.93 0.69 0.00
+vt 0.86 0.59 0.00
+vt 0.86 0.61 0.00
+vt 0.95 0.69 0.00
+vt 0.97 0.69 0.00
+vt 0.83 0.58 0.00
+vt 0.83 0.59 0.00
+vt 0.81 0.54 0.00
+vt 0.80 0.55 0.00
+vt 0.81 0.49 0.00
+vt 0.80 0.49 0.00
+vt 0.82 0.22 0.00
+vt 0.85 0.22 0.00
+vt 0.84 0.39 0.00
+vt 0.81 0.39 0.00
+vt 0.76 0.22 0.00
+vt 0.80 0.22 0.00
+vt 0.79 0.38 0.00
+vt 0.76 0.38 0.00
+vt 0.82 0.52 0.00
+vt 0.85 0.52 0.00
+vt 0.80 0.51 0.00
+vt 0.76 0.53 0.00
+vt 0.18 0.92 0.00
+vt 0.09 0.92 0.00
+vt 0.09 0.93 0.00
+vt 0.18 0.93 0.00
+vt 0.00 0.90 0.00
+vt 0.10 0.89 0.00
+vt 0.10 0.90 0.00
+vt 0.00 0.91 0.00
+vt 0.00 0.92 0.00
+vt 0.00 0.93 0.00
+vt 0.20 0.90 0.00
+vt 0.20 0.91 0.00
+vt 0.20 0.93 0.00
+vt 0.23 0.90 0.00
+vt 0.23 0.93 0.00
+vt 0.26 0.76 0.00
+vt 0.26 0.90 0.00
+vt 0.22 0.84 0.00
+vt 0.22 0.76 0.00
+vt 0.11 0.81 0.00
+vt 0.11 0.87 0.00
+vt 0.02 0.88 0.00
+vt 0.02 0.81 0.00
+vt 0.31 0.84 0.00
+vt 0.31 0.76 0.00
+vt 0.11 0.74 0.00
+vt 0.11 0.80 0.00
+vt 0.01 0.80 0.00
+vt 0.01 0.74 0.00
+vt 0.20 0.81 0.00
+vt 0.20 0.88 0.00
+vt 0.20 0.74 0.00
+vt 0.20 0.80 0.00
+vt 0.36 0.65 0.00
+vt 0.36 0.75 0.00
+vt 0.34 0.75 0.00
+vt 0.33 0.65 0.00
+vt 0.36 0.89 0.00
+vt 0.33 0.87 0.00
+vt 0.45 0.67 0.00
+vt 0.45 0.76 0.00
+vt 0.43 0.76 0.00
+vt 0.42 0.67 0.00
+vt 0.45 0.89 0.00
+vt 0.42 0.89 0.00
+vt 0.41 0.66 0.00
+vt 0.38 0.66 0.00
+vt 0.39 0.77 0.00
+vt 0.41 0.77 0.00
+vt 0.38 0.88 0.00
+vt 0.41 0.88 0.00
+vt 0.72 0.62 0.00
+vt 0.72 0.52 0.00
+vt 0.73 0.52 0.00
+vt 0.73 0.62 0.00
+vt 0.74 0.62 0.00
+vt 0.74 0.43 0.00
+vt 0.73 0.43 0.00
+vt 0.59 0.58 0.00
+vt 0.64 0.58 0.00
+vt 0.64 0.63 0.00
+vt 0.59 0.63 0.00
+vt 0.75 0.42 0.00
+vt 0.73 0.42 0.00
+vt 0.73 0.36 0.00
+vt 0.75 0.36 0.00
+vt 0.92 0.71 0.00
+vt 0.97 0.71 0.00
+vt 0.92 0.73 0.00
+vt 0.73 0.29 0.00
+vt 0.73 0.24 0.00
+vt 0.75 0.24 0.00
+vt 0.75 0.29 0.00
+vt 0.86 0.72 0.00
+vt 0.86 0.73 0.00
+vt 0.81 0.72 0.00
+vt 0.81 0.70 0.00
+vt 0.73 0.33 0.00
+vt 0.75 0.33 0.00
+vt 0.89 0.74 0.00
+vt 0.89 0.72 0.00
+vt 0.83 0.62 0.00
+vt 0.92 0.62 0.00
+vt 0.92 0.61 0.00
+vt 0.83 0.61 0.00
+vt 0.83 0.63 0.00
+vt 0.92 0.63 0.00
+vt 0.71 0.65 0.00
+vt 0.71 0.66 0.00
+vt 0.75 0.66 0.00
+vt 0.75 0.65 0.00
+vt 0.71 0.64 0.00
+vt 0.75 0.64 0.00
+vt 0.58 0.64 0.00
+vt 0.62 0.66 0.00
+vt 0.62 0.64 0.00
+vt 0.92 0.64 0.00
+vt 0.83 0.64 0.00
+vt 0.75 0.61 0.00
+vt 0.75 0.62 0.00
+vt 0.75 0.63 0.00
+vt 0.67 0.66 0.00
+vt 0.67 0.64 0.00
+vt 0.41 0.65 0.00
+vt 0.41 0.57 0.00
+vt 0.44 0.57 0.00
+vt 0.44 0.66 0.00
+vt 0.48 0.65 0.00
+vt 0.48 0.57 0.00
+# 694 texture coords
+
+o castle
+g castle
+f 1/1/1 2/2/2 3/3/2
+f 3/3/2 4/4/1 1/1/1
+f 2/2/2 5/5/3 6/6/3
+f 6/6/3 3/3/2 2/2/2
+f 5/5/3 7/7/4 8/8/4
+f 8/8/4 6/6/3 5/5/3
+f 7/9/4 9/10/5 10/11/5
+f 10/11/5 8/12/4 7/9/4
+f 9/10/5 11/13/6 12/14/6
+f 12/14/6 10/11/5 9/10/5
+f 11/13/6 13/15/7 14/16/7
+f 14/16/7 12/14/6 11/13/6
+f 13/15/7 15/17/8 16/18/8
+f 16/18/8 14/16/7 13/15/7
+f 15/17/8 17/19/9 18/20/9
+f 18/20/9 16/18/8 15/17/8
+f 17/19/9 19/21/10 20/22/10
+f 20/22/10 18/20/9 17/19/9
+f 19/21/10 21/23/11 22/24/11
+f 22/24/11 20/22/10 19/21/10
+f 21/23/11 23/25/12 24/26/12
+f 24/26/12 22/24/11 21/23/11
+f 23/25/12 1/1/1 4/4/1
+f 4/4/1 24/26/12 23/25/12
+f 25/27/13 26/28/13 27/29/13
+f 27/29/13 28/30/13 25/27/13
+f 29/31/14 25/27/14 28/30/14
+f 28/30/14 30/32/14 29/31/14
+f 31/33/15 29/31/15 30/32/15
+f 30/32/15 32/34/15 31/33/15
+f 33/35/16 31/36/16 32/37/16
+f 32/37/16 34/38/16 33/35/16
+f 35/39/17 33/35/17 34/38/17
+f 34/38/17 36/40/17 35/39/17
+f 37/41/18 35/39/18 36/40/18
+f 36/40/18 38/42/18 37/41/18
+f 39/43/19 37/41/19 38/42/19
+f 38/42/19 40/44/19 39/43/19
+f 41/45/20 39/43/20 40/44/20
+f 40/44/20 42/46/20 41/45/20
+f 43/47/21 41/45/21 42/46/21
+f 42/46/21 44/48/21 43/47/21
+f 45/49/22 43/47/22 44/48/22
+f 44/48/22 46/50/22 45/49/22
+f 47/51/23 45/49/23 46/50/23
+f 46/50/23 48/52/23 47/51/23
+f 26/28/24 47/51/25 48/52/25
+f 48/52/25 27/29/24 26/28/24
+f 2/53/26 1/54/26 26/54/26
+f 26/54/26 25/53/26 2/53/26
+f 1/54/26 23/55/26 47/55/26
+f 47/55/26 26/54/26 1/54/26
+f 23/55/26 21/56/26 45/56/26
+f 45/56/26 47/55/26 23/55/26
+f 21/56/26 19/57/26 43/57/26
+f 43/57/26 45/56/26 21/56/26
+f 19/57/26 17/58/26 41/59/26
+f 41/59/26 43/57/26 19/57/26
+f 17/58/26 15/60/26 39/61/26
+f 39/61/26 41/59/26 17/58/26
+f 15/60/26 13/62/26 37/62/26
+f 37/62/26 39/61/26 15/60/26
+f 13/62/26 11/63/26 35/64/26
+f 35/64/26 37/62/26 13/62/26
+f 11/63/26 9/65/26 33/66/26
+f 33/66/26 35/64/26 11/63/26
+f 9/65/26 7/67/26 31/67/26
+f 31/67/26 33/66/26 9/65/26
+f 7/67/26 5/68/26 29/68/26
+f 29/68/26 31/67/26 7/67/26
+f 5/68/26 2/53/26 25/53/26
+f 25/53/26 29/68/26 5/68/26
+f 49/54/27 50/53/27 28/53/27
+f 28/53/27 27/54/27 49/54/27
+f 50/53/27 51/68/27 30/68/27
+f 30/68/27 28/53/27 50/53/27
+f 51/68/27 52/67/27 32/67/27
+f 32/67/27 30/68/27 51/68/27
+f 52/67/27 53/65/27 34/66/27
+f 34/66/27 32/67/27 52/67/27
+f 53/65/27 54/63/27 36/64/27
+f 36/64/27 34/66/27 53/65/27
+f 54/63/27 55/62/27 38/62/27
+f 38/62/27 36/64/27 54/63/27
+f 55/62/27 56/60/27 40/61/27
+f 40/61/27 38/62/27 55/62/27
+f 56/60/27 57/58/27 42/59/27
+f 42/59/27 40/61/27 56/60/27
+f 57/58/27 58/57/27 44/57/27
+f 44/57/27 42/59/27 57/58/27
+f 58/57/27 59/56/27 46/56/27
+f 46/56/27 44/57/27 58/57/27
+f 59/56/27 60/55/27 48/55/27
+f 48/55/27 46/56/27 59/56/27
+f 60/55/27 49/54/27 27/54/27
+f 27/54/27 48/55/27 60/55/27
+f 49/69/1 61/70/1 62/71/2
+f 62/71/2 50/72/2 49/69/1
+f 50/72/2 62/71/2 63/73/14
+f 63/73/14 51/74/14 50/72/2
+f 51/74/15 63/73/15 64/75/15
+f 64/75/15 52/76/15 51/74/15
+f 52/76/16 64/75/16 65/77/5
+f 65/77/5 53/78/5 52/76/16
+f 53/78/5 65/77/5 66/79/6
+f 66/79/6 54/80/6 53/78/5
+f 54/81/6 66/82/6 67/83/7
+f 67/83/7 55/84/7 54/81/6
+f 55/84/7 67/83/7 68/85/8
+f 68/85/8 56/86/8 55/84/7
+f 56/86/8 68/85/8 69/87/9
+f 69/87/9 57/88/9 56/86/8
+f 57/88/9 69/87/9 70/89/10
+f 70/89/10 58/90/10 57/88/9
+f 58/90/10 70/89/10 71/91/11
+f 71/91/11 59/92/11 58/90/10
+f 59/92/11 71/91/11 72/93/12
+f 72/93/12 60/94/12 59/92/11
+f 60/94/12 72/93/12 61/70/1
+f 61/70/1 49/69/1 60/94/12
+f 73/95/26 74/96/26 75/96/26
+f 75/96/26 76/95/26 73/95/26
+f 77/97/26 73/95/26 76/95/26
+f 76/95/26 78/97/26 77/97/26
+f 79/67/26 77/97/26 78/97/26
+f 78/97/26 80/98/26 79/67/26
+f 81/99/26 79/67/26 80/98/26
+f 80/98/26 82/99/26 81/99/26
+f 83/100/26 81/99/26 82/99/26
+f 82/99/26 84/100/26 83/100/26
+f 85/101/26 83/100/26 84/100/26
+f 84/100/26 86/101/26 85/101/26
+f 87/61/26 85/101/26 86/101/26
+f 86/101/26 88/61/26 87/61/26
+f 89/59/26 87/61/26 88/61/26
+f 88/61/26 90/102/26 89/59/26
+f 91/103/26 89/59/26 90/102/26
+f 90/102/26 92/103/26 91/103/26
+f 93/104/26 91/103/26 92/103/26
+f 92/103/26 94/105/26 93/104/26
+f 95/106/26 93/104/26 94/105/26
+f 94/105/26 96/106/26 95/106/26
+f 74/96/26 95/106/26 96/106/26
+f 96/106/26 75/96/26 74/96/26
+f 76/107/28 75/108/28 97/109/28
+f 97/109/28 98/110/28 76/107/28
+f 78/111/29 76/107/29 98/110/29
+f 98/110/29 99/112/29 78/111/29
+f 80/113/30 78/111/30 99/112/30
+f 99/112/30 100/114/30 80/113/30
+f 82/115/31 80/113/31 100/114/31
+f 100/114/31 101/116/31 82/115/31
+f 84/117/32 82/115/32 101/116/32
+f 101/116/32 102/118/32 84/117/32
+f 86/119/33 84/117/33 102/118/33
+f 102/118/33 103/120/33 86/119/33
+f 88/121/34 86/119/34 103/120/34
+f 103/120/34 104/122/34 88/121/34
+f 90/123/35 88/121/35 104/122/35
+f 104/122/35 105/124/35 90/123/35
+f 92/125/36 90/123/36 105/124/36
+f 105/124/36 106/126/36 92/125/36
+f 94/127/37 92/128/37 106/129/37
+f 106/129/37 107/130/37 94/127/37
+f 96/131/38 94/127/38 107/130/38
+f 107/130/38 108/132/38 96/131/38
+f 75/108/39 96/131/39 108/132/39
+f 108/132/39 97/109/39 75/108/39
+f 98/110/40 97/109/40 109/133/40
+f 109/133/40 110/134/40 98/110/40
+f 99/112/41 98/110/41 110/134/41
+f 110/134/41 111/135/41 99/112/41
+f 100/114/42 99/112/42 111/135/42
+f 111/135/42 112/136/43 100/114/42
+f 101/116/44 100/114/44 112/136/44
+f 112/136/44 113/137/44 101/116/44
+f 102/118/45 101/116/45 113/137/45
+f 113/137/45 114/138/45 102/118/45
+f 103/120/46 102/118/46 114/138/46
+f 114/138/46 115/139/46 103/120/46
+f 104/122/47 103/120/48 115/139/48
+f 115/139/48 116/140/48 104/122/47
+f 105/124/49 104/122/49 116/140/49
+f 116/140/49 117/141/49 105/124/49
+f 106/126/50 105/124/50 117/141/50
+f 117/141/50 118/142/50 106/126/50
+f 107/130/51 106/129/51 118/143/52
+f 118/143/52 119/144/51 107/130/51
+f 108/132/53 107/130/53 119/144/53
+f 119/144/53 120/145/53 108/132/53
+f 97/109/54 108/132/55 120/145/54
+f 120/145/54 109/133/54 97/109/54
+f 121/146/56 122/147/56 62/148/56
+f 62/148/56 61/149/56 121/146/56
+f 122/147/57 123/150/58 63/151/58
+f 63/151/58 62/148/57 122/147/57
+f 123/152/59 124/153/59 64/154/59
+f 64/154/59 63/155/59 123/152/59
+f 124/153/60 125/142/60 65/156/60
+f 65/156/60 64/154/60 124/153/60
+f 125/142/61 126/157/62 66/158/61
+f 66/158/61 65/156/62 125/142/61
+f 126/157/63 127/159/63 67/160/63
+f 67/160/63 66/158/63 126/157/63
+f 127/159/64 128/161/64 68/162/64
+f 68/162/64 67/160/64 127/159/64
+f 128/161/65 129/163/66 69/164/66
+f 69/164/66 68/162/66 128/161/65
+f 129/163/67 130/165/67 70/166/67
+f 70/166/67 69/164/67 129/163/67
+f 130/165/68 131/167/68 71/168/68
+f 71/168/68 70/166/68 130/165/68
+f 131/167/69 132/169/70 72/170/70
+f 72/170/70 71/168/70 131/167/69
+f 132/169/71 121/146/71 61/149/71
+f 61/149/71 72/170/71 132/169/71
+f 74/171/1 73/172/2 122/173/2
+f 122/173/2 121/174/1 74/171/1
+f 73/172/2 77/175/3 123/176/3
+f 123/176/3 122/173/2 73/172/2
+f 77/177/3 79/178/4 124/179/4
+f 124/179/4 123/180/3 77/177/3
+f 79/178/4 81/86/5 125/181/5
+f 125/181/5 124/179/4 79/178/4
+f 81/86/5 83/182/6 126/183/6
+f 126/183/6 125/181/5 81/86/5
+f 83/182/6 85/184/7 127/185/7
+f 127/185/7 126/183/6 83/182/6
+f 85/184/7 87/186/8 128/187/8
+f 128/187/8 127/185/7 85/184/7
+f 87/186/8 89/188/9 129/189/9
+f 129/189/9 128/187/8 87/186/8
+f 89/188/9 91/190/10 130/191/10
+f 130/191/10 129/189/9 89/188/9
+f 91/190/10 93/76/11 131/192/11
+f 131/192/11 130/191/10 91/190/10
+f 93/76/11 95/193/12 132/194/12
+f 132/194/12 131/192/11 93/76/11
+f 95/193/12 74/171/1 121/174/1
+f 121/174/1 132/194/12 95/193/12
+f 133/195/72 134/196/72 135/197/72
+f 135/197/72 136/198/72 133/195/72
+f 137/199/73 138/200/73 139/201/73
+f 139/201/73 140/202/73 137/199/73
+f 141/203/74 142/204/74 143/205/74
+f 143/205/74 144/206/74 141/203/74
+f 145/202/75 146/201/75 147/200/75
+f 147/200/75 148/199/75 145/202/75
+f 149/207/76 150/207/76 151/208/76
+f 151/208/76 152/209/76 149/207/76
+f 153/209/77 154/210/77 155/211/77
+f 142/212/78 156/196/78 157/213/78
+f 157/213/78 143/214/78 142/212/78
+f 158/210/79 159/209/79 160/211/79
+f 161/215/80 162/216/80 160/211/80
+f 160/211/80 159/209/80 161/215/80
+f 163/217/81 164/218/81 135/197/81
+f 135/197/81 134/196/81 163/217/81
+f 165/219/82 166/220/82 142/204/82
+f 142/204/82 141/203/82 165/219/82
+f 167/209/83 168/208/83 150/207/83
+f 150/207/83 149/207/83 167/209/83
+f 142/212/84 166/214/84 169/213/84
+f 169/213/84 156/196/84 142/212/84
+f 161/215/85 153/209/85 155/211/85
+f 155/211/85 162/216/85 161/215/85
+f 170/221/75 157/222/75 133/222/75
+f 133/222/75 136/221/75 170/221/75
+f 157/222/86 156/203/86 134/203/86
+f 134/203/86 133/222/86 157/222/86
+f 156/203/87 169/206/87 163/206/87
+f 163/206/87 134/203/87 156/203/87
+f 169/206/73 171/223/73 164/223/73
+f 164/223/73 163/206/73 169/206/73
+f 171/224/88 172/225/88 135/226/88
+f 135/226/88 164/224/88 171/224/88
+f 172/225/89 170/224/89 136/224/89
+f 136/224/89 135/226/89 172/225/89
+f 166/214/79 173/227/79 171/228/79
+f 171/228/79 169/213/79 166/214/79
+f 173/229/75 166/220/75 165/219/75
+f 165/219/75 174/221/75 173/229/75
+f 144/206/73 143/205/73 175/230/73
+f 175/230/73 176/223/73 144/206/73
+f 175/227/77 143/214/77 157/213/77
+f 157/213/77 170/228/77 175/227/77
+f 139/201/73 138/200/73 177/199/73
+f 177/199/73 178/202/73 139/201/73
+f 175/231/90 170/224/90 155/232/90
+f 155/232/90 154/233/91 175/231/90
+f 170/224/89 172/225/89 162/234/89
+f 162/234/89 155/232/89 170/224/89
+f 172/225/88 171/224/88 160/232/88
+f 160/232/88 162/234/88 172/225/88
+f 171/224/92 173/231/92 158/233/92
+f 158/233/92 160/232/92 171/224/92
+f 147/200/75 146/201/75 179/202/75
+f 179/202/75 180/199/75 147/200/75
+f 151/208/76 150/207/76 161/235/76
+f 161/235/76 159/236/76 151/208/76
+f 150/207/83 168/208/83 153/236/83
+f 153/236/83 161/235/83 150/207/83
+f 176/236/27 175/231/27 138/237/27
+f 138/237/27 137/238/27 176/236/27
+f 175/231/27 154/233/27 177/239/27
+f 177/239/27 138/237/27 175/231/27
+f 154/210/93 153/209/93 178/240/94
+f 178/240/94 177/241/94 154/210/93
+f 153/236/26 168/208/26 139/242/26
+f 139/242/26 178/238/26 153/236/26
+f 168/208/26 167/209/26 140/240/26
+f 140/240/26 139/242/26 168/208/26
+f 152/209/26 151/208/26 146/242/26
+f 146/242/26 145/240/26 152/209/26
+f 151/208/26 159/236/26 179/238/26
+f 179/238/26 146/242/26 151/208/26
+f 159/209/95 158/210/95 180/241/95
+f 180/241/95 179/240/95 159/209/95
+f 158/233/27 173/231/27 147/237/27
+f 147/237/27 180/239/27 158/233/27
+f 173/231/27 174/236/27 148/238/27
+f 148/238/27 147/237/27 173/231/27
+f 181/195/96 182/196/96 183/197/96
+f 183/197/96 184/198/96 181/195/96
+f 185/199/97 186/200/98 187/201/98
+f 187/201/98 188/202/97 185/199/97
+f 189/203/99 190/204/99 191/205/99
+f 191/205/99 192/206/99 189/203/99
+f 193/202/100 194/201/101 195/200/101
+f 195/200/101 196/199/100 193/202/100
+f 197/207/102 198/207/102 199/208/102
+f 199/208/102 200/209/102 197/207/102
+f 201/209/103 202/210/103 203/211/103
+f 190/212/104 204/196/104 205/213/104
+f 205/213/104 191/214/104 190/212/104
+f 206/210/105 207/209/105 208/211/105
+f 209/215/106 210/216/106 208/211/106
+f 208/211/106 207/209/106 209/215/106
+f 211/217/107 212/218/107 183/197/107
+f 183/197/107 182/196/107 211/217/107
+f 213/219/108 214/220/108 190/204/108
+f 190/204/108 189/203/108 213/219/108
+f 215/209/109 216/208/109 198/207/109
+f 198/207/109 197/207/109 215/209/109
+f 190/212/110 214/214/110 217/213/110
+f 217/213/110 204/196/110 190/212/110
+f 209/215/111 201/209/111 203/211/111
+f 203/211/111 210/216/111 209/215/111
+f 218/221/100 205/222/100 181/222/101
+f 181/222/101 184/221/101 218/221/100
+f 205/222/112 204/203/112 182/203/112
+f 182/203/112 181/222/112 205/222/112
+f 204/203/113 217/206/113 211/206/113
+f 211/206/113 182/203/113 204/203/113
+f 217/206/98 219/223/98 212/223/98
+f 212/223/98 211/206/98 217/206/98
+f 219/224/114 220/225/114 183/226/114
+f 183/226/114 212/224/114 219/224/114
+f 220/225/115 218/224/115 184/224/115
+f 184/224/115 183/226/115 220/225/115
+f 214/214/105 221/227/105 219/228/105
+f 219/228/105 217/213/105 214/214/105
+f 221/229/100 214/220/100 213/219/100
+f 213/219/100 222/221/100 221/229/100
+f 192/206/98 191/205/98 223/230/98
+f 223/230/98 224/223/98 192/206/98
+f 223/227/103 191/214/103 205/213/103
+f 205/213/103 218/228/103 223/227/103
+f 187/201/98 186/200/98 225/199/97
+f 225/199/97 226/202/97 187/201/98
+f 223/231/116 218/224/116 203/232/116
+f 203/232/116 202/233/116 223/231/116
+f 218/224/115 220/225/115 210/234/115
+f 210/234/115 203/232/115 218/224/115
+f 220/225/114 219/224/114 208/232/114
+f 208/232/114 210/234/114 220/225/114
+f 219/224/117 221/231/117 206/233/117
+f 206/233/117 208/232/117 219/224/117
+f 195/200/101 194/201/101 227/202/100
+f 227/202/100 228/199/100 195/200/101
+f 199/208/102 198/207/102 209/235/102
+f 209/235/102 207/236/102 199/208/102
+f 198/207/109 216/208/109 201/236/109
+f 201/236/109 209/235/109 198/207/109
+f 224/236/27 223/231/27 186/237/27
+f 186/237/27 185/238/27 224/236/27
+f 223/231/27 202/233/27 225/239/27
+f 225/239/27 186/237/27 223/231/27
+f 202/210/118 201/209/118 226/240/118
+f 226/240/118 225/241/118 202/210/118
+f 201/236/26 216/208/26 187/242/26
+f 187/242/26 226/238/26 201/236/26
+f 216/208/26 215/209/26 188/240/26
+f 188/240/26 187/242/26 216/208/26
+f 200/209/26 199/208/26 194/242/26
+f 194/242/26 193/240/26 200/209/26
+f 199/208/26 207/236/26 227/238/26
+f 227/238/26 194/242/26 199/208/26
+f 207/209/119 206/210/119 228/241/119
+f 228/241/119 227/240/119 207/209/119
+f 206/233/27 221/231/27 195/237/27
+f 195/237/27 228/239/27 206/233/27
+f 221/231/27 222/236/27 196/238/27
+f 196/238/27 195/237/27 221/231/27
+f 229/243/120 230/244/120 231/245/120
+f 231/245/120 232/246/120 229/243/120
+f 229/247/121 232/248/121 233/249/121
+f 233/249/121 234/250/121 229/247/121
+f 232/246/122 231/245/122 235/251/122
+f 235/251/122 233/252/122 232/246/122
+f 231/248/123 230/247/123 236/250/123
+f 236/250/123 235/249/123 231/248/123
+f 237/195/124 238/196/124 239/197/124
+f 239/197/124 240/198/124 237/195/124
+f 241/199/125 242/200/98 243/201/98
+f 243/201/98 244/202/125 241/199/125
+f 245/203/99 246/204/99 247/205/99
+f 247/205/99 248/206/99 245/203/99
+f 249/202/100 250/201/101 251/200/101
+f 251/200/101 252/199/100 249/202/100
+f 253/207/102 254/207/102 255/208/102
+f 255/208/102 256/209/102 253/207/102
+f 257/209/103 258/210/103 259/211/103
+f 246/212/104 260/196/104 261/213/104
+f 261/213/104 247/214/104 246/212/104
+f 262/210/105 263/209/105 264/211/105
+f 265/215/106 266/216/106 264/211/106
+f 264/211/106 263/209/106 265/215/106
+f 267/217/107 268/218/107 239/197/107
+f 239/197/107 238/196/107 267/217/107
+f 269/219/126 270/220/126 246/204/108
+f 246/204/108 245/203/108 269/219/126
+f 271/209/109 272/208/109 254/207/109
+f 254/207/109 253/207/109 271/209/109
+f 246/212/110 270/214/110 273/213/110
+f 273/213/110 260/196/110 246/212/110
+f 265/215/111 257/209/111 259/211/111
+f 259/211/111 266/216/111 265/215/111
+f 274/221/100 261/222/100 237/222/100
+f 237/222/100 240/221/100 274/221/100
+f 261/222/112 260/203/112 238/203/112
+f 238/203/112 237/222/112 261/222/112
+f 260/203/113 273/206/113 267/206/113
+f 267/206/113 238/203/113 260/203/113
+f 273/206/98 275/223/98 268/223/98
+f 268/223/98 267/206/98 273/206/98
+f 275/224/114 276/225/114 239/226/114
+f 239/226/114 268/224/114 275/224/114
+f 276/225/115 274/224/115 240/224/115
+f 240/224/115 239/226/115 276/225/115
+f 270/214/105 277/227/105 275/228/105
+f 275/228/105 273/213/105 270/214/105
+f 277/229/101 270/220/101 269/219/101
+f 269/219/101 278/221/101 277/229/101
+f 248/206/98 247/205/97 279/230/97
+f 279/230/97 280/223/98 248/206/98
+f 279/227/103 247/214/103 261/213/103
+f 261/213/103 274/228/103 279/227/103
+f 243/201/98 242/200/98 281/199/97
+f 281/199/97 282/202/97 243/201/98
+f 279/231/116 274/224/116 259/232/116
+f 259/232/116 258/233/116 279/231/116
+f 274/224/115 276/225/115 266/234/115
+f 266/234/115 259/232/115 274/224/115
+f 276/225/114 275/224/114 264/232/114
+f 264/232/114 266/234/114 276/225/114
+f 275/224/117 277/231/117 262/233/117
+f 262/233/117 264/232/117 275/224/117
+f 251/200/101 250/201/101 283/202/100
+f 283/202/100 284/199/100 251/200/101
+f 255/208/102 254/207/102 265/235/102
+f 265/235/102 263/236/102 255/208/102
+f 254/207/109 272/208/109 257/236/109
+f 257/236/109 265/235/109 254/207/109
+f 280/236/27 279/231/27 242/237/27
+f 242/237/27 241/238/27 280/236/27
+f 279/231/27 258/233/27 281/239/27
+f 281/239/27 242/237/27 279/231/27
+f 258/210/118 257/209/118 282/240/118
+f 282/240/118 281/241/118 258/210/118
+f 257/236/26 272/208/26 243/242/26
+f 243/242/26 282/238/26 257/236/26
+f 272/208/26 271/209/26 244/240/26
+f 244/240/26 243/242/26 272/208/26
+f 256/209/26 255/208/26 250/242/26
+f 250/242/26 249/240/26 256/209/26
+f 255/208/26 263/236/26 283/238/26
+f 283/238/26 250/242/26 255/208/26
+f 263/209/119 262/210/119 284/241/119
+f 284/241/119 283/240/119 263/209/119
+f 262/233/27 277/231/27 251/237/27
+f 251/237/27 284/239/27 262/233/27
+f 277/231/27 278/236/27 252/238/27
+f 252/238/27 251/237/27 277/231/27
+f 285/243/127 286/244/127 287/245/127
+f 287/245/127 288/246/127 285/243/127
+f 285/247/128 288/248/128 289/249/128
+f 289/249/128 290/250/128 285/247/128
+f 288/246/129 287/245/129 291/251/129
+f 291/251/129 289/252/129 288/246/129
+f 287/248/130 286/247/130 292/250/130
+f 292/250/130 291/249/130 287/248/130
+f 293/195/131 294/196/131 295/197/131
+f 295/197/131 296/198/131 293/195/131
+f 297/199/75 298/200/75 299/201/75
+f 299/201/75 300/202/75 297/199/75
+f 301/203/132 302/204/132 303/205/132
+f 303/205/132 304/206/132 301/203/132
+f 305/202/73 306/201/73 307/200/73
+f 307/200/73 308/199/73 305/202/73
+f 309/207/83 310/207/83 311/208/83
+f 311/208/83 312/209/83 309/207/83
+f 313/209/133 314/210/133 315/211/133
+f 302/212/134 316/196/134 317/213/134
+f 317/213/134 303/214/134 302/212/134
+f 318/210/135 319/209/135 320/211/135
+f 321/215/136 322/216/136 320/211/136
+f 320/211/136 319/209/136 321/215/136
+f 323/217/137 324/218/137 295/197/138
+f 295/197/138 294/196/138 323/217/137
+f 325/219/139 326/220/139 302/204/139
+f 302/204/139 301/203/139 325/219/139
+f 327/209/76 328/208/76 310/207/76
+f 310/207/76 309/207/76 327/209/76
+f 302/212/140 326/214/140 329/213/140
+f 329/213/140 316/196/140 302/212/140
+f 321/215/141 313/209/141 315/211/141
+f 315/211/141 322/216/141 321/215/141
+f 330/221/73 317/222/73 293/222/73
+f 293/222/73 296/221/73 330/221/73
+f 317/222/87 316/203/87 294/203/87
+f 294/203/87 293/222/87 317/222/87
+f 316/203/86 329/206/86 323/206/86
+f 323/206/86 294/203/86 316/203/86
+f 329/206/75 331/223/75 324/223/75
+f 324/223/75 323/206/75 329/206/75
+f 331/224/142 332/225/142 295/226/142
+f 295/226/142 324/224/142 331/224/142
+f 332/225/143 330/224/143 296/224/143
+f 296/224/143 295/226/143 332/225/143
+f 326/214/135 333/227/135 331/228/135
+f 331/228/135 329/213/135 326/214/135
+f 333/229/73 326/220/73 325/219/73
+f 325/219/73 334/221/73 333/229/73
+f 304/206/75 303/205/75 335/230/75
+f 335/230/75 336/223/75 304/206/75
+f 335/227/133 303/214/133 317/213/133
+f 317/213/133 330/228/133 335/227/133
+f 299/201/75 298/200/75 337/199/75
+f 337/199/75 338/202/75 299/201/75
+f 335/231/144 330/224/144 315/232/144
+f 315/232/144 314/233/144 335/231/144
+f 330/224/143 332/225/143 322/234/143
+f 322/234/143 315/232/143 330/224/143
+f 332/225/142 331/224/142 320/232/142
+f 320/232/142 322/234/142 332/225/142
+f 331/224/145 333/231/145 318/233/145
+f 318/233/145 320/232/145 331/224/145
+f 307/200/73 306/201/73 339/202/73
+f 339/202/73 340/199/73 307/200/73
+f 311/208/83 310/207/83 321/235/83
+f 321/235/83 319/236/83 311/208/83
+f 310/207/76 328/208/76 313/236/76
+f 313/236/76 321/235/76 310/207/76
+f 336/236/27 335/231/27 298/237/27
+f 298/237/27 297/238/27 336/236/27
+f 335/231/27 314/233/27 337/239/27
+f 337/239/27 298/237/27 335/231/27
+f 314/210/146 313/209/146 338/240/146
+f 338/240/146 337/241/146 314/210/146
+f 313/236/26 328/208/26 299/242/26
+f 299/242/26 338/238/26 313/236/26
+f 328/208/26 327/209/26 300/240/26
+f 300/240/26 299/242/26 328/208/26
+f 312/209/26 311/208/26 306/242/26
+f 306/242/26 305/240/26 312/209/26
+f 311/208/26 319/236/26 339/238/26
+f 339/238/26 306/242/26 311/208/26
+f 319/209/147 318/210/147 340/241/147
+f 340/241/147 339/240/147 319/209/147
+f 318/233/27 333/231/27 307/237/27
+f 307/237/27 340/239/27 318/233/27
+f 333/231/27 334/236/27 308/238/27
+f 308/238/27 307/237/27 333/231/27
+f 341/243/148 342/244/148 343/245/148
+f 343/245/148 344/246/148 341/243/148
+f 341/247/1 344/248/1 345/249/1
+f 345/249/1 346/250/1 341/247/1
+f 344/246/149 343/245/149 347/251/149
+f 347/251/149 345/252/149 344/246/149
+f 343/248/7 342/247/7 348/250/7
+f 348/250/7 347/249/7 343/248/7
+f 349/243/150 350/244/150 351/245/150
+f 351/245/150 352/246/150 349/243/150
+f 349/247/151 352/248/151 353/249/151
+f 353/249/151 354/250/151 349/247/151
+f 352/246/152 351/245/152 355/251/152
+f 355/251/152 353/252/152 352/246/152
+f 351/248/153 350/247/153 356/250/153
+f 356/250/153 355/249/153 351/248/153
+f 357/243/154 358/244/154 359/245/154
+f 359/245/154 360/246/154 357/243/154
+f 357/247/7 360/248/7 361/249/7
+f 361/249/7 362/250/7 357/247/7
+f 360/246/155 359/245/155 363/251/155
+f 363/251/155 361/252/155 360/246/155
+f 359/248/1 358/247/1 364/250/1
+f 364/250/1 363/249/1 359/248/1
+f 365/243/156 366/244/156 367/245/156
+f 367/245/156 368/246/156 365/243/156
+f 365/247/157 368/248/157 369/249/157
+f 369/249/157 370/250/157 365/247/157
+f 368/246/158 367/245/158 371/251/158
+f 371/251/158 369/252/158 368/246/158
+f 367/248/159 366/247/159 372/250/159
+f 372/250/159 371/249/159 367/248/159
+f 373/243/160 374/244/160 375/245/160
+f 375/245/160 376/246/160 373/243/160
+f 373/247/161 376/248/161 377/249/161
+f 377/249/161 378/250/161 373/247/161
+f 376/246/162 375/245/162 379/251/162
+f 379/251/162 377/252/162 376/246/162
+f 375/248/163 374/247/163 380/250/163
+f 380/250/163 379/249/163 375/248/163
+f 381/195/131 382/196/131 383/197/131
+f 383/197/131 384/198/131 381/195/131
+f 385/199/75 386/200/75 387/201/75
+f 387/201/75 388/202/75 385/199/75
+f 389/203/132 390/204/132 391/205/132
+f 391/205/132 392/206/132 389/203/132
+f 393/202/73 394/201/73 395/200/73
+f 395/200/73 396/199/73 393/202/73
+f 397/207/83 398/207/83 399/208/83
+f 399/208/83 400/209/83 397/207/83
+f 401/209/133 402/210/133 403/211/133
+f 390/212/134 404/196/134 405/213/134
+f 405/213/134 391/214/134 390/212/134
+f 406/210/135 407/209/135 408/211/135
+f 409/215/136 410/216/136 408/211/136
+f 408/211/136 407/209/136 409/215/136
+f 411/217/137 412/218/137 383/197/138
+f 383/197/138 382/196/138 411/217/137
+f 413/219/139 414/220/139 390/204/139
+f 390/204/139 389/203/139 413/219/139
+f 415/209/76 416/208/76 398/207/76
+f 398/207/76 397/207/76 415/209/76
+f 390/212/140 414/214/140 417/213/140
+f 417/213/140 404/196/140 390/212/140
+f 409/215/141 401/209/141 403/211/141
+f 403/211/141 410/216/141 409/215/141
+f 418/221/73 405/222/73 381/222/73
+f 381/222/73 384/221/73 418/221/73
+f 405/222/87 404/203/87 382/203/87
+f 382/203/87 381/222/87 405/222/87
+f 404/203/86 417/206/86 411/206/86
+f 411/206/86 382/203/86 404/203/86
+f 417/206/75 419/223/75 412/223/75
+f 412/223/75 411/206/75 417/206/75
+f 419/224/142 420/225/142 383/226/142
+f 383/226/142 412/224/142 419/224/142
+f 420/225/143 418/224/143 384/224/143
+f 384/224/143 383/226/143 420/225/143
+f 414/214/135 421/227/135 419/228/135
+f 419/228/135 417/213/135 414/214/135
+f 421/229/73 414/220/73 413/219/73
+f 413/219/73 422/221/73 421/229/73
+f 392/206/75 391/205/75 423/230/75
+f 423/230/75 424/223/75 392/206/75
+f 423/227/133 391/214/133 405/213/133
+f 405/213/133 418/228/133 423/227/133
+f 387/201/75 386/200/75 425/199/75
+f 425/199/75 426/202/75 387/201/75
+f 423/231/144 418/224/144 403/232/144
+f 403/232/144 402/233/144 423/231/144
+f 418/224/143 420/225/143 410/234/143
+f 410/234/143 403/232/143 418/224/143
+f 420/225/142 419/224/142 408/232/142
+f 408/232/142 410/234/142 420/225/142
+f 419/224/145 421/231/145 406/233/145
+f 406/233/145 408/232/145 419/224/145
+f 395/200/73 394/201/73 427/202/73
+f 427/202/73 428/199/73 395/200/73
+f 399/208/83 398/207/83 409/235/83
+f 409/235/83 407/236/83 399/208/83
+f 398/207/76 416/208/76 401/236/76
+f 401/236/76 409/235/76 398/207/76
+f 424/236/27 423/231/27 386/237/27
+f 386/237/27 385/238/27 424/236/27
+f 423/231/27 402/233/27 425/239/27
+f 425/239/27 386/237/27 423/231/27
+f 402/210/146 401/209/146 426/240/146
+f 426/240/146 425/241/146 402/210/146
+f 401/236/26 416/208/26 387/242/26
+f 387/242/26 426/238/26 401/236/26
+f 416/208/26 415/209/26 388/240/26
+f 388/240/26 387/242/26 416/208/26
+f 400/209/26 399/208/26 394/242/26
+f 394/242/26 393/240/26 400/209/26
+f 399/208/26 407/236/26 427/238/26
+f 427/238/26 394/242/26 399/208/26
+f 407/209/147 406/210/147 428/241/147
+f 428/241/147 427/240/147 407/209/147
+f 406/233/27 421/231/27 395/237/27
+f 395/237/27 428/239/27 406/233/27
+f 421/231/27 422/236/27 396/238/27
+f 396/238/27 395/237/27 421/231/27
+f 429/195/164 430/196/10 431/197/10
+f 431/197/10 432/198/164 429/195/164
+f 433/199/165 434/200/165 435/201/165
+f 435/201/165 436/202/165 433/199/165
+f 437/203/108 438/204/108 439/205/108
+f 439/205/108 440/206/108 437/203/108
+f 441/202/125 442/201/125 443/200/125
+f 443/200/125 444/199/125 441/202/125
+f 445/207/166 446/207/166 447/208/166
+f 447/208/166 448/209/166 445/207/166
+f 449/209/167 450/210/167 451/211/167
+f 438/212/168 452/196/168 453/213/168
+f 453/213/168 439/214/168 438/212/168
+f 454/210/169 455/209/169 456/211/169
+f 457/215/170 458/216/170 456/211/170
+f 456/211/170 455/209/170 457/215/170
+f 459/217/171 460/218/171 431/197/171
+f 431/197/171 430/196/171 459/217/171
+f 461/219/172 462/220/99 438/204/99
+f 438/204/99 437/203/99 461/219/172
+f 463/209/173 464/208/173 446/207/173
+f 446/207/173 445/207/173 463/209/173
+f 438/212/174 462/214/174 465/213/174
+f 465/213/174 452/196/174 438/212/174
+f 457/215/175 449/209/175 451/211/175
+f 451/211/175 458/216/175 457/215/175
+f 466/221/125 453/222/125 429/222/125
+f 429/222/125 432/221/125 466/221/125
+f 453/222/113 452/203/113 430/203/113
+f 430/203/113 429/222/113 453/222/113
+f 452/203/112 465/206/112 459/206/112
+f 459/206/112 430/203/112 452/203/112
+f 465/206/165 467/223/165 460/223/165
+f 460/223/165 459/206/165 465/206/165
+f 467/224/176 468/225/176 431/226/176
+f 431/226/176 460/224/176 467/224/176
+f 468/225/117 466/224/117 432/224/117
+f 432/224/117 431/226/117 468/225/117
+f 462/214/169 469/227/169 467/228/169
+f 467/228/169 465/213/169 462/214/169
+f 469/229/125 462/220/125 461/219/125
+f 461/219/125 470/221/125 469/229/125
+f 440/206/165 439/205/165 471/230/165
+f 471/230/165 472/223/165 440/206/165
+f 471/227/167 439/214/167 453/213/167
+f 453/213/167 466/228/167 471/227/167
+f 435/201/165 434/200/165 473/199/165
+f 473/199/165 474/202/165 435/201/165
+f 471/231/177 466/224/177 451/232/177
+f 451/232/177 450/233/177 471/231/177
+f 466/224/117 468/225/117 458/234/117
+f 458/234/117 451/232/117 466/224/117
+f 468/225/176 467/224/176 456/232/176
+f 456/232/176 458/234/176 468/225/176
+f 467/224/115 469/231/115 454/233/115
+f 454/233/115 456/232/115 467/224/115
+f 443/200/125 442/201/125 475/202/125
+f 475/202/125 476/199/125 443/200/125
+f 447/208/166 446/207/166 457/235/166
+f 457/235/166 455/236/166 447/208/166
+f 446/207/173 464/208/173 449/236/173
+f 449/236/173 457/235/173 446/207/173
+f 472/236/27 471/231/27 434/237/27
+f 434/237/27 433/238/27 472/236/27
+f 471/231/27 450/233/27 473/239/27
+f 473/239/27 434/237/27 471/231/27
+f 450/210/178 449/209/178 474/240/178
+f 474/240/178 473/241/178 450/210/178
+f 449/236/26 464/208/26 435/242/26
+f 435/242/26 474/238/26 449/236/26
+f 464/208/26 463/209/26 436/240/26
+f 436/240/26 435/242/26 464/208/26
+f 448/209/26 447/208/26 442/242/26
+f 442/242/26 441/240/26 448/209/26
+f 447/208/26 455/236/26 475/238/26
+f 475/238/26 442/242/26 447/208/26
+f 455/209/179 454/210/179 476/241/179
+f 476/241/179 475/240/179 455/209/179
+f 454/233/27 469/231/27 443/237/27
+f 443/237/27 476/239/27 454/233/27
+f 469/231/27 470/236/27 444/238/27
+f 444/238/27 443/237/27 469/231/27
+f 477/243/180 478/244/180 479/245/180
+f 479/245/180 480/246/180 477/243/180
+f 477/247/153 480/248/153 481/249/153
+f 481/249/153 482/250/153 477/247/153
+f 480/246/181 479/245/181 483/251/181
+f 483/251/181 481/252/182 480/246/181
+f 479/248/151 478/247/151 484/250/151
+f 484/250/151 483/249/151 479/248/151
+f 485/195/10 486/196/10 487/197/10
+f 487/197/10 488/198/10 485/195/10
+f 489/199/165 490/200/165 491/201/165
+f 491/201/165 492/202/165 489/199/165
+f 493/203/108 494/204/108 495/205/108
+f 495/205/108 496/206/108 493/203/108
+f 497/202/125 498/201/125 499/200/125
+f 499/200/125 500/199/125 497/202/125
+f 501/207/166 502/207/166 503/208/166
+f 503/208/166 504/209/166 501/207/166
+f 505/209/167 506/210/167 507/211/167
+f 494/212/168 508/196/168 509/213/168
+f 509/213/168 495/214/168 494/212/168
+f 510/210/169 511/209/169 512/211/169
+f 513/215/170 514/216/170 512/211/170
+f 512/211/170 511/209/170 513/215/170
+f 515/217/171 516/218/171 487/197/171
+f 487/197/171 486/196/171 515/217/171
+f 517/219/99 518/220/99 494/204/172
+f 494/204/172 493/203/99 517/219/99
+f 519/209/173 520/208/173 502/207/173
+f 502/207/173 501/207/173 519/209/173
+f 494/212/174 518/214/174 521/213/174
+f 521/213/174 508/196/174 494/212/174
+f 513/215/175 505/209/175 507/211/175
+f 507/211/175 514/216/175 513/215/175
+f 522/221/125 509/222/125 485/222/125
+f 485/222/125 488/221/125 522/221/125
+f 509/222/113 508/203/113 486/203/113
+f 486/203/113 485/222/113 509/222/113
+f 508/203/112 521/206/112 515/206/112
+f 515/206/112 486/203/112 508/203/112
+f 521/206/165 523/223/165 516/223/165
+f 516/223/165 515/206/165 521/206/165
+f 523/224/176 524/225/176 487/226/176
+f 487/226/176 516/224/176 523/224/176
+f 524/225/117 522/224/117 488/224/117
+f 488/224/117 487/226/117 524/225/117
+f 518/214/169 525/227/169 523/228/169
+f 523/228/169 521/213/169 518/214/169
+f 525/229/125 518/220/125 517/219/125
+f 517/219/125 526/221/125 525/229/125
+f 496/206/165 495/205/165 527/230/165
+f 527/230/165 528/223/165 496/206/165
+f 527/227/167 495/214/167 509/213/167
+f 509/213/167 522/228/167 527/227/167
+f 491/201/165 490/200/165 529/199/165
+f 529/199/165 530/202/165 491/201/165
+f 527/231/177 522/224/177 507/232/177
+f 507/232/177 506/233/177 527/231/177
+f 522/224/117 524/225/117 514/234/117
+f 514/234/117 507/232/117 522/224/117
+f 524/225/176 523/224/176 512/232/176
+f 512/232/176 514/234/176 524/225/176
+f 523/224/115 525/231/115 510/233/115
+f 510/233/115 512/232/115 523/224/115
+f 499/200/125 498/201/125 531/202/125
+f 531/202/125 532/199/125 499/200/125
+f 503/208/166 502/207/166 513/235/166
+f 513/235/166 511/236/166 503/208/166
+f 502/207/173 520/208/173 505/236/173
+f 505/236/173 513/235/173 502/207/173
+f 528/236/27 527/231/27 490/237/27
+f 490/237/27 489/238/27 528/236/27
+f 527/231/27 506/233/27 529/239/27
+f 529/239/27 490/237/27 527/231/27
+f 506/210/178 505/209/178 530/240/178
+f 530/240/178 529/241/178 506/210/178
+f 505/236/26 520/208/26 491/242/26
+f 491/242/26 530/238/26 505/236/26
+f 520/208/26 519/209/26 492/240/26
+f 492/240/26 491/242/26 520/208/26
+f 504/209/26 503/208/26 498/242/26
+f 498/242/26 497/240/26 504/209/26
+f 503/208/26 511/236/26 531/238/26
+f 531/238/26 498/242/26 503/208/26
+f 511/209/179 510/210/179 532/241/179
+f 532/241/179 531/240/179 511/209/179
+f 510/233/27 525/231/27 499/237/27
+f 499/237/27 532/239/27 510/233/27
+f 525/231/27 526/236/27 500/238/27
+f 500/238/27 499/237/27 525/231/27
+f 533/243/183 534/244/183 535/245/183
+f 535/245/183 536/246/183 533/243/183
+f 533/247/184 536/248/184 537/249/184
+f 537/249/184 538/250/184 533/247/184
+f 536/246/185 535/245/185 539/251/185
+f 539/251/185 537/252/185 536/246/185
+f 535/248/186 534/247/186 540/250/186
+f 540/250/186 539/249/186 535/248/186
+f 541/195/72 542/196/72 543/197/72
+f 543/197/72 544/198/72 541/195/72
+f 545/199/73 546/200/73 547/201/73
+f 547/201/73 548/202/73 545/199/73
+f 549/203/74 550/204/74 551/205/74
+f 551/205/74 552/206/74 549/203/74
+f 553/202/75 554/201/75 555/200/75
+f 555/200/75 556/199/75 553/202/75
+f 557/207/76 558/207/76 559/208/76
+f 559/208/76 560/209/76 557/207/76
+f 561/209/77 562/210/77 563/211/77
+f 550/212/78 564/196/78 565/213/78
+f 565/213/78 551/214/78 550/212/78
+f 566/210/79 567/209/79 568/211/79
+f 569/215/80 570/216/80 568/211/80
+f 568/211/80 567/209/80 569/215/80
+f 571/217/81 572/218/81 543/197/81
+f 543/197/81 542/196/81 571/217/81
+f 573/219/82 574/220/82 550/204/82
+f 550/204/82 549/203/82 573/219/82
+f 575/209/83 576/208/83 558/207/83
+f 558/207/83 557/207/83 575/209/83
+f 550/212/84 574/214/84 577/213/84
+f 577/213/84 564/196/84 550/212/84
+f 569/215/85 561/209/85 563/211/85
+f 563/211/85 570/216/85 569/215/85
+f 578/221/75 565/222/75 541/222/75
+f 541/222/75 544/221/75 578/221/75
+f 565/222/86 564/203/86 542/203/86
+f 542/203/86 541/222/86 565/222/86
+f 564/203/87 577/206/87 571/206/87
+f 571/206/87 542/203/87 564/203/87
+f 577/206/73 579/223/73 572/223/73
+f 572/223/73 571/206/73 577/206/73
+f 579/224/88 580/225/88 543/226/88
+f 543/226/88 572/224/88 579/224/88
+f 580/225/89 578/224/89 544/224/89
+f 544/224/89 543/226/89 580/225/89
+f 574/214/79 581/227/79 579/228/79
+f 579/228/79 577/213/79 574/214/79
+f 581/229/75 574/220/75 573/219/75
+f 573/219/75 582/221/75 581/229/75
+f 552/206/73 551/205/73 583/230/73
+f 583/230/73 584/223/73 552/206/73
+f 583/227/77 551/214/77 565/213/77
+f 565/213/77 578/228/77 583/227/77
+f 547/201/73 546/200/73 585/199/73
+f 585/199/73 586/202/73 547/201/73
+f 583/231/90 578/224/90 563/232/90
+f 563/232/90 562/233/90 583/231/90
+f 578/224/89 580/225/89 570/234/89
+f 570/234/89 563/232/89 578/224/89
+f 580/225/88 579/224/88 568/232/88
+f 568/232/88 570/234/88 580/225/88
+f 579/224/92 581/231/92 566/233/92
+f 566/233/92 568/232/92 579/224/92
+f 555/200/75 554/201/75 587/202/75
+f 587/202/75 588/199/75 555/200/75
+f 559/208/76 558/207/76 569/235/76
+f 569/235/76 567/236/76 559/208/76
+f 558/207/83 576/208/83 561/236/83
+f 561/236/83 569/235/83 558/207/83
+f 584/236/27 583/231/27 546/237/27
+f 546/237/27 545/238/27 584/236/27
+f 583/231/27 562/233/27 585/239/27
+f 585/239/27 546/237/27 583/231/27
+f 562/210/94 561/209/94 586/240/94
+f 586/240/94 585/241/94 562/210/94
+f 561/236/26 576/208/26 547/242/26
+f 547/242/26 586/238/26 561/236/26
+f 576/208/26 575/209/26 548/240/26
+f 548/240/26 547/242/26 576/208/26
+f 560/209/26 559/208/26 554/242/26
+f 554/242/26 553/240/26 560/209/26
+f 559/208/26 567/236/26 587/238/26
+f 587/238/26 554/242/26 559/208/26
+f 567/209/95 566/210/95 588/241/95
+f 588/241/95 587/240/95 567/209/95
+f 566/233/27 581/231/27 555/237/27
+f 555/237/27 588/239/27 566/233/27
+f 581/231/27 582/236/27 556/238/27
+f 556/238/27 555/237/27 581/231/27
+f 589/243/187 590/244/187 591/245/187
+f 591/245/187 592/246/187 589/243/187
+f 589/247/163 592/248/163 593/249/163
+f 593/249/163 594/250/163 589/247/163
+f 592/246/188 591/245/188 595/251/189
+f 595/251/189 593/252/188 592/246/188
+f 591/248/161 590/247/161 596/250/161
+f 596/250/161 595/249/161 591/248/161
+f 597/253/13 598/254/13 599/255/13
+f 599/255/13 600/256/13 597/253/13
+f 601/257/14 597/253/14 600/256/14
+f 600/256/14 602/258/14 601/257/14
+f 603/259/118 601/257/118 602/258/118
+f 602/258/118 604/260/15 603/259/118
+f 605/261/16 603/262/16 604/263/16
+f 604/263/16 606/264/16 605/261/16
+f 607/265/17 605/261/17 606/264/17
+f 606/264/17 608/266/17 607/265/17
+f 609/267/18 607/265/18 608/266/18
+f 608/266/18 610/268/18 609/267/18
+f 611/269/190 609/267/19 610/268/19
+f 610/268/19 612/270/190 611/269/190
+f 613/271/20 611/269/20 612/270/20
+f 612/270/20 614/272/20 613/271/20
+f 615/273/21 613/271/21 614/272/21
+f 614/272/21 616/274/21 615/273/21
+f 617/275/191 615/273/191 616/274/22
+f 616/274/22 618/276/191 617/275/191
+f 619/277/23 617/275/23 618/276/23
+f 618/276/23 620/278/23 619/277/23
+f 598/254/24 619/277/25 620/278/25
+f 620/278/25 599/255/24 598/254/24
+f 600/279/27 599/280/27 621/281/27
+f 621/281/27 622/282/27 600/279/27
+f 623/283/27 624/279/27 625/282/27
+f 625/282/27 626/284/27 623/283/27
+f 604/285/27 602/283/27 627/284/27
+f 627/284/27 628/285/27 604/285/27
+f 629/286/27 630/285/27 631/285/27
+f 631/285/27 632/287/27 629/286/27
+f 608/288/27 606/286/27 633/287/27
+f 633/287/27 634/289/27 608/288/27
+f 635/290/27 636/288/27 637/289/27
+f 637/289/27 638/291/27 635/290/27
+f 612/292/27 610/290/27 639/291/27
+f 639/291/27 640/293/27 612/292/27
+f 641/294/27 642/292/27 643/293/27
+f 643/293/27 644/295/27 641/294/27
+f 616/296/27 614/294/27 645/295/27
+f 645/295/27 646/297/27 616/296/27
+f 647/298/27 648/296/27 649/297/27
+f 649/297/27 650/299/27 647/298/27
+f 620/300/27 618/298/27 651/299/27
+f 651/299/27 652/300/27 620/300/27
+f 653/280/27 654/300/27 655/300/27
+f 655/300/27 656/281/27 653/280/27
+f 622/301/19 621/302/19 657/303/19
+f 657/303/19 658/304/19 622/301/19
+f 627/305/20 622/301/20 658/304/20
+f 658/304/20 659/306/20 627/305/20
+f 628/307/21 627/305/21 659/306/21
+f 659/306/21 660/308/21 628/307/21
+f 633/309/22 628/307/22 660/308/22
+f 660/308/22 661/310/22 633/309/22
+f 634/311/23 633/309/23 661/310/23
+f 661/310/23 662/312/23 634/311/23
+f 639/313/24 634/311/24 662/312/24
+f 662/312/24 663/314/24 639/313/24
+f 640/315/192 639/313/13 663/314/13
+f 663/314/13 664/316/192 640/315/192
+f 645/317/14 640/315/14 664/316/14
+f 664/316/14 665/318/14 645/317/14
+f 646/319/15 645/317/15 665/318/15
+f 665/318/15 666/320/15 646/319/15
+f 651/321/16 646/322/16 666/323/193
+f 666/323/193 667/324/16 651/321/16
+f 652/325/17 651/321/17 667/324/17
+f 667/324/17 668/326/17 652/325/17
+f 621/302/18 652/325/194 668/326/194
+f 668/326/194 657/303/18 621/302/18
+f 658/327/27 657/328/27 669/329/27
+f 659/330/27 658/327/27 669/329/27
+f 660/331/27 659/330/27 669/329/27
+f 661/332/27 660/331/27 669/329/27
+f 662/333/27 661/332/27 669/329/27
+f 663/334/27 662/333/27 669/329/27
+f 664/335/27 663/334/27 669/329/27
+f 665/336/27 664/335/27 669/329/27
+f 666/337/27 665/336/27 669/329/27
+f 667/338/27 666/337/27 669/329/27
+f 668/339/27 667/338/27 669/329/27
+f 657/328/27 668/339/27 669/329/27
+f 602/258/14 600/256/14 624/340/14
+f 624/340/14 623/341/14 602/258/14
+f 600/279/161 622/282/161 625/282/161
+f 625/282/161 624/279/161 600/279/161
+f 622/301/20 627/305/20 626/342/20
+f 626/342/20 625/343/20 622/301/20
+f 627/284/195 602/283/195 623/283/195
+f 623/283/195 626/284/195 627/284/195
+f 606/264/16 604/263/16 630/344/193
+f 630/344/193 629/345/16 606/264/16
+f 604/285/1 628/285/1 631/285/1
+f 631/285/1 630/285/1 604/285/1
+f 628/307/22 633/309/22 632/346/22
+f 632/346/22 631/347/22 628/307/22
+f 633/287/196 606/286/196 629/286/196
+f 629/286/196 632/287/196 633/287/196
+f 610/268/18 608/266/18 636/348/18
+f 636/348/18 635/349/18 610/268/18
+f 608/288/153 634/289/153 637/289/153
+f 637/289/153 636/288/153 608/288/153
+f 634/311/24 639/313/24 638/350/24
+f 638/350/24 637/351/24 634/311/24
+f 639/291/10 610/290/10 635/290/10
+f 635/290/10 638/291/10 639/291/10
+f 614/272/20 612/270/20 642/352/20
+f 642/352/20 641/353/20 614/272/20
+f 612/292/163 640/293/163 643/293/163
+f 643/293/163 642/292/163 612/292/163
+f 640/315/14 645/317/14 644/354/14
+f 644/354/14 643/355/14 640/315/14
+f 645/295/197 614/294/197 641/294/197
+f 641/294/197 644/295/197 645/295/197
+f 618/276/191 616/274/22 648/356/22
+f 648/356/22 647/357/22 618/276/191
+f 616/296/7 646/297/7 649/297/7
+f 649/297/7 648/296/7 616/296/7
+f 646/322/16 651/321/16 650/358/16
+f 650/358/16 649/359/16 646/322/16
+f 651/299/198 618/298/198 647/298/198
+f 647/298/198 650/299/198 651/299/198
+f 599/255/24 620/278/25 654/360/24
+f 654/360/24 653/361/24 599/255/24
+f 620/300/151 652/300/151 655/300/151
+f 655/300/151 654/300/151 620/300/151
+f 652/325/194 621/302/18 656/362/18
+f 656/362/18 655/363/194 652/325/194
+f 621/281/4 599/280/4 653/280/4
+f 653/280/4 656/281/4 621/281/4
+f 670/364/199 671/365/199 672/366/199
+f 672/366/199 673/367/199 670/364/199
+f 671/368/200 674/369/200 675/370/200
+f 675/370/200 672/371/200 671/368/200
+f 674/365/201 676/364/201 677/367/201
+f 677/367/201 675/366/201 674/365/201
+f 676/372/202 670/373/202 673/374/202
+f 673/374/202 677/375/202 676/372/202
+f 678/376/7 679/377/7 680/378/7
+f 680/378/7 681/379/7 678/376/7
+f 679/380/4 682/381/4 683/382/4
+f 683/382/4 680/383/4 679/380/4
+f 684/384/1 685/385/1 686/386/1
+f 686/386/1 687/387/1 684/384/1
+f 688/388/10 678/389/10 681/390/10
+f 681/390/10 689/391/10 688/388/10
+f 676/392/26 674/393/26 683/394/26
+f 683/394/26 689/395/26 676/392/26
+f 683/394/26 674/393/26 671/396/26
+f 671/396/26 680/397/26 683/394/26
+f 680/397/26 671/396/26 670/398/26
+f 670/398/26 681/399/26 680/397/26
+f 681/399/26 670/398/26 676/392/26
+f 676/392/26 689/395/26 681/399/26
+f 673/400/27 672/401/27 690/402/27
+f 690/402/27 691/403/27 673/400/27
+f 672/401/27 675/404/27 692/405/27
+f 692/405/27 690/402/27 672/401/27
+f 675/404/27 677/406/27 693/407/27
+f 693/407/27 692/405/27 675/404/27
+f 677/406/27 673/400/27 691/403/27
+f 691/403/27 693/407/27 677/406/27
+f 688/408/1 689/409/1 694/410/1
+f 694/410/1 695/411/1 688/408/1
+f 689/409/1 683/412/1 696/413/1
+f 696/413/1 694/410/1 689/409/1
+f 683/412/1 682/414/1 697/415/1
+f 697/415/1 696/413/1 683/412/1
+f 695/416/10 694/417/10 686/418/10
+f 686/418/10 685/419/10 695/416/10
+f 694/420/27 696/421/27 687/422/27
+f 687/422/27 686/423/27 694/420/27
+f 696/417/4 697/416/4 684/419/4
+f 684/419/4 687/418/4 696/417/4
+f 698/243/150 699/246/150 700/245/150
+f 700/245/150 701/244/150 698/243/150
+f 698/247/153 702/250/153 703/249/153
+f 703/249/153 699/248/153 698/247/153
+f 699/246/152 703/252/152 704/251/152
+f 704/251/152 700/245/152 699/246/152
+f 700/248/151 704/249/151 705/250/151
+f 705/250/151 701/247/151 700/248/151
+f 706/424/203 707/425/204 708/426/205
+f 708/426/205 709/427/27 706/424/203
+f 710/428/1 711/429/1 707/429/1
+f 707/429/1 706/428/1 710/428/1
+f 712/430/206 708/430/206 707/431/206
+f 707/431/206 711/431/206 712/430/206
+f 706/424/203 709/427/27 713/426/207
+f 713/426/207 714/425/208 706/424/203
+f 710/428/1 706/428/1 714/432/1
+f 714/432/1 715/432/1 710/428/1
+f 714/431/209 713/430/209 716/430/209
+f 716/430/209 715/431/209 714/431/209
+f 717/433/210 709/427/27 708/426/205
+f 708/426/205 718/434/211 717/433/210
+f 719/428/7 717/428/7 718/429/7
+f 718/429/7 720/429/7 719/428/7
+f 718/435/212 708/430/212 712/430/212
+f 712/430/212 720/435/212 718/435/212
+f 717/433/210 721/434/213 713/426/207
+f 713/426/207 709/427/27 717/433/210
+f 719/428/7 722/432/7 721/432/7
+f 721/432/7 717/428/7 719/428/7
+f 716/430/214 713/430/214 721/435/214
+f 721/435/214 722/435/214 716/430/214
+f 723/436/4 724/437/4 725/438/4
+f 725/438/4 726/439/4 723/436/4
+f 724/437/215 723/436/215 727/440/215
+f 727/440/215 728/441/215 724/437/215
+f 723/436/216 726/439/216 729/440/216
+f 729/440/216 727/440/216 723/436/216
+f 730/442/217 728/441/217 727/440/217
+f 727/440/217 731/443/217 730/442/217
+f 732/444/216 731/443/216 727/440/216
+f 727/440/216 729/445/216 732/444/216
+f 733/446/10 734/447/10 735/448/10
+f 735/448/10 736/449/10 733/446/10
+f 734/447/218 737/442/218 738/443/218
+f 738/443/218 735/448/218 734/447/218
+f 735/448/219 738/443/219 739/450/219
+f 739/450/219 736/449/219 735/448/219
+f 738/443/220 737/442/220 730/442/220
+f 730/442/220 731/443/220 738/443/220
+f 732/444/219 739/444/219 738/443/219
+f 738/443/219 731/443/219 732/444/219
+f 740/436/4 741/437/4 742/438/4
+f 742/438/4 743/439/4 740/436/4
+f 741/437/221 740/436/221 744/440/221
+f 744/440/221 745/441/221 741/437/221
+f 740/436/222 743/439/222 746/440/222
+f 746/440/222 744/440/222 740/436/222
+f 747/442/223 745/441/223 744/440/223
+f 744/440/223 748/443/223 747/442/223
+f 749/444/222 748/443/222 744/440/222
+f 744/440/222 746/445/222 749/444/222
+f 750/446/10 751/447/10 752/448/10
+f 752/448/10 753/449/10 750/446/10
+f 751/447/224 754/442/224 755/443/224
+f 755/443/224 752/448/224 751/447/224
+f 752/448/222 755/443/222 756/450/222
+f 756/450/222 753/449/222 752/448/222
+f 755/443/225 754/442/225 747/442/225
+f 747/442/225 748/443/225 755/443/225
+f 749/444/222 756/444/222 755/443/222
+f 755/443/222 748/443/222 749/444/222
+f 757/436/4 758/437/4 759/438/4
+f 759/438/4 760/439/4 757/436/4
+f 758/437/226 757/436/226 761/440/226
+f 761/440/226 762/441/227 758/437/226
+f 757/436/228 760/439/228 763/440/229
+f 763/440/229 761/440/229 757/436/228
+f 764/442/230 762/441/230 761/440/230
+f 761/440/230 765/443/230 764/442/230
+f 766/444/228 765/443/228 761/440/228
+f 761/440/228 763/445/228 766/444/228
+f 767/446/10 768/447/10 769/448/10
+f 769/448/10 770/449/10 767/446/10
+f 768/447/231 771/442/232 772/443/231
+f 772/443/231 769/448/232 768/447/231
+f 769/448/229 772/443/229 773/450/229
+f 773/450/229 770/449/229 769/448/229
+f 772/443/233 771/442/233 764/442/233
+f 764/442/233 765/443/233 772/443/233
+f 766/444/229 773/444/229 772/443/229
+f 772/443/229 765/443/229 766/444/229
+f 774/436/4 775/437/4 776/438/4
+f 776/438/4 777/439/4 774/436/4
+f 775/437/226 774/436/227 778/440/227
+f 778/440/227 779/441/227 775/437/226
+f 774/436/229 777/439/229 780/440/229
+f 780/440/229 778/440/229 774/436/229
+f 781/442/230 779/441/230 778/440/230
+f 778/440/230 782/443/230 781/442/230
+f 783/444/229 782/443/229 778/440/229
+f 778/440/229 780/445/229 783/444/229
+f 784/446/10 785/447/10 786/448/10
+f 786/448/10 787/449/10 784/446/10
+f 785/447/231 788/442/232 789/443/232
+f 789/443/232 786/448/231 785/447/231
+f 786/448/228 789/443/229 790/450/229
+f 790/450/229 787/449/228 786/448/228
+f 789/443/233 788/442/233 781/442/233
+f 781/442/233 782/443/233 789/443/233
+f 783/444/229 790/444/229 789/443/229
+f 789/443/229 782/443/229 783/444/229
+f 791/436/4 792/437/4 793/438/4
+f 793/438/4 794/439/4 791/436/4
+f 792/437/234 791/436/234 795/440/234
+f 795/440/234 796/441/234 792/437/234
+f 791/436/235 794/439/235 797/440/235
+f 797/440/235 795/440/235 791/436/235
+f 798/442/236 796/441/236 795/440/236
+f 795/440/236 799/443/236 798/442/236
+f 800/444/235 799/443/235 795/440/235
+f 795/440/235 797/445/235 800/444/235
+f 801/446/10 802/447/10 803/448/10
+f 803/448/10 804/449/10 801/446/10
+f 802/447/237 805/442/237 806/443/237
+f 806/443/237 803/448/237 802/447/237
+f 803/448/235 806/443/235 807/450/235
+f 807/450/235 804/449/235 803/448/235
+f 806/443/238 805/442/238 798/442/238
+f 798/442/238 799/443/238 806/443/238
+f 800/444/239 807/444/239 806/443/239
+f 806/443/239 799/443/239 800/444/239
+f 808/436/4 809/437/4 810/438/4
+f 810/438/4 811/439/4 808/436/4
+f 809/437/240 808/436/240 812/440/240
+f 812/440/240 813/441/240 809/437/240
+f 808/436/241 811/439/241 814/440/241
+f 814/440/241 812/440/241 808/436/241
+f 815/442/236 813/441/236 812/440/236
+f 812/440/236 816/443/236 815/442/236
+f 817/444/241 816/443/241 812/440/241
+f 812/440/241 814/445/241 817/444/241
+f 818/446/10 819/447/10 820/448/10
+f 820/448/10 821/449/10 818/446/10
+f 819/447/242 822/442/242 823/443/242
+f 823/443/242 820/448/242 819/447/242
+f 820/448/243 823/443/241 824/450/241
+f 824/450/241 821/449/243 820/448/243
+f 823/443/238 822/442/238 815/442/238
+f 815/442/238 816/443/238 823/443/238
+f 817/444/241 824/444/241 823/443/241
+f 823/443/241 816/443/241 817/444/241
+f 825/436/4 826/437/4 827/438/4
+f 827/438/4 828/439/4 825/436/4
+f 826/437/215 825/436/215 829/440/215
+f 829/440/215 830/441/215 826/437/215
+f 825/436/216 828/439/216 831/440/216
+f 831/440/216 829/440/216 825/436/216
+f 832/442/217 830/441/217 829/440/217
+f 829/440/217 833/443/217 832/442/217
+f 834/444/216 833/443/216 829/440/216
+f 829/440/216 831/445/216 834/444/216
+f 835/446/10 836/447/10 837/448/10
+f 837/448/10 838/449/10 835/446/10
+f 836/447/218 839/442/218 840/443/218
+f 840/443/218 837/448/218 836/447/218
+f 837/448/219 840/443/219 841/450/219
+f 841/450/219 838/449/219 837/448/219
+f 840/443/220 839/442/220 832/442/220
+f 832/442/220 833/443/220 840/443/220
+f 834/444/219 841/444/219 840/443/219
+f 840/443/219 833/443/219 834/444/219
+f 842/436/4 843/437/4 844/438/4
+f 844/438/4 845/439/4 842/436/4
+f 843/437/215 842/436/215 846/440/215
+f 846/440/215 847/441/215 843/437/215
+f 842/436/216 845/439/216 848/440/216
+f 848/440/216 846/440/216 842/436/216
+f 849/442/217 847/441/217 846/440/217
+f 846/440/217 850/443/217 849/442/217
+f 851/444/216 850/443/216 846/440/216
+f 846/440/216 848/445/216 851/444/216
+f 852/446/10 853/447/10 854/448/10
+f 854/448/10 855/449/10 852/446/10
+f 853/447/218 856/442/218 857/443/218
+f 857/443/218 854/448/218 853/447/218
+f 854/448/219 857/443/219 858/450/219
+f 858/450/219 855/449/219 854/448/219
+f 857/443/220 856/442/220 849/442/220
+f 849/442/220 850/443/220 857/443/220
+f 851/444/219 858/444/219 857/443/219
+f 857/443/219 850/443/219 851/444/219
+f 859/438/4 860/437/4 861/436/4
+f 861/436/4 862/439/4 859/438/4
+f 863/440/244 861/436/244 860/437/244
+f 860/437/244 864/441/244 863/440/244
+f 865/440/245 862/439/245 861/436/245
+f 861/436/245 863/440/245 865/440/245
+f 863/440/246 864/441/246 866/442/246
+f 866/442/246 867/443/246 863/440/246
+f 868/444/245 865/445/245 863/440/245
+f 863/440/245 867/443/245 868/444/245
+f 869/448/10 870/447/10 871/446/10
+f 871/446/10 872/449/10 869/448/10
+f 873/443/247 874/442/247 870/447/247
+f 870/447/247 869/448/247 873/443/247
+f 875/450/248 873/443/248 869/448/248
+f 869/448/248 872/449/248 875/450/248
+f 866/442/249 874/442/249 873/443/249
+f 873/443/249 867/443/249 866/442/249
+f 868/444/248 867/443/248 873/443/248
+f 873/443/248 875/444/248 868/444/248
+f 876/438/4 877/437/4 878/436/4
+f 878/436/4 879/439/4 876/438/4
+f 880/440/250 878/436/250 877/437/250
+f 877/437/250 881/441/250 880/440/250
+f 882/440/251 879/439/251 878/436/251
+f 878/436/251 880/440/251 882/440/251
+f 880/440/252 881/441/252 883/442/252
+f 883/442/252 884/443/252 880/440/252
+f 885/444/251 882/445/251 880/440/251
+f 880/440/251 884/443/251 885/444/251
+f 886/448/10 887/447/10 888/446/10
+f 888/446/10 889/449/10 886/448/10
+f 890/443/253 891/442/253 887/447/253
+f 887/447/253 886/448/253 890/443/253
+f 892/450/251 890/443/251 886/448/254
+f 886/448/254 889/449/254 892/450/251
+f 883/442/255 891/442/255 890/443/255
+f 890/443/255 884/443/255 883/442/255
+f 885/444/251 884/443/251 890/443/251
+f 890/443/251 892/444/251 885/444/251
+f 893/438/4 894/437/4 895/436/4
+f 895/436/4 896/439/4 893/438/4
+f 897/440/256 895/436/257 894/437/256
+f 894/437/256 898/441/256 897/440/256
+f 899/440/258 896/439/258 895/436/258
+f 895/436/258 897/440/258 899/440/258
+f 897/440/259 898/441/259 900/442/259
+f 900/442/259 901/443/259 897/440/259
+f 902/444/258 899/445/258 897/440/258
+f 897/440/258 901/443/258 902/444/258
+f 903/448/10 904/447/10 905/446/10
+f 905/446/10 906/449/10 903/448/10
+f 907/443/260 908/442/260 904/447/260
+f 904/447/260 903/448/260 907/443/260
+f 909/450/261 907/443/261 903/448/261
+f 903/448/261 906/449/261 909/450/261
+f 900/442/262 908/442/262 907/443/262
+f 907/443/262 901/443/262 900/442/262
+f 902/444/261 901/443/261 907/443/261
+f 907/443/261 909/444/261 902/444/261
+f 910/438/4 911/437/4 912/436/4
+f 912/436/4 913/439/4 910/438/4
+f 914/440/257 912/436/257 911/437/257
+f 911/437/257 915/441/256 914/440/257
+f 916/440/261 913/439/261 912/436/261
+f 912/436/261 914/440/261 916/440/261
+f 914/440/259 915/441/259 917/442/259
+f 917/442/259 918/443/259 914/440/259
+f 919/444/261 916/445/261 914/440/261
+f 914/440/261 918/443/261 919/444/261
+f 920/448/10 921/447/10 922/446/10
+f 922/446/10 923/449/10 920/448/10
+f 924/443/263 925/442/260 921/447/263
+f 921/447/263 920/448/263 924/443/263
+f 926/450/258 924/443/258 920/448/261
+f 920/448/261 923/449/261 926/450/258
+f 917/442/262 925/442/262 924/443/262
+f 924/443/262 918/443/262 917/442/262
+f 919/444/261 918/443/261 924/443/261
+f 924/443/261 926/444/261 919/444/261
+f 927/438/4 928/437/4 929/436/4
+f 929/436/4 930/439/4 927/438/4
+f 931/440/264 929/436/264 928/437/264
+f 928/437/264 932/441/264 931/440/264
+f 933/440/265 930/439/265 929/436/265
+f 929/436/265 931/440/265 933/440/265
+f 931/440/266 932/441/266 934/442/266
+f 934/442/266 935/443/266 931/440/266
+f 936/444/265 933/445/265 931/440/265
+f 931/440/265 935/443/265 936/444/265
+f 937/448/10 938/447/10 939/446/10
+f 939/446/10 940/449/10 937/448/10
+f 941/443/267 942/442/267 938/447/267
+f 938/447/267 937/448/267 941/443/267
+f 943/450/265 941/443/265 937/448/265
+f 937/448/265 940/449/265 943/450/265
+f 934/442/268 942/442/268 941/443/268
+f 941/443/268 935/443/268 934/442/268
+f 936/444/269 935/443/269 941/443/269
+f 941/443/269 943/444/269 936/444/269
+f 944/438/4 945/437/4 946/436/4
+f 946/436/4 947/439/4 944/438/4
+f 948/440/270 946/436/270 945/437/270
+f 945/437/270 949/441/270 948/440/270
+f 950/440/271 947/439/271 946/436/271
+f 946/436/271 948/440/271 950/440/271
+f 948/440/266 949/441/266 951/442/266
+f 951/442/266 952/443/266 948/440/266
+f 953/444/271 950/445/271 948/440/271
+f 948/440/271 952/443/271 953/444/271
+f 954/448/10 955/447/10 956/446/10
+f 956/446/10 957/449/10 954/448/10
+f 958/443/272 959/442/272 955/447/272
+f 955/447/272 954/448/272 958/443/272
+f 960/450/271 958/443/271 954/448/273
+f 954/448/273 957/449/273 960/450/271
+f 951/442/268 959/442/268 958/443/268
+f 958/443/268 952/443/268 951/442/268
+f 953/444/271 952/443/271 958/443/271
+f 958/443/271 960/444/271 953/444/271
+f 961/438/4 962/437/4 963/436/4
+f 963/436/4 964/439/4 961/438/4
+f 965/440/244 963/436/244 962/437/244
+f 962/437/244 966/441/244 965/440/244
+f 967/440/245 964/439/245 963/436/245
+f 963/436/245 965/440/245 967/440/245
+f 965/440/246 966/441/246 968/442/274
+f 968/442/274 969/443/246 965/440/246
+f 970/444/245 967/445/245 965/440/245
+f 965/440/245 969/443/245 970/444/245
+f 971/448/10 972/447/10 973/446/10
+f 973/446/10 974/449/10 971/448/10
+f 975/443/247 976/442/247 972/447/247
+f 972/447/247 971/448/247 975/443/247
+f 977/450/248 975/443/248 971/448/248
+f 971/448/248 974/449/248 977/450/248
+f 968/442/275 976/442/249 975/443/249
+f 975/443/249 969/443/249 968/442/275
+f 970/444/248 969/443/248 975/443/248
+f 975/443/248 977/444/248 970/444/248
+f 978/438/4 979/437/4 980/436/4
+f 980/436/4 981/439/4 978/438/4
+f 982/440/244 980/436/244 979/437/244
+f 979/437/244 983/441/244 982/440/244
+f 984/440/245 981/439/245 980/436/245
+f 980/436/245 982/440/245 984/440/245
+f 982/440/246 983/441/246 985/442/246
+f 985/442/246 986/443/246 982/440/246
+f 987/444/245 984/445/245 982/440/245
+f 982/440/245 986/443/245 987/444/245
+f 988/448/10 989/447/10 990/446/10
+f 990/446/10 991/449/10 988/448/10
+f 992/443/247 993/442/247 989/447/247
+f 989/447/247 988/448/247 992/443/247
+f 994/450/248 992/443/248 988/448/248
+f 988/448/248 991/449/248 994/450/248
+f 985/442/249 993/442/249 992/443/249
+f 992/443/249 986/443/249 985/442/249
+f 987/444/248 986/443/248 992/443/248
+f 992/443/248 994/444/248 987/444/248
+f 995/436/4 996/437/4 997/438/4
+f 997/438/4 998/439/4 995/436/4
+f 996/437/276 995/436/276 999/440/276
+f 999/440/276 1000/441/276 996/437/276
+f 995/436/277 998/439/277 1001/440/278
+f 1001/440/278 999/440/278 995/436/277
+f 1002/442/279 1000/441/279 999/440/279
+f 999/440/279 1003/443/279 1002/442/279
+f 1004/444/277 1003/443/277 999/440/277
+f 999/440/277 1001/445/277 1004/444/277
+f 1005/446/10 1006/447/10 1007/448/10
+f 1007/448/10 1008/449/10 1005/446/10
+f 1006/447/280 1009/442/280 1010/443/280
+f 1010/443/280 1007/448/280 1006/447/280
+f 1007/448/278 1010/443/278 1011/450/278
+f 1011/450/278 1008/449/278 1007/448/278
+f 1010/443/281 1009/442/281 1002/442/281
+f 1002/442/281 1003/443/281 1010/443/281
+f 1004/444/278 1011/444/278 1010/443/278
+f 1010/443/278 1003/443/278 1004/444/278
+f 1012/438/4 1013/437/4 1014/436/4
+f 1014/436/4 1015/439/4 1012/438/4
+f 1016/440/282 1014/436/282 1013/437/282
+f 1013/437/282 1017/441/282 1016/440/282
+f 1018/440/283 1015/439/283 1014/436/283
+f 1014/436/283 1016/440/283 1018/440/283
+f 1016/440/284 1017/441/284 1019/442/284
+f 1019/442/284 1020/443/284 1016/440/284
+f 1021/444/283 1018/445/283 1016/440/283
+f 1016/440/283 1020/443/283 1021/444/283
+f 1022/448/10 1023/447/10 1024/446/10
+f 1024/446/10 1025/449/10 1022/448/10
+f 1026/443/285 1027/442/285 1023/447/285
+f 1023/447/285 1022/448/285 1026/443/285
+f 1028/450/286 1026/443/286 1022/448/286
+f 1022/448/286 1025/449/286 1028/450/286
+f 1019/442/287 1027/442/287 1026/443/287
+f 1026/443/287 1020/443/287 1019/442/287
+f 1021/444/286 1020/443/286 1026/443/286
+f 1026/443/286 1028/444/286 1021/444/286
+f 1029/243/187 1030/244/187 1031/245/187
+f 1031/245/187 1032/246/187 1029/243/187
+f 1029/247/163 1032/248/163 1033/249/163
+f 1033/249/163 1034/250/163 1029/247/163
+f 1032/246/188 1031/245/188 1035/251/188
+f 1035/251/188 1033/252/188 1032/246/188
+f 1031/248/161 1030/247/161 1036/250/161
+f 1036/250/161 1035/249/161 1031/248/161
+f 1037/451/27 1038/452/27 1039/453/27
+f 1039/453/27 1040/454/27 1037/451/27
+f 1041/455/7 1042/456/7 1038/457/7
+f 1038/457/7 1037/458/7 1041/455/7
+f 1042/459/4 1043/460/4 1039/461/4
+f 1039/461/4 1038/462/4 1042/459/4
+f 1043/456/1 1044/455/1 1040/458/1
+f 1040/458/1 1039/457/1 1043/456/1
+f 1044/460/10 1041/459/10 1037/462/10
+f 1037/462/10 1040/461/10 1044/460/10
+f 1045/451/27 1046/452/27 1047/453/27
+f 1047/453/27 1048/454/27 1045/451/27
+f 1049/455/7 1050/456/7 1046/457/7
+f 1046/457/7 1045/458/7 1049/455/7
+f 1050/459/4 1051/460/4 1047/461/4
+f 1047/461/4 1046/462/4 1050/459/4
+f 1051/456/1 1052/455/1 1048/458/1
+f 1048/458/1 1047/457/1 1051/456/1
+f 1052/460/10 1049/459/10 1045/462/10
+f 1045/462/10 1048/461/10 1052/460/10
+f 1053/451/27 1054/452/27 1055/453/27
+f 1055/453/27 1056/454/27 1053/451/27
+f 1057/455/7 1058/456/7 1054/457/7
+f 1054/457/7 1053/458/7 1057/455/7
+f 1058/459/4 1059/460/4 1055/461/4
+f 1055/461/4 1054/462/4 1058/459/4
+f 1059/456/1 1060/455/1 1056/458/1
+f 1056/458/1 1055/457/1 1059/456/1
+f 1060/460/10 1057/459/10 1053/462/10
+f 1053/462/10 1056/461/10 1060/460/10
+f 1061/451/27 1062/452/27 1063/453/27
+f 1063/453/27 1064/454/27 1061/451/27
+f 1065/455/10 1066/456/10 1062/457/10
+f 1062/457/10 1061/458/10 1065/455/10
+f 1066/459/7 1067/460/7 1063/461/7
+f 1063/461/7 1062/462/7 1066/459/7
+f 1067/456/4 1068/455/4 1064/458/4
+f 1064/458/4 1063/457/4 1067/456/4
+f 1068/460/1 1065/459/1 1061/462/1
+f 1061/462/1 1064/461/1 1068/460/1
+f 1069/451/27 1070/452/27 1071/453/27
+f 1071/453/27 1072/454/27 1069/451/27
+f 1073/455/10 1074/456/10 1070/457/10
+f 1070/457/10 1069/458/10 1073/455/10
+f 1074/459/7 1075/460/7 1071/461/7
+f 1071/461/7 1070/462/7 1074/459/7
+f 1075/456/4 1076/455/4 1072/458/4
+f 1072/458/4 1071/457/4 1075/456/4
+f 1076/460/1 1073/459/1 1069/462/1
+f 1069/462/1 1072/461/1 1076/460/1
+f 1077/451/27 1078/452/27 1079/453/27
+f 1079/453/27 1080/454/27 1077/451/27
+f 1081/455/10 1082/456/10 1078/457/10
+f 1078/457/10 1077/458/10 1081/455/10
+f 1082/459/7 1083/460/7 1079/461/7
+f 1079/461/7 1078/462/7 1082/459/7
+f 1083/456/4 1084/455/4 1080/458/4
+f 1080/458/4 1079/457/4 1083/456/4
+f 1084/460/1 1081/459/1 1077/462/1
+f 1077/462/1 1080/461/1 1084/460/1
+f 1085/451/27 1086/452/27 1087/453/27
+f 1087/453/27 1088/454/27 1085/451/27
+f 1089/455/10 1090/456/10 1086/457/10
+f 1086/457/10 1085/458/10 1089/455/10
+f 1090/459/7 1091/460/7 1087/461/7
+f 1087/461/7 1086/462/7 1090/459/7
+f 1091/456/4 1092/455/4 1088/458/4
+f 1088/458/4 1087/457/4 1091/456/4
+f 1092/460/1 1089/459/1 1085/462/1
+f 1085/462/1 1088/461/1 1092/460/1
+f 1093/451/27 1094/452/27 1095/453/27
+f 1095/453/27 1096/454/27 1093/451/27
+f 1097/455/7 1098/456/7 1094/457/7
+f 1094/457/7 1093/458/7 1097/455/7
+f 1098/459/4 1099/460/4 1095/461/4
+f 1095/461/4 1094/462/4 1098/459/4
+f 1099/456/1 1100/455/1 1096/458/1
+f 1096/458/1 1095/457/1 1099/456/1
+f 1100/460/10 1097/459/10 1093/462/10
+f 1093/462/10 1096/461/10 1100/460/10
+f 1101/451/27 1102/452/27 1103/453/27
+f 1103/453/27 1104/454/27 1101/451/27
+f 1105/455/7 1106/456/7 1102/457/7
+f 1102/457/7 1101/458/7 1105/455/7
+f 1106/459/4 1107/460/4 1103/461/4
+f 1103/461/4 1102/462/4 1106/459/4
+f 1107/456/1 1108/455/1 1104/458/1
+f 1104/458/1 1103/457/1 1107/456/1
+f 1108/460/10 1105/459/10 1101/462/10
+f 1101/462/10 1104/461/10 1108/460/10
+f 1109/451/27 1110/452/27 1111/453/27
+f 1111/453/27 1112/454/27 1109/451/27
+f 1113/455/7 1114/456/7 1110/457/7
+f 1110/457/7 1109/458/7 1113/455/7
+f 1114/459/4 1115/460/4 1111/461/4
+f 1111/461/4 1110/462/4 1114/459/4
+f 1115/456/1 1116/455/1 1112/458/1
+f 1112/458/1 1111/457/1 1115/456/1
+f 1116/460/10 1113/459/10 1109/462/10
+f 1109/462/10 1112/461/10 1116/460/10
+f 1117/451/27 1118/452/27 1119/453/27
+f 1119/453/27 1120/454/27 1117/451/27
+f 1121/455/7 1122/456/7 1118/457/7
+f 1118/457/7 1117/458/7 1121/455/7
+f 1122/459/4 1123/460/4 1119/461/4
+f 1119/461/4 1118/462/4 1122/459/4
+f 1123/456/1 1124/455/1 1120/458/1
+f 1120/458/1 1119/457/1 1123/456/1
+f 1124/460/10 1121/459/10 1117/462/10
+f 1117/462/10 1120/461/10 1124/460/10
+f 1125/451/27 1126/452/27 1127/453/27
+f 1127/453/27 1128/454/27 1125/451/27
+f 1129/455/7 1130/456/7 1126/457/7
+f 1126/457/7 1125/458/7 1129/455/7
+f 1130/459/4 1131/460/4 1127/461/4
+f 1127/461/4 1126/462/4 1130/459/4
+f 1131/456/1 1132/455/1 1128/458/1
+f 1128/458/1 1127/457/1 1131/456/1
+f 1132/460/10 1129/459/10 1125/462/10
+f 1125/462/10 1128/461/10 1132/460/10
+f 1133/451/27 1134/452/27 1135/453/27
+f 1135/453/27 1136/454/27 1133/451/27
+f 1137/455/7 1138/456/7 1134/457/7
+f 1134/457/7 1133/458/7 1137/455/7
+f 1138/459/4 1139/460/4 1135/461/4
+f 1135/461/4 1134/462/4 1138/459/4
+f 1139/456/1 1140/455/1 1136/458/1
+f 1136/458/1 1135/457/1 1139/456/1
+f 1140/460/10 1137/459/10 1133/462/10
+f 1133/462/10 1136/461/10 1140/460/10
+f 1141/451/27 1142/452/27 1143/453/27
+f 1143/453/27 1144/454/27 1141/451/27
+f 1145/455/7 1146/456/7 1142/457/7
+f 1142/457/7 1141/458/7 1145/455/7
+f 1146/459/4 1147/460/4 1143/461/4
+f 1143/461/4 1142/462/4 1146/459/4
+f 1147/456/1 1148/455/1 1144/458/1
+f 1144/458/1 1143/457/1 1147/456/1
+f 1148/460/10 1145/459/10 1141/462/10
+f 1141/462/10 1144/461/10 1148/460/10
+f 1149/451/27 1150/452/27 1151/453/27
+f 1151/453/27 1152/454/27 1149/451/27
+f 1153/455/7 1154/456/7 1150/457/7
+f 1150/457/7 1149/458/7 1153/455/7
+f 1154/459/4 1155/460/4 1151/461/4
+f 1151/461/4 1150/462/4 1154/459/4
+f 1155/456/1 1156/455/1 1152/458/1
+f 1152/458/1 1151/457/1 1155/456/1
+f 1156/460/10 1153/459/10 1149/462/10
+f 1149/462/10 1152/461/10 1156/460/10
+f 1157/451/27 1158/452/27 1159/453/27
+f 1159/453/27 1160/454/27 1157/451/27
+f 1161/455/7 1162/456/7 1158/457/7
+f 1158/457/7 1157/458/7 1161/455/7
+f 1162/459/4 1163/460/4 1159/461/4
+f 1159/461/4 1158/462/4 1162/459/4
+f 1163/456/1 1164/455/1 1160/458/1
+f 1160/458/1 1159/457/1 1163/456/1
+f 1164/460/10 1161/459/10 1157/462/10
+f 1157/462/10 1160/461/10 1164/460/10
+f 1165/451/27 1166/452/27 1167/453/27
+f 1167/453/27 1168/454/27 1165/451/27
+f 1169/455/7 1170/456/7 1166/457/7
+f 1166/457/7 1165/458/7 1169/455/7
+f 1170/459/4 1171/460/4 1167/461/4
+f 1167/461/4 1166/462/4 1170/459/4
+f 1171/456/1 1172/455/1 1168/458/1
+f 1168/458/1 1167/457/1 1171/456/1
+f 1172/460/10 1169/459/10 1165/462/10
+f 1165/462/10 1168/461/10 1172/460/10
+f 1173/451/27 1174/452/27 1175/453/27
+f 1175/453/27 1176/454/27 1173/451/27
+f 1177/455/7 1178/456/7 1174/457/7
+f 1174/457/7 1173/458/7 1177/455/7
+f 1178/459/4 1179/460/4 1175/461/4
+f 1175/461/4 1174/462/4 1178/459/4
+f 1179/456/1 1180/455/1 1176/458/1
+f 1176/458/1 1175/457/1 1179/456/1
+f 1180/460/10 1177/459/10 1173/462/10
+f 1173/462/10 1176/461/10 1180/460/10
+f 1181/451/27 1182/452/27 1183/453/27
+f 1183/453/27 1184/454/27 1181/451/27
+f 1185/455/7 1186/456/7 1182/457/7
+f 1182/457/7 1181/458/7 1185/455/7
+f 1186/459/4 1187/460/4 1183/461/4
+f 1183/461/4 1182/462/4 1186/459/4
+f 1187/456/1 1188/455/1 1184/458/1
+f 1184/458/1 1183/457/1 1187/456/1
+f 1188/460/10 1185/459/10 1181/462/10
+f 1181/462/10 1184/461/10 1188/460/10
+f 1189/451/27 1190/452/27 1191/453/27
+f 1191/453/27 1192/454/27 1189/451/27
+f 1193/455/7 1194/456/7 1190/457/7
+f 1190/457/7 1189/458/7 1193/455/7
+f 1194/459/4 1195/460/4 1191/461/4
+f 1191/461/4 1190/462/4 1194/459/4
+f 1195/456/1 1196/455/1 1192/458/1
+f 1192/458/1 1191/457/1 1195/456/1
+f 1196/460/10 1193/459/10 1189/462/10
+f 1189/462/10 1192/461/10 1196/460/10
+f 1197/451/27 1198/452/27 1199/453/27
+f 1199/453/27 1200/454/27 1197/451/27
+f 1201/455/7 1202/456/7 1198/457/7
+f 1198/457/7 1197/458/7 1201/455/7
+f 1202/459/4 1203/460/4 1199/461/4
+f 1199/461/4 1198/462/4 1202/459/4
+f 1203/456/1 1204/455/1 1200/458/1
+f 1200/458/1 1199/457/1 1203/456/1
+f 1204/460/10 1201/459/10 1197/462/10
+f 1197/462/10 1200/461/10 1204/460/10
+f 1205/451/27 1206/452/27 1207/453/27
+f 1207/453/27 1208/454/27 1205/451/27
+f 1209/455/7 1210/456/7 1206/457/7
+f 1206/457/7 1205/458/7 1209/455/7
+f 1210/459/4 1211/460/4 1207/461/4
+f 1207/461/4 1206/462/4 1210/459/4
+f 1211/456/1 1212/455/1 1208/458/1
+f 1208/458/1 1207/457/1 1211/456/1
+f 1212/460/10 1209/459/10 1205/462/10
+f 1205/462/10 1208/461/10 1212/460/10
+f 1213/451/27 1214/452/27 1215/453/27
+f 1215/453/27 1216/454/27 1213/451/27
+f 1217/455/7 1218/456/7 1214/457/7
+f 1214/457/7 1213/458/7 1217/455/7
+f 1218/459/4 1219/460/4 1215/461/4
+f 1215/461/4 1214/462/4 1218/459/4
+f 1219/456/1 1220/455/1 1216/458/1
+f 1216/458/1 1215/457/1 1219/456/1
+f 1220/460/10 1217/459/10 1213/462/10
+f 1213/462/10 1216/461/10 1220/460/10
+f 1221/451/27 1222/452/27 1223/453/27
+f 1223/453/27 1224/454/27 1221/451/27
+f 1225/455/7 1226/456/7 1222/457/7
+f 1222/457/7 1221/458/7 1225/455/7
+f 1226/459/4 1227/460/4 1223/461/4
+f 1223/461/4 1222/462/4 1226/459/4
+f 1227/456/1 1228/455/1 1224/458/1
+f 1224/458/1 1223/457/1 1227/456/1
+f 1228/460/10 1225/459/10 1221/462/10
+f 1221/462/10 1224/461/10 1228/460/10
+f 1229/451/27 1230/452/27 1231/453/27
+f 1231/453/27 1232/454/27 1229/451/27
+f 1233/455/4 1234/456/4 1230/457/4
+f 1230/457/4 1229/458/4 1233/455/4
+f 1234/459/1 1235/460/1 1231/461/1
+f 1231/461/1 1230/462/1 1234/459/1
+f 1235/456/10 1236/455/10 1232/458/10
+f 1232/458/10 1231/457/10 1235/456/10
+f 1236/460/7 1233/459/7 1229/462/7
+f 1229/462/7 1232/461/7 1236/460/7
+f 1237/451/27 1238/452/27 1239/453/27
+f 1239/453/27 1240/454/27 1237/451/27
+f 1241/455/4 1242/456/4 1238/457/4
+f 1238/457/4 1237/458/4 1241/455/4
+f 1242/459/1 1243/460/1 1239/461/1
+f 1239/461/1 1238/462/1 1242/459/1
+f 1243/456/10 1244/455/10 1240/458/10
+f 1240/458/10 1239/457/10 1243/456/10
+f 1244/460/7 1241/459/7 1237/462/7
+f 1237/462/7 1240/461/7 1244/460/7
+f 1245/451/27 1246/452/27 1247/453/27
+f 1247/453/27 1248/454/27 1245/451/27
+f 1249/455/4 1250/456/4 1246/457/4
+f 1246/457/4 1245/458/4 1249/455/4
+f 1250/459/1 1251/460/1 1247/461/1
+f 1247/461/1 1246/462/1 1250/459/1
+f 1251/456/10 1252/455/10 1248/458/10
+f 1248/458/10 1247/457/10 1251/456/10
+f 1252/460/7 1249/459/7 1245/462/7
+f 1245/462/7 1248/461/7 1252/460/7
+f 1253/451/27 1254/452/27 1255/453/27
+f 1255/453/27 1256/454/27 1253/451/27
+f 1257/455/4 1258/456/4 1254/457/4
+f 1254/457/4 1253/458/4 1257/455/4
+f 1258/459/1 1259/460/1 1255/461/1
+f 1255/461/1 1254/462/1 1258/459/1
+f 1259/456/10 1260/455/10 1256/458/10
+f 1256/458/10 1255/457/10 1259/456/10
+f 1260/460/7 1257/459/7 1253/462/7
+f 1253/462/7 1256/461/7 1260/460/7
+f 1261/451/27 1262/452/27 1263/453/27
+f 1263/453/27 1264/454/27 1261/451/27
+f 1265/455/7 1266/456/7 1262/457/7
+f 1262/457/7 1261/458/7 1265/455/7
+f 1266/459/4 1267/460/4 1263/461/4
+f 1263/461/4 1262/462/4 1266/459/4
+f 1267/456/1 1268/455/1 1264/458/1
+f 1264/458/1 1263/457/1 1267/456/1
+f 1268/460/10 1265/459/10 1261/462/10
+f 1261/462/10 1264/461/10 1268/460/10
+f 1269/451/27 1270/452/27 1271/453/27
+f 1271/453/27 1272/454/27 1269/451/27
+f 1273/455/7 1274/456/7 1270/457/7
+f 1270/457/7 1269/458/7 1273/455/7
+f 1274/459/4 1275/460/4 1271/461/4
+f 1271/461/4 1270/462/4 1274/459/4
+f 1275/456/1 1276/455/1 1272/458/1
+f 1272/458/1 1271/457/1 1275/456/1
+f 1276/460/10 1273/459/10 1269/462/10
+f 1269/462/10 1272/461/10 1276/460/10
+f 1277/451/27 1278/452/27 1279/453/27
+f 1279/453/27 1280/454/27 1277/451/27
+f 1281/455/7 1282/456/7 1278/457/7
+f 1278/457/7 1277/458/7 1281/455/7
+f 1282/459/4 1283/460/4 1279/461/4
+f 1279/461/4 1278/462/4 1282/459/4
+f 1283/456/1 1284/455/1 1280/458/1
+f 1280/458/1 1279/457/1 1283/456/1
+f 1284/460/10 1281/459/10 1277/462/10
+f 1277/462/10 1280/461/10 1284/460/10
+f 1285/451/27 1286/452/27 1287/453/27
+f 1287/453/27 1288/454/27 1285/451/27
+f 1289/455/7 1290/456/7 1286/457/7
+f 1286/457/7 1285/458/7 1289/455/7
+f 1290/459/4 1291/460/4 1287/461/4
+f 1287/461/4 1286/462/4 1290/459/4
+f 1291/456/1 1292/455/1 1288/458/1
+f 1288/458/1 1287/457/1 1291/456/1
+f 1292/460/10 1289/459/10 1285/462/10
+f 1285/462/10 1288/461/10 1292/460/10
+f 1293/451/27 1294/452/27 1295/453/27
+f 1295/453/27 1296/454/27 1293/451/27
+f 1297/455/7 1298/456/7 1294/457/7
+f 1294/457/7 1293/458/7 1297/455/7
+f 1298/459/4 1299/460/4 1295/461/4
+f 1295/461/4 1294/462/4 1298/459/4
+f 1299/456/1 1300/455/1 1296/458/1
+f 1296/458/1 1295/457/1 1299/456/1
+f 1300/460/10 1297/459/10 1293/462/10
+f 1293/462/10 1296/461/10 1300/460/10
+f 1301/451/27 1302/452/27 1303/453/27
+f 1303/453/27 1304/454/27 1301/451/27
+f 1305/455/7 1306/456/7 1302/457/7
+f 1302/457/7 1301/458/7 1305/455/7
+f 1306/459/4 1307/460/4 1303/461/4
+f 1303/461/4 1302/462/4 1306/459/4
+f 1307/456/1 1308/455/1 1304/458/1
+f 1304/458/1 1303/457/1 1307/456/1
+f 1308/460/10 1305/459/10 1301/462/10
+f 1301/462/10 1304/461/10 1308/460/10
+f 1309/451/27 1310/452/27 1311/453/27
+f 1311/453/27 1312/454/27 1309/451/27
+f 1313/455/7 1314/456/7 1310/457/7
+f 1310/457/7 1309/458/7 1313/455/7
+f 1314/459/4 1315/460/4 1311/461/4
+f 1311/461/4 1310/462/4 1314/459/4
+f 1315/456/1 1316/455/1 1312/458/1
+f 1312/458/1 1311/457/1 1315/456/1
+f 1316/460/10 1313/459/10 1309/462/10
+f 1309/462/10 1312/461/10 1316/460/10
+f 1317/451/27 1318/452/27 1319/453/27
+f 1319/453/27 1320/454/27 1317/451/27
+f 1321/455/4 1322/456/4 1318/457/4
+f 1318/457/4 1317/458/4 1321/455/4
+f 1322/459/1 1323/460/1 1319/461/1
+f 1319/461/1 1318/462/1 1322/459/1
+f 1323/456/10 1324/455/10 1320/458/10
+f 1320/458/10 1319/457/10 1323/456/10
+f 1324/460/7 1321/459/7 1317/462/7
+f 1317/462/7 1320/461/7 1324/460/7
+f 1325/451/27 1326/452/27 1327/453/27
+f 1327/453/27 1328/454/27 1325/451/27
+f 1329/455/4 1330/456/4 1326/457/4
+f 1326/457/4 1325/458/4 1329/455/4
+f 1330/459/1 1331/460/1 1327/461/1
+f 1327/461/1 1326/462/1 1330/459/1
+f 1331/456/10 1332/455/10 1328/458/10
+f 1328/458/10 1327/457/10 1331/456/10
+f 1332/460/7 1329/459/7 1325/462/7
+f 1325/462/7 1328/461/7 1332/460/7
+f 1333/451/27 1334/452/27 1335/453/27
+f 1335/453/27 1336/454/27 1333/451/27
+f 1337/455/4 1338/456/4 1334/457/4
+f 1334/457/4 1333/458/4 1337/455/4
+f 1338/459/1 1339/460/1 1335/461/1
+f 1335/461/1 1334/462/1 1338/459/1
+f 1339/456/10 1340/455/10 1336/458/10
+f 1336/458/10 1335/457/10 1339/456/10
+f 1340/460/7 1337/459/7 1333/462/7
+f 1333/462/7 1336/461/7 1340/460/7
+f 1341/451/27 1342/452/27 1343/453/27
+f 1343/453/27 1344/454/27 1341/451/27
+f 1345/455/4 1346/456/4 1342/457/4
+f 1342/457/4 1341/458/4 1345/455/4
+f 1346/459/1 1347/460/1 1343/461/1
+f 1343/461/1 1342/462/1 1346/459/1
+f 1347/456/10 1348/455/10 1344/458/10
+f 1344/458/10 1343/457/10 1347/456/10
+f 1348/460/7 1345/459/7 1341/462/7
+f 1341/462/7 1344/461/7 1348/460/7
+f 1349/451/27 1350/452/27 1351/453/27
+f 1351/453/27 1352/454/27 1349/451/27
+f 1353/455/4 1354/456/4 1350/457/4
+f 1350/457/4 1349/458/4 1353/455/4
+f 1354/459/1 1355/460/1 1351/461/1
+f 1351/461/1 1350/462/1 1354/459/1
+f 1355/456/10 1356/455/10 1352/458/10
+f 1352/458/10 1351/457/10 1355/456/10
+f 1356/460/7 1353/459/7 1349/462/7
+f 1349/462/7 1352/461/7 1356/460/7
+f 1357/463/27 1358/464/27 1359/465/27
+f 1359/465/27 1360/466/27 1357/463/27
+f 1361/467/4 1362/468/4 1359/469/4
+f 1359/469/4 1358/470/4 1361/467/4
+f 1363/471/4 1364/472/4 1365/473/4
+f 1365/473/4 1366/474/4 1363/471/4
+f 1367/475/1 1368/476/1 1369/477/1
+f 1369/477/1 1370/478/1 1367/475/1
+f 1371/479/27 1372/480/288 1373/480/288
+f 1373/480/288 1374/479/27 1371/479/27
+f 1375/476/7 1376/475/7 1377/481/7
+f 1377/481/7 1378/482/7 1375/476/7
+f 1379/483/26 1380/484/289 1381/485/289
+f 1381/485/289 1382/483/26 1379/483/26
+f 1383/486/4 1384/487/4 1385/488/4
+f 1386/489/4 1387/490/4 1372/491/4
+f 1372/491/4 1371/492/4 1386/489/4
+f 1388/493/4 1389/494/4 1390/495/4
+f 1391/496/4 1392/497/4 1390/495/4
+f 1390/495/4 1389/494/4 1391/496/4
+f 1393/498/4 1394/499/4 1365/473/4
+f 1365/473/4 1364/472/4 1393/498/4
+f 1395/500/290 1371/479/27 1374/479/27
+f 1374/479/27 1396/500/290 1395/500/290
+f 1397/501/291 1379/483/26 1382/483/26
+f 1382/483/26 1398/501/291 1397/501/291
+f 1395/502/4 1399/503/4 1386/489/4
+f 1386/489/4 1371/492/4 1395/502/4
+f 1391/496/4 1383/486/4 1385/488/4
+f 1385/488/4 1392/497/4 1391/496/4
+f 1387/504/7 1363/504/7 1366/505/7
+f 1366/505/7 1400/505/7 1387/504/7
+f 1386/506/292 1364/506/292 1363/504/292
+f 1363/504/292 1387/504/292 1386/506/292
+f 1399/507/293 1393/507/293 1364/506/293
+f 1364/506/293 1386/506/293 1399/507/293
+f 1401/508/1 1394/508/1 1393/507/1
+f 1393/507/1 1399/507/1 1401/508/1
+f 1402/509/210 1365/510/210 1394/511/210
+f 1394/511/210 1401/512/210 1402/509/210
+f 1400/513/294 1366/514/294 1365/510/294
+f 1365/510/294 1402/509/294 1400/513/294
+f 1403/515/4 1401/516/4 1399/503/4
+f 1399/503/4 1395/502/4 1403/515/4
+f 1395/500/7 1396/500/7 1404/517/7
+f 1404/517/7 1403/517/7 1395/500/7
+f 1372/480/1 1405/518/1 1406/518/1
+f 1406/518/1 1373/480/1 1372/480/1
+f 1405/519/4 1372/491/4 1387/490/4
+f 1387/490/4 1400/474/4 1405/519/4
+f 1367/475/1 1407/481/1 1408/482/1
+f 1408/482/1 1368/476/1 1367/475/1
+f 1400/513/295 1385/513/295 1384/485/295
+f 1384/485/295 1405/520/295 1400/513/295
+f 1402/509/294 1392/509/294 1385/513/294
+f 1385/513/294 1400/513/294 1402/509/294
+f 1401/512/210 1390/512/210 1392/509/210
+f 1392/509/210 1402/509/210 1401/512/210
+f 1403/521/296 1388/521/296 1390/512/296
+f 1390/512/296 1401/512/296 1403/521/296
+f 1375/476/7 1409/477/7 1410/478/7
+f 1410/478/7 1376/475/7 1375/476/7
+f 1379/483/289 1391/522/289 1389/523/289
+f 1389/523/289 1380/484/289 1379/483/289
+f 1397/501/291 1383/524/291 1391/522/291
+f 1391/522/291 1379/483/291 1397/501/291
+f 1405/520/27 1367/525/27 1370/526/27
+f 1370/526/27 1406/527/27 1405/520/27
+f 1384/485/27 1407/528/27 1367/525/27
+f 1367/525/27 1405/520/27 1384/485/27
+f 1383/486/4 1408/486/4 1407/487/4
+f 1407/487/4 1384/487/4 1383/486/4
+f 1397/501/26 1368/501/26 1408/524/26
+f 1408/524/26 1383/524/26 1397/501/26
+f 1398/501/26 1369/501/26 1368/501/26
+f 1368/501/26 1397/501/26 1398/501/26
+f 1380/484/26 1375/484/26 1378/485/26
+f 1378/485/26 1381/485/26 1380/484/26
+f 1389/523/26 1409/523/26 1375/484/26
+f 1375/484/26 1380/484/26 1389/523/26
+f 1388/493/4 1410/529/4 1409/530/4
+f 1409/530/4 1389/494/4 1388/493/4
+f 1403/521/27 1376/531/27 1410/532/27
+f 1410/532/27 1388/521/27 1403/521/27
+f 1404/533/27 1377/531/27 1376/531/27
+f 1376/531/27 1403/521/27 1404/533/27
+f 1411/471/4 1412/472/4 1413/473/4
+f 1413/473/4 1414/474/4 1411/471/4
+f 1415/475/1 1416/476/1 1417/477/1
+f 1417/477/1 1418/478/1 1415/475/1
+f 1419/479/27 1420/480/288 1421/480/288
+f 1421/480/288 1422/479/27 1419/479/27
+f 1423/476/7 1424/475/7 1425/481/7
+f 1425/481/7 1426/482/7 1423/476/7
+f 1427/483/26 1428/484/289 1429/485/289
+f 1429/485/289 1430/483/26 1427/483/26
+f 1431/486/4 1432/487/4 1433/488/4
+f 1434/489/4 1435/490/4 1420/491/4
+f 1420/491/4 1419/492/4 1434/489/4
+f 1436/493/4 1437/494/4 1438/495/4
+f 1439/496/4 1440/497/4 1438/495/4
+f 1438/495/4 1437/494/4 1439/496/4
+f 1441/498/4 1442/499/4 1413/473/4
+f 1413/473/4 1412/472/4 1441/498/4
+f 1443/500/290 1419/479/27 1422/479/27
+f 1422/479/27 1444/500/290 1443/500/290
+f 1445/501/291 1427/483/26 1430/483/26
+f 1430/483/26 1446/501/291 1445/501/291
+f 1443/502/4 1447/503/4 1434/489/4
+f 1434/489/4 1419/492/4 1443/502/4
+f 1439/496/4 1431/486/4 1433/488/4
+f 1433/488/4 1440/497/4 1439/496/4
+f 1435/504/7 1411/504/7 1414/505/7
+f 1414/505/7 1448/505/7 1435/504/7
+f 1434/506/292 1412/506/292 1411/504/292
+f 1411/504/292 1435/504/292 1434/506/292
+f 1447/507/293 1441/507/293 1412/506/293
+f 1412/506/293 1434/506/293 1447/507/293
+f 1449/508/1 1442/508/1 1441/507/1
+f 1441/507/1 1447/507/1 1449/508/1
+f 1450/509/210 1413/510/210 1442/511/210
+f 1442/511/210 1449/512/210 1450/509/210
+f 1448/513/294 1414/514/294 1413/510/294
+f 1413/510/294 1450/509/294 1448/513/294
+f 1451/515/4 1449/516/4 1447/503/4
+f 1447/503/4 1443/502/4 1451/515/4
+f 1443/500/7 1444/500/7 1452/517/7
+f 1452/517/7 1451/517/7 1443/500/7
+f 1420/480/1 1453/518/1 1454/518/1
+f 1454/518/1 1421/480/1 1420/480/1
+f 1453/519/4 1420/491/4 1435/490/4
+f 1435/490/4 1448/474/4 1453/519/4
+f 1415/475/1 1455/481/1 1456/482/1
+f 1456/482/1 1416/476/1 1415/475/1
+f 1448/513/295 1433/513/295 1432/485/295
+f 1432/485/295 1453/520/295 1448/513/295
+f 1450/509/294 1440/509/294 1433/513/294
+f 1433/513/294 1448/513/294 1450/509/294
+f 1449/512/210 1438/512/210 1440/509/210
+f 1440/509/210 1450/509/210 1449/512/210
+f 1451/521/296 1436/521/296 1438/512/296
+f 1438/512/296 1449/512/296 1451/521/296
+f 1423/476/7 1457/477/7 1458/478/7
+f 1458/478/7 1424/475/7 1423/476/7
+f 1427/483/289 1439/522/289 1437/523/289
+f 1437/523/289 1428/484/289 1427/483/289
+f 1445/501/291 1431/524/291 1439/522/291
+f 1439/522/291 1427/483/291 1445/501/291
+f 1453/520/27 1415/525/27 1418/526/27
+f 1418/526/27 1454/527/27 1453/520/27
+f 1432/485/27 1455/528/27 1415/525/27
+f 1415/525/27 1453/520/27 1432/485/27
+f 1431/486/4 1456/486/4 1455/487/4
+f 1455/487/4 1432/487/4 1431/486/4
+f 1445/501/26 1416/501/26 1456/524/26
+f 1456/524/26 1431/524/26 1445/501/26
+f 1446/501/26 1417/501/26 1416/501/26
+f 1416/501/26 1445/501/26 1446/501/26
+f 1428/484/26 1423/484/26 1426/485/26
+f 1426/485/26 1429/485/26 1428/484/26
+f 1437/523/26 1457/523/26 1423/484/26
+f 1423/484/26 1428/484/26 1437/523/26
+f 1436/493/4 1458/529/4 1457/530/4
+f 1457/530/4 1437/494/4 1436/493/4
+f 1451/521/27 1424/531/27 1458/532/27
+f 1458/532/27 1436/521/27 1451/521/27
+f 1452/533/27 1425/531/27 1424/531/27
+f 1424/531/27 1451/521/27 1452/533/27
+f 1459/471/4 1460/472/4 1461/473/4
+f 1461/473/4 1462/474/4 1459/471/4
+f 1463/475/1 1464/476/1 1465/477/1
+f 1465/477/1 1466/478/1 1463/475/1
+f 1467/479/27 1468/480/288 1469/480/288
+f 1469/480/288 1470/479/27 1467/479/27
+f 1471/476/7 1472/475/7 1473/481/7
+f 1473/481/7 1474/482/7 1471/476/7
+f 1475/483/26 1476/484/289 1477/485/289
+f 1477/485/289 1478/483/26 1475/483/26
+f 1479/486/4 1480/487/4 1481/488/4
+f 1482/489/4 1483/490/4 1468/491/4
+f 1468/491/4 1467/492/4 1482/489/4
+f 1484/493/4 1485/494/4 1486/495/4
+f 1487/496/4 1488/497/4 1486/495/4
+f 1486/495/4 1485/494/4 1487/496/4
+f 1489/498/4 1490/499/4 1461/473/4
+f 1461/473/4 1460/472/4 1489/498/4
+f 1491/500/290 1467/479/27 1470/479/27
+f 1470/479/27 1492/500/290 1491/500/290
+f 1493/501/291 1475/483/26 1478/483/26
+f 1478/483/26 1494/501/291 1493/501/291
+f 1491/502/4 1495/503/4 1482/489/4
+f 1482/489/4 1467/492/4 1491/502/4
+f 1487/496/4 1479/486/4 1481/488/4
+f 1481/488/4 1488/497/4 1487/496/4
+f 1483/504/7 1459/504/7 1462/505/7
+f 1462/505/7 1496/505/7 1483/504/7
+f 1482/506/292 1460/506/292 1459/504/292
+f 1459/504/292 1483/504/292 1482/506/292
+f 1495/507/293 1489/507/293 1460/506/293
+f 1460/506/293 1482/506/293 1495/507/293
+f 1497/508/1 1490/508/1 1489/507/1
+f 1489/507/1 1495/507/1 1497/508/1
+f 1498/509/210 1461/510/210 1490/511/210
+f 1490/511/210 1497/512/210 1498/509/210
+f 1496/513/294 1462/514/294 1461/510/294
+f 1461/510/294 1498/509/294 1496/513/294
+f 1499/515/4 1497/516/4 1495/503/4
+f 1495/503/4 1491/502/4 1499/515/4
+f 1491/500/7 1492/500/7 1500/517/7
+f 1500/517/7 1499/517/7 1491/500/7
+f 1468/480/1 1501/518/1 1502/518/1
+f 1502/518/1 1469/480/1 1468/480/1
+f 1501/519/4 1468/491/4 1483/490/4
+f 1483/490/4 1496/474/4 1501/519/4
+f 1463/475/1 1503/481/1 1504/482/1
+f 1504/482/1 1464/476/1 1463/475/1
+f 1496/513/295 1481/513/295 1480/485/295
+f 1480/485/295 1501/520/295 1496/513/295
+f 1498/509/294 1488/509/294 1481/513/294
+f 1481/513/294 1496/513/294 1498/509/294
+f 1497/512/210 1486/512/210 1488/509/210
+f 1488/509/210 1498/509/210 1497/512/210
+f 1499/521/296 1484/521/296 1486/512/296
+f 1486/512/296 1497/512/296 1499/521/296
+f 1471/476/7 1505/477/7 1506/478/7
+f 1506/478/7 1472/475/7 1471/476/7
+f 1475/483/289 1487/522/289 1485/523/289
+f 1485/523/289 1476/484/289 1475/483/289
+f 1493/501/291 1479/524/291 1487/522/291
+f 1487/522/291 1475/483/291 1493/501/291
+f 1501/520/27 1463/525/27 1466/526/27
+f 1466/526/27 1502/527/27 1501/520/27
+f 1480/485/27 1503/528/27 1463/525/27
+f 1463/525/27 1501/520/27 1480/485/27
+f 1479/486/4 1504/486/4 1503/487/4
+f 1503/487/4 1480/487/4 1479/486/4
+f 1493/501/26 1464/501/26 1504/524/26
+f 1504/524/26 1479/524/26 1493/501/26
+f 1494/501/26 1465/501/26 1464/501/26
+f 1464/501/26 1493/501/26 1494/501/26
+f 1476/484/26 1471/484/26 1474/485/26
+f 1474/485/26 1477/485/26 1476/484/26
+f 1485/523/26 1505/523/26 1471/484/26
+f 1471/484/26 1476/484/26 1485/523/26
+f 1484/493/4 1506/529/4 1505/530/4
+f 1505/530/4 1485/494/4 1484/493/4
+f 1499/521/27 1472/531/27 1506/532/27
+f 1506/532/27 1484/521/27 1499/521/27
+f 1500/533/27 1473/531/27 1472/531/27
+f 1472/531/27 1499/521/27 1500/533/27
+f 1507/471/4 1508/472/4 1509/473/4
+f 1509/473/4 1510/474/4 1507/471/4
+f 1511/475/1 1512/476/1 1513/477/1
+f 1513/477/1 1514/478/1 1511/475/1
+f 1515/479/27 1516/480/288 1517/480/288
+f 1517/480/288 1518/479/27 1515/479/27
+f 1519/476/7 1520/475/7 1521/481/7
+f 1521/481/7 1522/482/7 1519/476/7
+f 1523/483/26 1524/484/289 1525/485/289
+f 1525/485/289 1526/483/26 1523/483/26
+f 1527/486/4 1528/487/4 1529/488/4
+f 1530/489/4 1531/490/4 1516/491/4
+f 1516/491/4 1515/492/4 1530/489/4
+f 1532/493/4 1533/494/4 1534/495/4
+f 1535/496/4 1536/497/4 1534/495/4
+f 1534/495/4 1533/494/4 1535/496/4
+f 1537/498/4 1538/499/4 1509/473/4
+f 1509/473/4 1508/472/4 1537/498/4
+f 1539/500/290 1515/479/27 1518/479/27
+f 1518/479/27 1540/500/290 1539/500/290
+f 1541/501/291 1523/483/26 1526/483/26
+f 1526/483/26 1542/501/291 1541/501/291
+f 1539/502/4 1543/503/4 1530/489/4
+f 1530/489/4 1515/492/4 1539/502/4
+f 1535/496/4 1527/486/4 1529/488/4
+f 1529/488/4 1536/497/4 1535/496/4
+f 1531/504/7 1507/504/7 1510/505/7
+f 1510/505/7 1544/505/7 1531/504/7
+f 1530/506/292 1508/506/292 1507/504/292
+f 1507/504/292 1531/504/292 1530/506/292
+f 1543/507/293 1537/507/293 1508/506/293
+f 1508/506/293 1530/506/293 1543/507/293
+f 1545/508/1 1538/508/1 1537/507/1
+f 1537/507/1 1543/507/1 1545/508/1
+f 1546/509/210 1509/510/210 1538/511/210
+f 1538/511/210 1545/512/210 1546/509/210
+f 1544/513/294 1510/514/294 1509/510/294
+f 1509/510/294 1546/509/294 1544/513/294
+f 1547/515/4 1545/516/4 1543/503/4
+f 1543/503/4 1539/502/4 1547/515/4
+f 1539/500/7 1540/500/7 1548/517/7
+f 1548/517/7 1547/517/7 1539/500/7
+f 1516/480/1 1549/518/1 1550/518/1
+f 1550/518/1 1517/480/1 1516/480/1
+f 1549/519/4 1516/491/4 1531/490/4
+f 1531/490/4 1544/474/4 1549/519/4
+f 1511/475/1 1551/481/1 1552/482/1
+f 1552/482/1 1512/476/1 1511/475/1
+f 1544/513/295 1529/513/295 1528/485/295
+f 1528/485/295 1549/520/295 1544/513/295
+f 1546/509/294 1536/509/294 1529/513/294
+f 1529/513/294 1544/513/294 1546/509/294
+f 1545/512/210 1534/512/210 1536/509/210
+f 1536/509/210 1546/509/210 1545/512/210
+f 1547/521/296 1532/521/296 1534/512/296
+f 1534/512/296 1545/512/296 1547/521/296
+f 1519/476/7 1553/477/7 1554/478/7
+f 1554/478/7 1520/475/7 1519/476/7
+f 1523/483/289 1535/522/289 1533/523/289
+f 1533/523/289 1524/484/289 1523/483/289
+f 1541/501/291 1527/524/291 1535/522/291
+f 1535/522/291 1523/483/291 1541/501/291
+f 1549/520/27 1511/525/27 1514/526/27
+f 1514/526/27 1550/527/27 1549/520/27
+f 1528/485/27 1551/528/27 1511/525/27
+f 1511/525/27 1549/520/27 1528/485/27
+f 1527/486/4 1552/486/4 1551/487/4
+f 1551/487/4 1528/487/4 1527/486/4
+f 1541/501/26 1512/501/26 1552/524/26
+f 1552/524/26 1527/524/26 1541/501/26
+f 1542/501/26 1513/501/26 1512/501/26
+f 1512/501/26 1541/501/26 1542/501/26
+f 1524/484/26 1519/484/26 1522/485/26
+f 1522/485/26 1525/485/26 1524/484/26
+f 1533/523/26 1553/523/26 1519/484/26
+f 1519/484/26 1524/484/26 1533/523/26
+f 1532/493/4 1554/529/4 1553/530/4
+f 1553/530/4 1533/494/4 1532/493/4
+f 1547/521/27 1520/531/27 1554/532/27
+f 1554/532/27 1532/521/27 1547/521/27
+f 1548/533/27 1521/531/27 1520/531/27
+f 1520/531/27 1547/521/27 1548/533/27
+f 1555/471/4 1556/472/4 1557/473/4
+f 1557/473/4 1558/474/4 1555/471/4
+f 1559/475/1 1560/476/1 1561/477/1
+f 1561/477/1 1562/478/1 1559/475/1
+f 1563/479/27 1564/480/288 1565/480/288
+f 1565/480/288 1566/479/27 1563/479/27
+f 1567/476/7 1568/475/7 1569/481/7
+f 1569/481/7 1570/482/7 1567/476/7
+f 1571/483/26 1572/484/289 1573/485/289
+f 1573/485/289 1574/483/26 1571/483/26
+f 1575/486/4 1576/487/4 1577/488/4
+f 1578/489/4 1579/490/4 1564/491/4
+f 1564/491/4 1563/492/4 1578/489/4
+f 1580/493/4 1581/494/4 1582/495/4
+f 1583/496/4 1584/497/4 1582/495/4
+f 1582/495/4 1581/494/4 1583/496/4
+f 1585/498/4 1586/499/4 1557/473/4
+f 1557/473/4 1556/472/4 1585/498/4
+f 1587/500/290 1563/479/27 1566/479/27
+f 1566/479/27 1588/500/290 1587/500/290
+f 1589/501/291 1571/483/26 1574/483/26
+f 1574/483/26 1590/501/291 1589/501/291
+f 1587/502/4 1591/503/4 1578/489/4
+f 1578/489/4 1563/492/4 1587/502/4
+f 1583/496/4 1575/486/4 1577/488/4
+f 1577/488/4 1584/497/4 1583/496/4
+f 1579/504/7 1555/504/7 1558/505/7
+f 1558/505/7 1592/505/7 1579/504/7
+f 1578/506/292 1556/506/292 1555/504/292
+f 1555/504/292 1579/504/292 1578/506/292
+f 1591/507/293 1585/507/293 1556/506/293
+f 1556/506/293 1578/506/293 1591/507/293
+f 1593/508/1 1586/508/1 1585/507/1
+f 1585/507/1 1591/507/1 1593/508/1
+f 1594/509/210 1557/510/210 1586/511/210
+f 1586/511/210 1593/512/210 1594/509/210
+f 1592/513/294 1558/514/294 1557/510/294
+f 1557/510/294 1594/509/294 1592/513/294
+f 1595/515/4 1593/516/4 1591/503/4
+f 1591/503/4 1587/502/4 1595/515/4
+f 1587/500/7 1588/500/7 1596/517/7
+f 1596/517/7 1595/517/7 1587/500/7
+f 1564/480/1 1597/518/1 1598/518/1
+f 1598/518/1 1565/480/1 1564/480/1
+f 1597/519/4 1564/491/4 1579/490/4
+f 1579/490/4 1592/474/4 1597/519/4
+f 1559/475/1 1599/481/1 1600/482/1
+f 1600/482/1 1560/476/1 1559/475/1
+f 1592/513/295 1577/513/295 1576/485/295
+f 1576/485/295 1597/520/295 1592/513/295
+f 1594/509/294 1584/509/294 1577/513/294
+f 1577/513/294 1592/513/294 1594/509/294
+f 1593/512/210 1582/512/210 1584/509/210
+f 1584/509/210 1594/509/210 1593/512/210
+f 1595/521/296 1580/521/296 1582/512/296
+f 1582/512/296 1593/512/296 1595/521/296
+f 1567/476/7 1601/477/7 1602/478/7
+f 1602/478/7 1568/475/7 1567/476/7
+f 1571/483/289 1583/522/289 1581/523/289
+f 1581/523/289 1572/484/289 1571/483/289
+f 1589/501/291 1575/524/291 1583/522/291
+f 1583/522/291 1571/483/291 1589/501/291
+f 1597/520/27 1559/525/27 1562/526/27
+f 1562/526/27 1598/527/27 1597/520/27
+f 1576/485/27 1599/528/27 1559/525/27
+f 1559/525/27 1597/520/27 1576/485/27
+f 1575/486/4 1600/486/4 1599/487/4
+f 1599/487/4 1576/487/4 1575/486/4
+f 1589/501/26 1560/501/26 1600/524/26
+f 1600/524/26 1575/524/26 1589/501/26
+f 1590/501/26 1561/501/26 1560/501/26
+f 1560/501/26 1589/501/26 1590/501/26
+f 1572/484/26 1567/484/26 1570/485/26
+f 1570/485/26 1573/485/26 1572/484/26
+f 1581/523/26 1601/523/26 1567/484/26
+f 1567/484/26 1572/484/26 1581/523/26
+f 1580/493/4 1602/529/4 1601/530/4
+f 1601/530/4 1581/494/4 1580/493/4
+f 1595/521/27 1568/531/27 1602/532/27
+f 1602/532/27 1580/521/27 1595/521/27
+f 1596/533/27 1569/531/27 1568/531/27
+f 1568/531/27 1595/521/27 1596/533/27
+f 1603/471/4 1604/472/4 1605/473/4
+f 1605/473/4 1606/474/4 1603/471/4
+f 1607/475/1 1608/476/1 1609/477/1
+f 1609/477/1 1610/478/1 1607/475/1
+f 1611/479/27 1612/480/288 1613/480/288
+f 1613/480/288 1614/479/27 1611/479/27
+f 1615/476/7 1616/475/7 1617/481/7
+f 1617/481/7 1618/482/7 1615/476/7
+f 1619/483/26 1620/484/289 1621/485/289
+f 1621/485/289 1622/483/26 1619/483/26
+f 1623/486/4 1624/487/4 1625/488/4
+f 1626/489/4 1627/490/4 1612/491/4
+f 1612/491/4 1611/492/4 1626/489/4
+f 1628/493/4 1629/494/4 1630/495/4
+f 1631/496/4 1632/497/4 1630/495/4
+f 1630/495/4 1629/494/4 1631/496/4
+f 1633/498/4 1634/499/4 1605/473/4
+f 1605/473/4 1604/472/4 1633/498/4
+f 1635/500/290 1611/479/27 1614/479/27
+f 1614/479/27 1636/500/290 1635/500/290
+f 1637/501/291 1619/483/26 1622/483/26
+f 1622/483/26 1638/501/291 1637/501/291
+f 1635/502/4 1639/503/4 1626/489/4
+f 1626/489/4 1611/492/4 1635/502/4
+f 1631/496/4 1623/486/4 1625/488/4
+f 1625/488/4 1632/497/4 1631/496/4
+f 1627/504/7 1603/504/7 1606/505/7
+f 1606/505/7 1640/505/7 1627/504/7
+f 1626/506/292 1604/506/292 1603/504/292
+f 1603/504/292 1627/504/292 1626/506/292
+f 1639/507/293 1633/507/293 1604/506/293
+f 1604/506/293 1626/506/293 1639/507/293
+f 1641/508/1 1634/508/1 1633/507/1
+f 1633/507/1 1639/507/1 1641/508/1
+f 1642/509/210 1605/510/210 1634/511/210
+f 1634/511/210 1641/512/210 1642/509/210
+f 1640/513/294 1606/514/294 1605/510/294
+f 1605/510/294 1642/509/294 1640/513/294
+f 1643/515/4 1641/516/4 1639/503/4
+f 1639/503/4 1635/502/4 1643/515/4
+f 1635/500/7 1636/500/7 1644/517/7
+f 1644/517/7 1643/517/7 1635/500/7
+f 1612/480/1 1645/518/1 1646/518/1
+f 1646/518/1 1613/480/1 1612/480/1
+f 1645/519/4 1612/491/4 1627/490/4
+f 1627/490/4 1640/474/4 1645/519/4
+f 1607/475/1 1647/481/1 1648/482/1
+f 1648/482/1 1608/476/1 1607/475/1
+f 1640/513/295 1625/513/295 1624/485/295
+f 1624/485/295 1645/520/295 1640/513/295
+f 1642/509/294 1632/509/294 1625/513/294
+f 1625/513/294 1640/513/294 1642/509/294
+f 1641/512/210 1630/512/210 1632/509/210
+f 1632/509/210 1642/509/210 1641/512/210
+f 1643/521/296 1628/521/296 1630/512/296
+f 1630/512/296 1641/512/296 1643/521/296
+f 1615/476/7 1649/477/7 1650/478/7
+f 1650/478/7 1616/475/7 1615/476/7
+f 1619/483/289 1631/522/289 1629/523/289
+f 1629/523/289 1620/484/289 1619/483/289
+f 1637/501/291 1623/524/291 1631/522/297
+f 1631/522/297 1619/483/297 1637/501/291
+f 1645/520/27 1607/525/27 1610/526/27
+f 1610/526/27 1646/527/27 1645/520/27
+f 1624/485/27 1647/528/27 1607/525/27
+f 1607/525/27 1645/520/27 1624/485/27
+f 1623/486/4 1648/486/4 1647/487/4
+f 1647/487/4 1624/487/4 1623/486/4
+f 1637/501/26 1608/501/26 1648/524/26
+f 1648/524/26 1623/524/26 1637/501/26
+f 1638/501/26 1609/501/26 1608/501/26
+f 1608/501/26 1637/501/26 1638/501/26
+f 1620/484/26 1615/484/26 1618/485/26
+f 1618/485/26 1621/485/26 1620/484/26
+f 1629/523/26 1649/523/26 1615/484/26
+f 1615/484/26 1620/484/26 1629/523/26
+f 1628/493/4 1650/529/4 1649/530/4
+f 1649/530/4 1629/494/4 1628/493/4
+f 1643/521/27 1616/531/27 1650/532/27
+f 1650/532/27 1628/521/27 1643/521/27
+f 1644/533/27 1617/531/27 1616/531/27
+f 1616/531/27 1643/521/27 1644/533/27
+f 1651/471/4 1652/472/4 1653/473/4
+f 1653/473/4 1654/474/4 1651/471/4
+f 1655/475/1 1656/476/1 1657/477/1
+f 1657/477/1 1658/478/1 1655/475/1
+f 1659/479/27 1660/480/288 1661/480/288
+f 1661/480/288 1662/479/27 1659/479/27
+f 1663/476/7 1664/475/7 1665/481/7
+f 1665/481/7 1666/482/7 1663/476/7
+f 1667/483/26 1668/484/289 1669/485/289
+f 1669/485/289 1670/483/26 1667/483/26
+f 1671/486/4 1672/487/4 1673/488/4
+f 1674/489/4 1675/490/4 1660/491/4
+f 1660/491/4 1659/492/4 1674/489/4
+f 1676/493/4 1677/494/4 1678/495/4
+f 1679/496/4 1680/497/4 1678/495/4
+f 1678/495/4 1677/494/4 1679/496/4
+f 1681/498/4 1682/499/4 1653/473/4
+f 1653/473/4 1652/472/4 1681/498/4
+f 1683/500/290 1659/479/27 1662/479/27
+f 1662/479/27 1684/500/290 1683/500/290
+f 1685/501/291 1667/483/26 1670/483/26
+f 1670/483/26 1686/501/291 1685/501/291
+f 1683/502/4 1687/503/4 1674/489/4
+f 1674/489/4 1659/492/4 1683/502/4
+f 1679/496/4 1671/486/4 1673/488/4
+f 1673/488/4 1680/497/4 1679/496/4
+f 1675/504/7 1651/504/7 1654/505/7
+f 1654/505/7 1688/505/7 1675/504/7
+f 1674/506/292 1652/506/292 1651/504/292
+f 1651/504/292 1675/504/292 1674/506/292
+f 1687/507/293 1681/507/293 1652/506/293
+f 1652/506/293 1674/506/293 1687/507/293
+f 1689/508/1 1682/508/1 1681/507/1
+f 1681/507/1 1687/507/1 1689/508/1
+f 1690/509/210 1653/510/210 1682/511/210
+f 1682/511/210 1689/512/210 1690/509/210
+f 1688/513/294 1654/514/294 1653/510/294
+f 1653/510/294 1690/509/294 1688/513/294
+f 1691/515/4 1689/516/4 1687/503/4
+f 1687/503/4 1683/502/4 1691/515/4
+f 1683/500/7 1684/500/7 1692/517/7
+f 1692/517/7 1691/517/7 1683/500/7
+f 1660/480/1 1693/518/1 1694/518/1
+f 1694/518/1 1661/480/1 1660/480/1
+f 1693/519/4 1660/491/4 1675/490/4
+f 1675/490/4 1688/474/4 1693/519/4
+f 1655/475/1 1695/481/1 1696/482/1
+f 1696/482/1 1656/476/1 1655/475/1
+f 1688/513/295 1673/513/295 1672/485/295
+f 1672/485/295 1693/520/295 1688/513/295
+f 1690/509/294 1680/509/294 1673/513/294
+f 1673/513/294 1688/513/294 1690/509/294
+f 1689/512/210 1678/512/210 1680/509/210
+f 1680/509/210 1690/509/210 1689/512/210
+f 1691/521/296 1676/521/296 1678/512/296
+f 1678/512/296 1689/512/296 1691/521/296
+f 1663/476/7 1697/477/7 1698/478/7
+f 1698/478/7 1664/475/7 1663/476/7
+f 1667/483/298 1679/522/298 1677/523/289
+f 1677/523/289 1668/484/289 1667/483/298
+f 1685/501/291 1671/524/291 1679/522/297
+f 1679/522/297 1667/483/297 1685/501/291
+f 1693/520/27 1655/525/27 1658/526/27
+f 1658/526/27 1694/527/27 1693/520/27
+f 1672/485/27 1695/528/27 1655/525/27
+f 1655/525/27 1693/520/27 1672/485/27
+f 1671/486/4 1696/486/4 1695/487/4
+f 1695/487/4 1672/487/4 1671/486/4
+f 1685/501/26 1656/501/26 1696/524/26
+f 1696/524/26 1671/524/26 1685/501/26
+f 1686/501/26 1657/501/26 1656/501/26
+f 1656/501/26 1685/501/26 1686/501/26
+f 1668/484/26 1663/484/26 1666/485/26
+f 1666/485/26 1669/485/26 1668/484/26
+f 1677/523/26 1697/523/26 1663/484/26
+f 1663/484/26 1668/484/26 1677/523/26
+f 1676/493/4 1698/529/4 1697/530/4
+f 1697/530/4 1677/494/4 1676/493/4
+f 1691/521/27 1664/531/27 1698/532/27
+f 1698/532/27 1676/521/27 1691/521/27
+f 1692/533/27 1665/531/27 1664/531/27
+f 1664/531/27 1691/521/27 1692/533/27
+f 1699/471/1 1700/472/1 1701/473/1
+f 1701/473/1 1702/474/1 1699/471/1
+f 1703/475/10 1704/476/10 1705/477/10
+f 1705/477/10 1706/478/10 1703/475/10
+f 1707/479/27 1708/480/299 1709/480/299
+f 1709/480/299 1710/479/27 1707/479/27
+f 1711/476/4 1712/475/4 1713/481/4
+f 1713/481/4 1714/482/4 1711/476/4
+f 1715/483/26 1716/484/300 1717/485/300
+f 1717/485/300 1718/483/26 1715/483/26
+f 1719/486/1 1720/487/1 1721/488/1
+f 1722/489/1 1723/490/1 1708/491/1
+f 1708/491/1 1707/492/1 1722/489/1
+f 1724/493/1 1725/494/1 1726/495/1
+f 1727/496/1 1728/497/1 1726/495/1
+f 1726/495/1 1725/494/1 1727/496/1
+f 1729/498/1 1730/499/1 1701/473/1
+f 1701/473/1 1700/472/1 1729/498/1
+f 1731/500/301 1707/479/27 1710/479/27
+f 1710/479/27 1732/500/301 1731/500/301
+f 1733/501/302 1715/483/26 1718/483/26
+f 1718/483/26 1734/501/302 1733/501/302
+f 1731/502/1 1735/503/1 1722/489/1
+f 1722/489/1 1707/492/1 1731/502/1
+f 1727/496/1 1719/486/1 1721/488/1
+f 1721/488/1 1728/497/1 1727/496/1
+f 1723/504/4 1699/504/4 1702/505/4
+f 1702/505/4 1736/505/4 1723/504/4
+f 1722/506/303 1700/506/303 1699/504/303
+f 1699/504/303 1723/504/303 1722/506/303
+f 1735/507/304 1729/507/304 1700/506/304
+f 1700/506/304 1722/506/304 1735/507/304
+f 1737/508/10 1730/508/10 1729/507/10
+f 1729/507/10 1735/507/10 1737/508/10
+f 1738/509/305 1701/510/305 1730/511/305
+f 1730/511/305 1737/512/305 1738/509/305
+f 1736/513/306 1702/514/306 1701/510/306
+f 1701/510/306 1738/509/306 1736/513/306
+f 1739/515/1 1737/516/1 1735/503/1
+f 1735/503/1 1731/502/1 1739/515/1
+f 1731/500/4 1732/500/4 1740/517/4
+f 1740/517/4 1739/517/4 1731/500/4
+f 1708/480/10 1741/518/10 1742/518/10
+f 1742/518/10 1709/480/10 1708/480/10
+f 1741/519/1 1708/491/1 1723/490/1
+f 1723/490/1 1736/474/1 1741/519/1
+f 1703/475/10 1743/481/10 1744/482/10
+f 1744/482/10 1704/476/10 1703/475/10
+f 1736/513/307 1721/513/307 1720/485/307
+f 1720/485/307 1741/520/307 1736/513/307
+f 1738/509/306 1728/509/306 1721/513/306
+f 1721/513/306 1736/513/306 1738/509/306
+f 1737/512/305 1726/512/305 1728/509/305
+f 1728/509/305 1738/509/305 1737/512/305
+f 1739/521/308 1724/521/308 1726/512/308
+f 1726/512/308 1737/512/308 1739/521/308
+f 1711/476/4 1745/477/4 1746/478/4
+f 1746/478/4 1712/475/4 1711/476/4
+f 1715/483/300 1727/522/300 1725/523/300
+f 1725/523/300 1716/484/300 1715/483/300
+f 1733/501/302 1719/524/302 1727/522/302
+f 1727/522/302 1715/483/302 1733/501/302
+f 1741/520/27 1703/525/27 1706/526/27
+f 1706/526/27 1742/527/27 1741/520/27
+f 1720/485/27 1743/528/27 1703/525/27
+f 1703/525/27 1741/520/27 1720/485/27
+f 1719/486/1 1744/486/1 1743/487/1
+f 1743/487/1 1720/487/1 1719/486/1
+f 1733/501/26 1704/501/26 1744/524/26
+f 1744/524/26 1719/524/26 1733/501/26
+f 1734/501/26 1705/501/26 1704/501/26
+f 1704/501/26 1733/501/26 1734/501/26
+f 1716/484/26 1711/484/26 1714/485/26
+f 1714/485/26 1717/485/26 1716/484/26
+f 1725/523/26 1745/523/26 1711/484/26
+f 1711/484/26 1716/484/26 1725/523/26
+f 1724/493/1 1746/529/1 1745/530/1
+f 1745/530/1 1725/494/1 1724/493/1
+f 1739/521/27 1712/531/27 1746/532/27
+f 1746/532/27 1724/521/27 1739/521/27
+f 1740/533/27 1713/531/27 1712/531/27
+f 1712/531/27 1739/521/27 1740/533/27
+f 1747/471/1 1748/474/1 1749/473/1
+f 1749/473/1 1750/472/1 1747/471/1
+f 1751/475/4 1752/478/4 1753/477/4
+f 1753/477/4 1754/476/4 1751/475/4
+f 1755/479/27 1756/479/27 1757/480/301
+f 1757/480/301 1758/480/301 1755/479/27
+f 1759/476/10 1760/482/10 1761/481/10
+f 1761/481/10 1762/475/10 1759/476/10
+f 1763/483/26 1764/483/26 1765/485/302
+f 1765/485/302 1766/484/302 1763/483/26
+f 1767/486/1 1768/488/1 1769/487/1
+f 1770/489/1 1755/492/1 1758/491/1
+f 1758/491/1 1771/490/1 1770/489/1
+f 1772/493/1 1773/495/1 1774/494/1
+f 1775/496/1 1774/494/1 1773/495/1
+f 1773/495/1 1776/497/1 1775/496/1
+f 1777/498/1 1750/472/1 1749/473/1
+f 1749/473/1 1778/499/1 1777/498/1
+f 1779/500/299 1780/500/299 1756/479/27
+f 1756/479/27 1755/479/27 1779/500/299
+f 1781/501/300 1782/501/300 1764/483/26
+f 1764/483/26 1763/483/26 1781/501/300
+f 1779/502/1 1755/492/1 1770/489/1
+f 1770/489/1 1783/503/1 1779/502/1
+f 1775/496/1 1776/497/1 1768/488/1
+f 1768/488/1 1767/486/1 1775/496/1
+f 1771/504/10 1784/505/10 1748/505/10
+f 1748/505/10 1747/504/10 1771/504/10
+f 1770/506/304 1771/504/304 1747/504/304
+f 1747/504/304 1750/506/304 1770/506/304
+f 1783/507/303 1770/506/303 1750/506/303
+f 1750/506/303 1777/507/303 1783/507/303
+f 1785/508/4 1783/507/4 1777/507/4
+f 1777/507/4 1778/508/4 1785/508/4
+f 1786/509/309 1785/512/309 1778/511/309
+f 1778/511/309 1749/510/309 1786/509/309
+f 1784/513/310 1786/509/310 1749/510/310
+f 1749/510/310 1748/514/310 1784/513/310
+f 1787/515/1 1779/502/1 1783/503/1
+f 1783/503/1 1785/516/1 1787/515/1
+f 1779/500/10 1787/517/10 1788/517/10
+f 1788/517/10 1780/500/10 1779/500/10
+f 1758/480/4 1757/480/4 1789/518/4
+f 1789/518/4 1790/518/4 1758/480/4
+f 1790/519/1 1784/474/1 1771/490/1
+f 1771/490/1 1758/491/1 1790/519/1
+f 1751/475/4 1754/476/4 1791/482/4
+f 1791/482/4 1792/481/4 1751/475/4
+f 1784/513/311 1790/520/311 1769/485/311
+f 1769/485/311 1768/513/311 1784/513/311
+f 1786/509/310 1784/513/310 1768/513/310
+f 1768/513/310 1776/509/310 1786/509/310
+f 1785/512/309 1786/509/309 1776/509/309
+f 1776/509/309 1773/512/309 1785/512/309
+f 1787/521/312 1785/512/312 1773/512/312
+f 1773/512/312 1772/521/312 1787/521/312
+f 1759/476/10 1762/475/10 1793/478/10
+f 1793/478/10 1794/477/10 1759/476/10
+f 1763/483/302 1766/484/302 1774/523/302
+f 1774/523/302 1775/522/302 1763/483/302
+f 1781/501/300 1763/483/300 1775/522/300
+f 1775/522/300 1767/524/300 1781/501/300
+f 1790/520/27 1789/527/27 1752/526/27
+f 1752/526/27 1751/525/27 1790/520/27
+f 1769/485/27 1790/520/27 1751/525/27
+f 1751/525/27 1792/528/27 1769/485/27
+f 1767/486/1 1769/487/1 1792/487/1
+f 1792/487/1 1791/486/1 1767/486/1
+f 1781/501/26 1767/524/26 1791/524/26
+f 1791/524/26 1754/501/26 1781/501/26
+f 1782/501/26 1781/501/26 1754/501/26
+f 1754/501/26 1753/501/26 1782/501/26
+f 1766/484/26 1765/485/26 1760/485/26
+f 1760/485/26 1759/484/26 1766/484/26
+f 1774/523/26 1766/484/26 1759/484/26
+f 1759/484/26 1794/523/26 1774/523/26
+f 1772/493/1 1774/494/1 1794/530/1
+f 1794/530/1 1793/529/1 1772/493/1
+f 1787/521/27 1772/521/27 1793/532/27
+f 1793/532/27 1762/531/27 1787/521/27
+f 1788/533/27 1787/521/27 1762/531/27
+f 1762/531/27 1761/531/27 1788/533/27
+f 1795/471/10 1796/474/10 1797/473/10
+f 1797/473/10 1798/472/10 1795/471/10
+f 1799/475/1 1800/478/1 1801/477/1
+f 1801/477/1 1802/476/1 1799/475/1
+f 1803/479/27 1804/479/27 1805/480/288
+f 1805/480/288 1806/480/288 1803/479/27
+f 1807/476/7 1808/482/7 1809/481/7
+f 1809/481/7 1810/475/7 1807/476/7
+f 1811/483/26 1812/483/26 1813/485/289
+f 1813/485/289 1814/484/289 1811/483/26
+f 1815/486/10 1816/488/10 1817/487/10
+f 1818/489/10 1803/492/10 1806/491/10
+f 1806/491/10 1819/490/10 1818/489/10
+f 1820/493/10 1821/495/10 1822/494/10
+f 1823/496/10 1822/494/10 1821/495/10
+f 1821/495/10 1824/497/10 1823/496/10
+f 1825/498/10 1798/472/10 1797/473/10
+f 1797/473/10 1826/499/10 1825/498/10
+f 1827/500/290 1828/500/290 1804/479/27
+f 1804/479/27 1803/479/27 1827/500/290
+f 1829/501/291 1830/501/291 1812/483/26
+f 1812/483/26 1811/483/26 1829/501/291
+f 1827/502/10 1803/492/10 1818/489/10
+f 1818/489/10 1831/503/10 1827/502/10
+f 1823/496/10 1824/497/10 1816/488/10
+f 1816/488/10 1815/486/10 1823/496/10
+f 1819/504/7 1832/505/7 1796/505/7
+f 1796/505/7 1795/504/7 1819/504/7
+f 1818/506/292 1819/504/292 1795/504/292
+f 1795/504/292 1798/506/292 1818/506/292
+f 1831/507/293 1818/506/293 1798/506/293
+f 1798/506/293 1825/507/293 1831/507/293
+f 1833/508/1 1831/507/1 1825/507/1
+f 1825/507/1 1826/508/1 1833/508/1
+f 1834/509/210 1833/512/210 1826/511/210
+f 1826/511/210 1797/510/210 1834/509/210
+f 1832/513/294 1834/509/294 1797/510/294
+f 1797/510/294 1796/514/294 1832/513/294
+f 1835/515/10 1827/502/10 1831/503/10
+f 1831/503/10 1833/516/10 1835/515/10
+f 1827/500/7 1835/517/7 1836/517/7
+f 1836/517/7 1828/500/7 1827/500/7
+f 1806/480/1 1805/480/1 1837/518/1
+f 1837/518/1 1838/518/1 1806/480/1
+f 1838/519/10 1832/474/10 1819/490/10
+f 1819/490/10 1806/491/10 1838/519/10
+f 1799/475/1 1802/476/1 1839/482/1
+f 1839/482/1 1840/481/1 1799/475/1
+f 1832/513/313 1838/520/295 1817/485/295
+f 1817/485/295 1816/513/313 1832/513/313
+f 1834/509/294 1832/513/294 1816/513/294
+f 1816/513/294 1824/509/294 1834/509/294
+f 1833/512/210 1834/509/210 1824/509/210
+f 1824/509/210 1821/512/210 1833/512/210
+f 1835/521/296 1833/512/296 1821/512/296
+f 1821/512/296 1820/521/296 1835/521/296
+f 1807/476/7 1810/475/7 1841/478/7
+f 1841/478/7 1842/477/7 1807/476/7
+f 1811/483/289 1814/484/289 1822/523/289
+f 1822/523/289 1823/522/289 1811/483/289
+f 1829/501/291 1811/483/291 1823/522/291
+f 1823/522/291 1815/524/291 1829/501/291
+f 1838/520/27 1837/527/27 1800/526/27
+f 1800/526/27 1799/525/27 1838/520/27
+f 1817/485/27 1838/520/27 1799/525/27
+f 1799/525/27 1840/528/27 1817/485/27
+f 1815/486/10 1817/487/10 1840/487/10
+f 1840/487/10 1839/486/10 1815/486/10
+f 1829/501/26 1815/524/26 1839/524/26
+f 1839/524/26 1802/501/26 1829/501/26
+f 1830/501/26 1829/501/26 1802/501/26
+f 1802/501/26 1801/501/26 1830/501/26
+f 1814/484/26 1813/485/26 1808/485/26
+f 1808/485/26 1807/484/26 1814/484/26
+f 1822/523/26 1814/484/26 1807/484/26
+f 1807/484/26 1842/523/26 1822/523/26
+f 1820/493/10 1822/494/10 1842/530/10
+f 1842/530/10 1841/529/10 1820/493/10
+f 1835/521/27 1820/521/27 1841/532/27
+f 1841/532/27 1810/531/27 1835/521/27
+f 1836/533/27 1835/521/27 1810/531/27
+f 1810/531/27 1809/531/27 1836/533/27
+f 1843/471/10 1844/474/10 1845/473/10
+f 1845/473/10 1846/472/10 1843/471/10
+f 1847/475/1 1848/478/1 1849/477/1
+f 1849/477/1 1850/476/1 1847/475/1
+f 1851/479/27 1852/479/27 1853/480/288
+f 1853/480/288 1854/480/288 1851/479/27
+f 1855/476/7 1856/482/7 1857/481/7
+f 1857/481/7 1858/475/7 1855/476/7
+f 1859/483/26 1860/483/26 1861/485/289
+f 1861/485/289 1862/484/289 1859/483/26
+f 1863/486/10 1864/488/10 1865/487/10
+f 1866/489/10 1851/492/10 1854/491/10
+f 1854/491/10 1867/490/10 1866/489/10
+f 1868/493/10 1869/495/10 1870/494/10
+f 1871/496/10 1870/494/10 1869/495/10
+f 1869/495/10 1872/497/10 1871/496/10
+f 1873/498/10 1846/472/10 1845/473/10
+f 1845/473/10 1874/499/10 1873/498/10
+f 1875/500/290 1876/500/290 1852/479/27
+f 1852/479/27 1851/479/27 1875/500/290
+f 1877/501/291 1878/501/291 1860/483/26
+f 1860/483/26 1859/483/26 1877/501/291
+f 1875/502/10 1851/492/10 1866/489/10
+f 1866/489/10 1879/503/10 1875/502/10
+f 1871/496/10 1872/497/10 1864/488/10
+f 1864/488/10 1863/486/10 1871/496/10
+f 1867/504/7 1880/505/7 1844/505/7
+f 1844/505/7 1843/504/7 1867/504/7
+f 1866/506/292 1867/504/292 1843/504/292
+f 1843/504/292 1846/506/292 1866/506/292
+f 1879/507/293 1866/506/293 1846/506/293
+f 1846/506/293 1873/507/293 1879/507/293
+f 1881/508/1 1879/507/1 1873/507/1
+f 1873/507/1 1874/508/1 1881/508/1
+f 1882/509/210 1881/512/210 1874/511/210
+f 1874/511/210 1845/510/210 1882/509/210
+f 1880/513/294 1882/509/294 1845/510/294
+f 1845/510/294 1844/514/294 1880/513/294
+f 1883/515/10 1875/502/10 1879/503/10
+f 1879/503/10 1881/516/10 1883/515/10
+f 1875/500/7 1883/517/7 1884/517/7
+f 1884/517/7 1876/500/7 1875/500/7
+f 1854/480/1 1853/480/1 1885/518/1
+f 1885/518/1 1886/518/1 1854/480/1
+f 1886/519/10 1880/474/10 1867/490/10
+f 1867/490/10 1854/491/10 1886/519/10
+f 1847/475/1 1850/476/1 1887/482/1
+f 1887/482/1 1888/481/1 1847/475/1
+f 1880/513/295 1886/520/295 1865/485/295
+f 1865/485/295 1864/513/295 1880/513/295
+f 1882/509/294 1880/513/294 1864/513/294
+f 1864/513/294 1872/509/294 1882/509/294
+f 1881/512/210 1882/509/210 1872/509/210
+f 1872/509/210 1869/512/210 1881/512/210
+f 1883/521/296 1881/512/296 1869/512/296
+f 1869/512/296 1868/521/296 1883/521/296
+f 1855/476/7 1858/475/7 1889/478/7
+f 1889/478/7 1890/477/7 1855/476/7
+f 1859/483/289 1862/484/289 1870/523/289
+f 1870/523/289 1871/522/289 1859/483/289
+f 1877/501/291 1859/483/291 1871/522/291
+f 1871/522/291 1863/524/291 1877/501/291
+f 1886/520/27 1885/527/27 1848/526/27
+f 1848/526/27 1847/525/27 1886/520/27
+f 1865/485/27 1886/520/27 1847/525/27
+f 1847/525/27 1888/528/27 1865/485/27
+f 1863/486/10 1865/487/10 1888/487/10
+f 1888/487/10 1887/486/10 1863/486/10
+f 1877/501/26 1863/524/26 1887/524/26
+f 1887/524/26 1850/501/26 1877/501/26
+f 1878/501/26 1877/501/26 1850/501/26
+f 1850/501/26 1849/501/26 1878/501/26
+f 1862/484/26 1861/485/26 1856/485/26
+f 1856/485/26 1855/484/26 1862/484/26
+f 1870/523/26 1862/484/26 1855/484/26
+f 1855/484/26 1890/523/26 1870/523/26
+f 1868/493/10 1870/494/10 1890/530/10
+f 1890/530/10 1889/529/10 1868/493/10
+f 1883/521/27 1868/521/27 1889/532/27
+f 1889/532/27 1858/531/27 1883/521/27
+f 1884/533/27 1883/521/27 1858/531/27
+f 1858/531/27 1857/531/27 1884/533/27
+f 1891/471/10 1892/474/10 1893/473/10
+f 1893/473/10 1894/472/10 1891/471/10
+f 1895/475/1 1896/478/1 1897/477/1
+f 1897/477/1 1898/476/1 1895/475/1
+f 1899/479/27 1900/479/27 1901/480/288
+f 1901/480/288 1902/480/288 1899/479/27
+f 1903/476/7 1904/482/7 1905/481/7
+f 1905/481/7 1906/475/7 1903/476/7
+f 1907/483/26 1908/483/26 1909/485/289
+f 1909/485/289 1910/484/289 1907/483/26
+f 1911/486/10 1912/488/10 1913/487/10
+f 1914/489/10 1899/492/10 1902/491/10
+f 1902/491/10 1915/490/10 1914/489/10
+f 1916/493/10 1917/495/10 1918/494/10
+f 1919/496/10 1918/494/10 1917/495/10
+f 1917/495/10 1920/497/10 1919/496/10
+f 1921/498/10 1894/472/10 1893/473/10
+f 1893/473/10 1922/499/10 1921/498/10
+f 1923/500/290 1924/500/290 1900/479/27
+f 1900/479/27 1899/479/27 1923/500/290
+f 1925/501/291 1926/501/291 1908/483/26
+f 1908/483/26 1907/483/26 1925/501/291
+f 1923/502/10 1899/492/10 1914/489/10
+f 1914/489/10 1927/503/10 1923/502/10
+f 1919/496/10 1920/497/10 1912/488/10
+f 1912/488/10 1911/486/10 1919/496/10
+f 1915/504/7 1928/505/7 1892/505/7
+f 1892/505/7 1891/504/7 1915/504/7
+f 1914/506/292 1915/504/292 1891/504/292
+f 1891/504/292 1894/506/292 1914/506/292
+f 1927/507/293 1914/506/293 1894/506/293
+f 1894/506/293 1921/507/293 1927/507/293
+f 1929/508/1 1927/507/1 1921/507/1
+f 1921/507/1 1922/508/1 1929/508/1
+f 1930/509/210 1929/512/210 1922/511/210
+f 1922/511/210 1893/510/210 1930/509/210
+f 1928/513/294 1930/509/294 1893/510/294
+f 1893/510/294 1892/514/294 1928/513/294
+f 1931/515/10 1923/502/10 1927/503/10
+f 1927/503/10 1929/516/10 1931/515/10
+f 1923/500/7 1931/517/7 1932/517/7
+f 1932/517/7 1924/500/7 1923/500/7
+f 1902/480/1 1901/480/1 1933/518/1
+f 1933/518/1 1934/518/1 1902/480/1
+f 1934/519/10 1928/474/10 1915/490/10
+f 1915/490/10 1902/491/10 1934/519/10
+f 1895/475/1 1898/476/1 1935/482/1
+f 1935/482/1 1936/481/1 1895/475/1
+f 1928/513/295 1934/520/295 1913/485/295
+f 1913/485/295 1912/513/295 1928/513/295
+f 1930/509/294 1928/513/294 1912/513/294
+f 1912/513/294 1920/509/294 1930/509/294
+f 1929/512/210 1930/509/210 1920/509/210
+f 1920/509/210 1917/512/210 1929/512/210
+f 1931/521/296 1929/512/296 1917/512/296
+f 1917/512/296 1916/521/296 1931/521/296
+f 1903/476/7 1906/475/7 1937/478/7
+f 1937/478/7 1938/477/7 1903/476/7
+f 1907/483/289 1910/484/289 1918/523/289
+f 1918/523/289 1919/522/289 1907/483/289
+f 1925/501/291 1907/483/291 1919/522/291
+f 1919/522/291 1911/524/291 1925/501/291
+f 1934/520/27 1933/527/27 1896/526/27
+f 1896/526/27 1895/525/27 1934/520/27
+f 1913/485/27 1934/520/27 1895/525/27
+f 1895/525/27 1936/528/27 1913/485/27
+f 1911/486/10 1913/487/10 1936/487/10
+f 1936/487/10 1935/486/10 1911/486/10
+f 1925/501/26 1911/524/26 1935/524/26
+f 1935/524/26 1898/501/26 1925/501/26
+f 1926/501/26 1925/501/26 1898/501/26
+f 1898/501/26 1897/501/26 1926/501/26
+f 1910/484/26 1909/485/26 1904/485/26
+f 1904/485/26 1903/484/26 1910/484/26
+f 1918/523/26 1910/484/26 1903/484/26
+f 1903/484/26 1938/523/26 1918/523/26
+f 1916/493/10 1918/494/10 1938/530/10
+f 1938/530/10 1937/529/10 1916/493/10
+f 1931/521/27 1916/521/27 1937/532/27
+f 1937/532/27 1906/531/27 1931/521/27
+f 1932/533/27 1931/521/27 1906/531/27
+f 1906/531/27 1905/531/27 1932/533/27
+f 1939/471/10 1940/474/10 1941/473/10
+f 1941/473/10 1942/472/10 1939/471/10
+f 1943/475/1 1944/478/1 1945/477/1
+f 1945/477/1 1946/476/1 1943/475/1
+f 1947/479/27 1948/479/27 1949/480/288
+f 1949/480/288 1950/480/288 1947/479/27
+f 1951/476/7 1952/482/7 1953/481/7
+f 1953/481/7 1954/475/7 1951/476/7
+f 1955/483/26 1956/483/26 1957/485/289
+f 1957/485/289 1958/484/289 1955/483/26
+f 1959/486/10 1960/488/10 1961/487/10
+f 1962/489/10 1947/492/10 1950/491/10
+f 1950/491/10 1963/490/10 1962/489/10
+f 1964/493/10 1965/495/10 1966/494/10
+f 1967/496/10 1966/494/10 1965/495/10
+f 1965/495/10 1968/497/10 1967/496/10
+f 1969/498/10 1942/472/10 1941/473/10
+f 1941/473/10 1970/499/10 1969/498/10
+f 1971/500/290 1972/500/290 1948/479/27
+f 1948/479/27 1947/479/27 1971/500/290
+f 1973/501/291 1974/501/291 1956/483/26
+f 1956/483/26 1955/483/26 1973/501/291
+f 1971/502/10 1947/492/10 1962/489/10
+f 1962/489/10 1975/503/10 1971/502/10
+f 1967/496/10 1968/497/10 1960/488/10
+f 1960/488/10 1959/486/10 1967/496/10
+f 1963/504/7 1976/505/7 1940/505/7
+f 1940/505/7 1939/504/7 1963/504/7
+f 1962/506/292 1963/504/292 1939/504/292
+f 1939/504/292 1942/506/292 1962/506/292
+f 1975/507/293 1962/506/293 1942/506/293
+f 1942/506/293 1969/507/293 1975/507/293
+f 1977/508/1 1975/507/1 1969/507/1
+f 1969/507/1 1970/508/1 1977/508/1
+f 1978/509/210 1977/512/210 1970/511/210
+f 1970/511/210 1941/510/210 1978/509/210
+f 1976/513/294 1978/509/294 1941/510/294
+f 1941/510/294 1940/514/294 1976/513/294
+f 1979/515/10 1971/502/10 1975/503/10
+f 1975/503/10 1977/516/10 1979/515/10
+f 1971/500/7 1979/517/7 1980/517/7
+f 1980/517/7 1972/500/7 1971/500/7
+f 1950/480/1 1949/480/1 1981/518/1
+f 1981/518/1 1982/518/1 1950/480/1
+f 1982/519/10 1976/474/10 1963/490/10
+f 1963/490/10 1950/491/10 1982/519/10
+f 1943/475/1 1946/476/1 1983/482/1
+f 1983/482/1 1984/481/1 1943/475/1
+f 1976/513/295 1982/520/295 1961/485/295
+f 1961/485/295 1960/513/295 1976/513/295
+f 1978/509/294 1976/513/294 1960/513/294
+f 1960/513/294 1968/509/294 1978/509/294
+f 1977/512/210 1978/509/210 1968/509/210
+f 1968/509/210 1965/512/210 1977/512/210
+f 1979/521/296 1977/512/296 1965/512/296
+f 1965/512/296 1964/521/296 1979/521/296
+f 1951/476/7 1954/475/7 1985/478/7
+f 1985/478/7 1986/477/7 1951/476/7
+f 1955/483/289 1958/484/289 1966/523/289
+f 1966/523/289 1967/522/289 1955/483/289
+f 1973/501/291 1955/483/291 1967/522/291
+f 1967/522/291 1959/524/291 1973/501/291
+f 1982/520/27 1981/527/27 1944/526/27
+f 1944/526/27 1943/525/27 1982/520/27
+f 1961/485/27 1982/520/27 1943/525/27
+f 1943/525/27 1984/528/27 1961/485/27
+f 1959/486/10 1961/487/10 1984/487/10
+f 1984/487/10 1983/486/10 1959/486/10
+f 1973/501/26 1959/524/26 1983/524/26
+f 1983/524/26 1946/501/26 1973/501/26
+f 1974/501/26 1973/501/26 1946/501/26
+f 1946/501/26 1945/501/26 1974/501/26
+f 1958/484/26 1957/485/26 1952/485/26
+f 1952/485/26 1951/484/26 1958/484/26
+f 1966/523/26 1958/484/26 1951/484/26
+f 1951/484/26 1986/523/26 1966/523/26
+f 1964/493/10 1966/494/10 1986/530/10
+f 1986/530/10 1985/529/10 1964/493/10
+f 1979/521/27 1964/521/27 1985/532/27
+f 1985/532/27 1954/531/27 1979/521/27
+f 1980/533/27 1979/521/27 1954/531/27
+f 1954/531/27 1953/531/27 1980/533/27
+f 1987/471/10 1988/472/10 1989/473/10
+f 1989/473/10 1990/474/10 1987/471/10
+f 1991/475/7 1992/476/7 1993/477/7
+f 1993/477/7 1994/478/7 1991/475/7
+f 1995/479/27 1996/480/290 1997/480/290
+f 1997/480/290 1998/479/27 1995/479/27
+f 1999/476/1 2000/475/1 2001/481/1
+f 2001/481/1 2002/482/1 1999/476/1
+f 2003/483/26 2004/484/291 2005/485/291
+f 2005/485/291 2006/483/26 2003/483/26
+f 2007/486/10 2008/487/10 2009/488/10
+f 2010/489/10 2011/490/10 1996/491/10
+f 1996/491/10 1995/492/10 2010/489/10
+f 2012/493/10 2013/494/10 2014/495/10
+f 2015/496/10 2016/497/10 2014/495/10
+f 2014/495/10 2013/494/10 2015/496/10
+f 2017/498/10 2018/499/10 1989/473/10
+f 1989/473/10 1988/472/10 2017/498/10
+f 2019/500/288 1995/479/27 1998/479/27
+f 1998/479/27 2020/500/288 2019/500/288
+f 2021/501/289 2003/483/26 2006/483/26
+f 2006/483/26 2022/501/289 2021/501/289
+f 2019/502/10 2023/503/10 2010/489/10
+f 2010/489/10 1995/492/10 2019/502/10
+f 2015/496/10 2007/486/10 2009/488/10
+f 2009/488/10 2016/497/10 2015/496/10
+f 2011/504/1 1987/504/1 1990/505/1
+f 1990/505/1 2024/505/1 2011/504/1
+f 2010/506/293 1988/506/293 1987/504/293
+f 1987/504/293 2011/504/293 2010/506/293
+f 2023/507/292 2017/507/292 1988/506/292
+f 1988/506/292 2010/506/292 2023/507/292
+f 2025/508/7 2018/508/7 2017/507/7
+f 2017/507/7 2023/507/7 2025/508/7
+f 2026/509/203 1989/510/203 2018/511/203
+f 2018/511/203 2025/512/203 2026/509/203
+f 2024/513/296 1990/514/296 1989/510/296
+f 1989/510/296 2026/509/296 2024/513/296
+f 2027/515/10 2025/516/10 2023/503/10
+f 2023/503/10 2019/502/10 2027/515/10
+f 2019/500/1 2020/500/1 2028/517/1
+f 2028/517/1 2027/517/1 2019/500/1
+f 1996/480/7 2029/518/7 2030/518/7
+f 2030/518/7 1997/480/7 1996/480/7
+f 2029/519/10 1996/491/10 2011/490/10
+f 2011/490/10 2024/474/10 2029/519/10
+f 1991/475/7 2031/481/7 2032/482/7
+f 2032/482/7 1992/476/7 1991/475/7
+f 2024/513/314 2009/513/314 2008/485/314
+f 2008/485/314 2029/520/314 2024/513/314
+f 2026/509/296 2016/509/296 2009/513/296
+f 2009/513/296 2024/513/296 2026/509/296
+f 2025/512/203 2014/512/203 2016/509/203
+f 2016/509/203 2026/509/203 2025/512/203
+f 2027/521/294 2012/521/294 2014/512/294
+f 2014/512/294 2025/512/294 2027/521/294
+f 1999/476/1 2033/477/1 2034/478/1
+f 2034/478/1 2000/475/1 1999/476/1
+f 2003/483/291 2015/522/291 2013/523/291
+f 2013/523/291 2004/484/291 2003/483/291
+f 2021/501/289 2007/524/289 2015/522/289
+f 2015/522/289 2003/483/289 2021/501/289
+f 2029/520/27 1991/525/27 1994/526/27
+f 1994/526/27 2030/527/27 2029/520/27
+f 2008/485/27 2031/528/27 1991/525/27
+f 1991/525/27 2029/520/27 2008/485/27
+f 2007/486/10 2032/486/10 2031/487/10
+f 2031/487/10 2008/487/10 2007/486/10
+f 2021/501/26 1992/501/26 2032/524/26
+f 2032/524/26 2007/524/26 2021/501/26
+f 2022/501/26 1993/501/26 1992/501/26
+f 1992/501/26 2021/501/26 2022/501/26
+f 2004/484/26 1999/484/26 2002/485/26
+f 2002/485/26 2005/485/26 2004/484/26
+f 2013/523/26 2033/523/26 1999/484/26
+f 1999/484/26 2004/484/26 2013/523/26
+f 2012/493/10 2034/529/10 2033/530/10
+f 2033/530/10 2013/494/10 2012/493/10
+f 2027/521/27 2000/531/27 2034/532/27
+f 2034/532/27 2012/521/27 2027/521/27
+f 2028/533/27 2001/531/27 2000/531/27
+f 2000/531/27 2027/521/27 2028/533/27
+f 2035/471/10 2036/472/10 2037/473/10
+f 2037/473/10 2038/474/10 2035/471/10
+f 2039/475/7 2040/476/7 2041/477/7
+f 2041/477/7 2042/478/7 2039/475/7
+f 2043/479/27 2044/480/290 2045/480/290
+f 2045/480/290 2046/479/27 2043/479/27
+f 2047/476/1 2048/475/1 2049/481/1
+f 2049/481/1 2050/482/1 2047/476/1
+f 2051/483/26 2052/484/291 2053/485/291
+f 2053/485/291 2054/483/26 2051/483/26
+f 2055/486/10 2056/487/10 2057/488/10
+f 2058/489/10 2059/490/10 2044/491/10
+f 2044/491/10 2043/492/10 2058/489/10
+f 2060/493/10 2061/494/10 2062/495/10
+f 2063/496/10 2064/497/10 2062/495/10
+f 2062/495/10 2061/494/10 2063/496/10
+f 2065/498/10 2066/499/10 2037/473/10
+f 2037/473/10 2036/472/10 2065/498/10
+f 2067/500/288 2043/479/27 2046/479/27
+f 2046/479/27 2068/500/288 2067/500/288
+f 2069/501/289 2051/483/26 2054/483/26
+f 2054/483/26 2070/501/289 2069/501/289
+f 2067/502/10 2071/503/10 2058/489/10
+f 2058/489/10 2043/492/10 2067/502/10
+f 2063/496/10 2055/486/10 2057/488/10
+f 2057/488/10 2064/497/10 2063/496/10
+f 2059/504/1 2035/504/1 2038/505/1
+f 2038/505/1 2072/505/1 2059/504/1
+f 2058/506/293 2036/506/293 2035/504/293
+f 2035/504/293 2059/504/293 2058/506/293
+f 2071/507/292 2065/507/292 2036/506/292
+f 2036/506/292 2058/506/292 2071/507/292
+f 2073/508/7 2066/508/7 2065/507/7
+f 2065/507/7 2071/507/7 2073/508/7
+f 2074/509/203 2037/510/203 2066/511/203
+f 2066/511/203 2073/512/203 2074/509/203
+f 2072/513/296 2038/514/296 2037/510/296
+f 2037/510/296 2074/509/296 2072/513/296
+f 2075/515/10 2073/516/10 2071/503/10
+f 2071/503/10 2067/502/10 2075/515/10
+f 2067/500/1 2068/500/1 2076/517/1
+f 2076/517/1 2075/517/1 2067/500/1
+f 2044/480/7 2077/518/7 2078/518/7
+f 2078/518/7 2045/480/7 2044/480/7
+f 2077/519/10 2044/491/10 2059/490/10
+f 2059/490/10 2072/474/10 2077/519/10
+f 2039/475/7 2079/481/7 2080/482/7
+f 2080/482/7 2040/476/7 2039/475/7
+f 2072/513/314 2057/513/314 2056/485/314
+f 2056/485/314 2077/520/314 2072/513/314
+f 2074/509/296 2064/509/296 2057/513/296
+f 2057/513/296 2072/513/296 2074/509/296
+f 2073/512/203 2062/512/203 2064/509/203
+f 2064/509/203 2074/509/203 2073/512/203
+f 2075/521/294 2060/521/294 2062/512/294
+f 2062/512/294 2073/512/294 2075/521/294
+f 2047/476/1 2081/477/1 2082/478/1
+f 2082/478/1 2048/475/1 2047/476/1
+f 2051/483/291 2063/522/291 2061/523/291
+f 2061/523/291 2052/484/291 2051/483/291
+f 2069/501/289 2055/524/289 2063/522/298
+f 2063/522/298 2051/483/298 2069/501/289
+f 2077/520/27 2039/525/27 2042/526/27
+f 2042/526/27 2078/527/27 2077/520/27
+f 2056/485/27 2079/528/27 2039/525/27
+f 2039/525/27 2077/520/27 2056/485/27
+f 2055/486/10 2080/486/10 2079/487/10
+f 2079/487/10 2056/487/10 2055/486/10
+f 2069/501/26 2040/501/26 2080/524/26
+f 2080/524/26 2055/524/26 2069/501/26
+f 2070/501/26 2041/501/26 2040/501/26
+f 2040/501/26 2069/501/26 2070/501/26
+f 2052/484/26 2047/484/26 2050/485/26
+f 2050/485/26 2053/485/26 2052/484/26
+f 2061/523/26 2081/523/26 2047/484/26
+f 2047/484/26 2052/484/26 2061/523/26
+f 2060/493/10 2082/529/10 2081/530/10
+f 2081/530/10 2061/494/10 2060/493/10
+f 2075/521/27 2048/531/27 2082/532/27
+f 2082/532/27 2060/521/27 2075/521/27
+f 2076/533/27 2049/531/27 2048/531/27
+f 2048/531/27 2075/521/27 2076/533/27
+f 2083/471/7 2084/472/7 2085/473/7
+f 2085/473/7 2086/474/7 2083/471/7
+f 2087/475/4 2088/476/4 2089/477/4
+f 2089/477/4 2090/478/4 2087/475/4
+f 2091/479/27 2092/480/301 2093/480/301
+f 2093/480/301 2094/479/27 2091/479/27
+f 2095/476/10 2096/475/10 2097/481/10
+f 2097/481/10 2098/482/10 2095/476/10
+f 2099/483/26 2100/484/302 2101/485/302
+f 2101/485/302 2102/483/26 2099/483/26
+f 2103/486/7 2104/487/7 2105/488/7
+f 2106/489/7 2107/490/7 2092/491/7
+f 2092/491/7 2091/492/7 2106/489/7
+f 2108/493/7 2109/494/7 2110/495/7
+f 2111/496/7 2112/497/7 2110/495/7
+f 2110/495/7 2109/494/7 2111/496/7
+f 2113/498/7 2114/499/7 2085/473/7
+f 2085/473/7 2084/472/7 2113/498/7
+f 2115/500/299 2091/479/27 2094/479/27
+f 2094/479/27 2116/500/299 2115/500/299
+f 2117/501/300 2099/483/26 2102/483/26
+f 2102/483/26 2118/501/300 2117/501/300
+f 2115/502/7 2119/503/7 2106/489/7
+f 2106/489/7 2091/492/7 2115/502/7
+f 2111/496/7 2103/486/7 2105/488/7
+f 2105/488/7 2112/497/7 2111/496/7
+f 2107/504/10 2083/504/10 2086/505/10
+f 2086/505/10 2120/505/10 2107/504/10
+f 2106/506/304 2084/506/304 2083/504/304
+f 2083/504/304 2107/504/304 2106/506/304
+f 2119/507/303 2113/507/303 2084/506/303
+f 2084/506/303 2106/506/303 2119/507/303
+f 2121/508/4 2114/508/4 2113/507/4
+f 2113/507/4 2119/507/4 2121/508/4
+f 2122/509/309 2085/510/309 2114/511/309
+f 2114/511/309 2121/512/309 2122/509/309
+f 2120/513/310 2086/514/310 2085/510/310
+f 2085/510/310 2122/509/310 2120/513/310
+f 2123/515/7 2121/516/7 2119/503/7
+f 2119/503/7 2115/502/7 2123/515/7
+f 2115/500/10 2116/500/10 2124/517/10
+f 2124/517/10 2123/517/10 2115/500/10
+f 2092/480/4 2125/518/4 2126/518/4
+f 2126/518/4 2093/480/4 2092/480/4
+f 2125/519/7 2092/491/7 2107/490/7
+f 2107/490/7 2120/474/7 2125/519/7
+f 2087/475/4 2127/481/4 2128/482/4
+f 2128/482/4 2088/476/4 2087/475/4
+f 2120/513/311 2105/513/311 2104/485/311
+f 2104/485/311 2125/520/311 2120/513/311
+f 2122/509/310 2112/509/310 2105/513/310
+f 2105/513/310 2120/513/310 2122/509/310
+f 2121/512/309 2110/512/309 2112/509/309
+f 2112/509/309 2122/509/309 2121/512/309
+f 2123/521/312 2108/521/312 2110/512/312
+f 2110/512/312 2121/512/312 2123/521/312
+f 2095/476/10 2129/477/10 2130/478/10
+f 2130/478/10 2096/475/10 2095/476/10
+f 2099/483/302 2111/522/302 2109/523/302
+f 2109/523/302 2100/484/302 2099/483/302
+f 2117/501/300 2103/524/300 2111/522/300
+f 2111/522/300 2099/483/300 2117/501/300
+f 2125/520/27 2087/525/27 2090/526/27
+f 2090/526/27 2126/527/27 2125/520/27
+f 2104/485/27 2127/528/27 2087/525/27
+f 2087/525/27 2125/520/27 2104/485/27
+f 2103/486/7 2128/486/7 2127/487/7
+f 2127/487/7 2104/487/7 2103/486/7
+f 2117/501/26 2088/501/26 2128/524/26
+f 2128/524/26 2103/524/26 2117/501/26
+f 2118/501/26 2089/501/26 2088/501/26
+f 2088/501/26 2117/501/26 2118/501/26
+f 2100/484/26 2095/484/26 2098/485/26
+f 2098/485/26 2101/485/26 2100/484/26
+f 2109/523/26 2129/523/26 2095/484/26
+f 2095/484/26 2100/484/26 2109/523/26
+f 2108/493/7 2130/529/7 2129/530/7
+f 2129/530/7 2109/494/7 2108/493/7
+f 2123/521/27 2096/531/27 2130/532/27
+f 2130/532/27 2108/521/27 2123/521/27
+f 2124/533/27 2097/531/27 2096/531/27
+f 2096/531/27 2123/521/27 2124/533/27
+f 2131/471/7 2132/472/7 2133/473/7
+f 2133/473/7 2134/474/7 2131/471/7
+f 2135/475/4 2136/476/4 2137/477/4
+f 2137/477/4 2138/478/4 2135/475/4
+f 2139/479/27 2140/480/301 2141/480/301
+f 2141/480/301 2142/479/27 2139/479/27
+f 2143/476/10 2144/475/10 2145/481/10
+f 2145/481/10 2146/482/10 2143/476/10
+f 2147/483/26 2148/484/302 2149/485/302
+f 2149/485/302 2150/483/26 2147/483/26
+f 2151/486/7 2152/487/7 2153/488/7
+f 2154/489/7 2155/490/7 2140/491/7
+f 2140/491/7 2139/492/7 2154/489/7
+f 2156/493/7 2157/494/7 2158/495/7
+f 2159/496/7 2160/497/7 2158/495/7
+f 2158/495/7 2157/494/7 2159/496/7
+f 2161/498/7 2162/499/7 2133/473/7
+f 2133/473/7 2132/472/7 2161/498/7
+f 2163/500/299 2139/479/27 2142/479/27
+f 2142/479/27 2164/500/299 2163/500/299
+f 2165/501/300 2147/483/26 2150/483/26
+f 2150/483/26 2166/501/300 2165/501/300
+f 2163/502/7 2167/503/7 2154/489/7
+f 2154/489/7 2139/492/7 2163/502/7
+f 2159/496/7 2151/486/7 2153/488/7
+f 2153/488/7 2160/497/7 2159/496/7
+f 2155/504/10 2131/504/10 2134/505/10
+f 2134/505/10 2168/505/10 2155/504/10
+f 2154/506/304 2132/506/304 2131/504/304
+f 2131/504/304 2155/504/304 2154/506/304
+f 2167/507/303 2161/507/303 2132/506/303
+f 2132/506/303 2154/506/303 2167/507/303
+f 2169/508/4 2162/508/4 2161/507/4
+f 2161/507/4 2167/507/4 2169/508/4
+f 2170/509/309 2133/510/309 2162/511/309
+f 2162/511/309 2169/512/309 2170/509/309
+f 2168/513/310 2134/514/310 2133/510/310
+f 2133/510/310 2170/509/310 2168/513/310
+f 2171/515/7 2169/516/7 2167/503/7
+f 2167/503/7 2163/502/7 2171/515/7
+f 2163/500/10 2164/500/10 2172/517/10
+f 2172/517/10 2171/517/10 2163/500/10
+f 2140/480/4 2173/518/4 2174/518/4
+f 2174/518/4 2141/480/4 2140/480/4
+f 2173/519/7 2140/491/7 2155/490/7
+f 2155/490/7 2168/474/7 2173/519/7
+f 2135/475/4 2175/481/4 2176/482/4
+f 2176/482/4 2136/476/4 2135/475/4
+f 2168/513/311 2153/513/311 2152/485/311
+f 2152/485/311 2173/520/311 2168/513/311
+f 2170/509/310 2160/509/310 2153/513/310
+f 2153/513/310 2168/513/310 2170/509/310
+f 2169/512/309 2158/512/309 2160/509/309
+f 2160/509/309 2170/509/309 2169/512/309
+f 2171/521/312 2156/521/312 2158/512/312
+f 2158/512/312 2169/512/312 2171/521/312
+f 2143/476/10 2177/477/10 2178/478/10
+f 2178/478/10 2144/475/10 2143/476/10
+f 2147/483/302 2159/522/302 2157/523/302
+f 2157/523/302 2148/484/302 2147/483/302
+f 2165/501/300 2151/524/300 2159/522/300
+f 2159/522/300 2147/483/300 2165/501/300
+f 2173/520/27 2135/525/27 2138/526/27
+f 2138/526/27 2174/527/27 2173/520/27
+f 2152/485/27 2175/528/27 2135/525/27
+f 2135/525/27 2173/520/27 2152/485/27
+f 2151/486/7 2176/486/7 2175/487/7
+f 2175/487/7 2152/487/7 2151/486/7
+f 2165/501/26 2136/501/26 2176/524/26
+f 2176/524/26 2151/524/26 2165/501/26
+f 2166/501/26 2137/501/26 2136/501/26
+f 2136/501/26 2165/501/26 2166/501/26
+f 2148/484/26 2143/484/26 2146/485/26
+f 2146/485/26 2149/485/26 2148/484/26
+f 2157/523/26 2177/523/26 2143/484/26
+f 2143/484/26 2148/484/26 2157/523/26
+f 2156/493/7 2178/529/7 2177/530/7
+f 2177/530/7 2157/494/7 2156/493/7
+f 2171/521/27 2144/531/27 2178/532/27
+f 2178/532/27 2156/521/27 2171/521/27
+f 2172/533/27 2145/531/27 2144/531/27
+f 2144/531/27 2171/521/27 2172/533/27
+f 2179/471/7 2180/474/7 2181/473/7
+f 2181/473/7 2182/472/7 2179/471/7
+f 2183/475/10 2184/478/10 2185/477/10
+f 2185/477/10 2186/476/10 2183/475/10
+f 2187/479/27 2188/479/27 2189/480/299
+f 2189/480/299 2190/480/299 2187/479/27
+f 2191/476/4 2192/482/4 2193/481/4
+f 2193/481/4 2194/475/4 2191/476/4
+f 2195/483/26 2196/483/26 2197/485/300
+f 2197/485/300 2198/484/300 2195/483/26
+f 2199/486/7 2200/488/7 2201/487/7
+f 2202/489/7 2187/492/7 2190/491/7
+f 2190/491/7 2203/490/7 2202/489/7
+f 2204/493/7 2205/495/7 2206/494/7
+f 2207/496/7 2206/494/7 2205/495/7
+f 2205/495/7 2208/497/7 2207/496/7
+f 2209/498/7 2182/472/7 2181/473/7
+f 2181/473/7 2210/499/7 2209/498/7
+f 2211/500/301 2212/500/301 2188/479/27
+f 2188/479/27 2187/479/27 2211/500/301
+f 2213/501/302 2214/501/302 2196/483/26
+f 2196/483/26 2195/483/26 2213/501/302
+f 2211/502/7 2187/492/7 2202/489/7
+f 2202/489/7 2215/503/7 2211/502/7
+f 2207/496/7 2208/497/7 2200/488/7
+f 2200/488/7 2199/486/7 2207/496/7
+f 2203/504/4 2216/505/4 2180/505/4
+f 2180/505/4 2179/504/4 2203/504/4
+f 2202/506/303 2203/504/303 2179/504/303
+f 2179/504/303 2182/506/303 2202/506/303
+f 2215/507/304 2202/506/304 2182/506/304
+f 2182/506/304 2209/507/304 2215/507/304
+f 2217/508/10 2215/507/10 2209/507/10
+f 2209/507/10 2210/508/10 2217/508/10
+f 2218/509/305 2217/512/305 2210/511/305
+f 2210/511/305 2181/510/305 2218/509/305
+f 2216/513/306 2218/509/306 2181/510/306
+f 2181/510/306 2180/514/306 2216/513/306
+f 2219/515/7 2211/502/7 2215/503/7
+f 2215/503/7 2217/516/7 2219/515/7
+f 2211/500/4 2219/517/4 2220/517/4
+f 2220/517/4 2212/500/4 2211/500/4
+f 2190/480/10 2189/480/10 2221/518/10
+f 2221/518/10 2222/518/10 2190/480/10
+f 2222/519/7 2216/474/7 2203/490/7
+f 2203/490/7 2190/491/7 2222/519/7
+f 2183/475/10 2186/476/10 2223/482/10
+f 2223/482/10 2224/481/10 2183/475/10
+f 2216/513/307 2222/520/307 2201/485/307
+f 2201/485/307 2200/513/307 2216/513/307
+f 2218/509/306 2216/513/306 2200/513/306
+f 2200/513/306 2208/509/306 2218/509/306
+f 2217/512/305 2218/509/305 2208/509/305
+f 2208/509/305 2205/512/305 2217/512/305
+f 2219/521/308 2217/512/308 2205/512/308
+f 2205/512/308 2204/521/308 2219/521/308
+f 2191/476/4 2194/475/4 2225/478/4
+f 2225/478/4 2226/477/4 2191/476/4
+f 2195/483/300 2198/484/300 2206/523/300
+f 2206/523/300 2207/522/300 2195/483/300
+f 2213/501/302 2195/483/302 2207/522/302
+f 2207/522/302 2199/524/302 2213/501/302
+f 2222/520/27 2221/527/27 2184/526/27
+f 2184/526/27 2183/525/27 2222/520/27
+f 2201/485/27 2222/520/27 2183/525/27
+f 2183/525/27 2224/528/27 2201/485/27
+f 2199/486/7 2201/487/7 2224/487/7
+f 2224/487/7 2223/486/7 2199/486/7
+f 2213/501/26 2199/524/26 2223/524/26
+f 2223/524/26 2186/501/26 2213/501/26
+f 2214/501/26 2213/501/26 2186/501/26
+f 2186/501/26 2185/501/26 2214/501/26
+f 2198/484/26 2197/485/26 2192/485/26
+f 2192/485/26 2191/484/26 2198/484/26
+f 2206/523/26 2198/484/26 2191/484/26
+f 2191/484/26 2226/523/26 2206/523/26
+f 2204/493/7 2206/494/7 2226/530/7
+f 2226/530/7 2225/529/7 2204/493/7
+f 2219/521/27 2204/521/27 2225/532/27
+f 2225/532/27 2194/531/27 2219/521/27
+f 2220/533/27 2219/521/27 2194/531/27
+f 2194/531/27 2193/531/27 2220/533/27
+f 2227/471/10 2228/472/10 2229/473/10
+f 2229/473/10 2230/474/10 2227/471/10
+f 2231/475/7 2232/476/7 2233/477/7
+f 2233/477/7 2234/478/7 2231/475/7
+f 2235/479/27 2236/480/290 2237/480/290
+f 2237/480/290 2238/479/27 2235/479/27
+f 2239/476/1 2240/475/1 2241/481/1
+f 2241/481/1 2242/482/1 2239/476/1
+f 2243/483/26 2244/484/291 2245/485/291
+f 2245/485/291 2246/483/26 2243/483/26
+f 2247/486/10 2248/487/10 2249/488/10
+f 2250/489/10 2251/490/10 2236/491/10
+f 2236/491/10 2235/492/10 2250/489/10
+f 2252/493/10 2253/494/10 2254/495/10
+f 2255/496/10 2256/497/10 2254/495/10
+f 2254/495/10 2253/494/10 2255/496/10
+f 2257/498/10 2258/499/10 2229/473/10
+f 2229/473/10 2228/472/10 2257/498/10
+f 2259/500/288 2235/479/27 2238/479/27
+f 2238/479/27 2260/500/288 2259/500/288
+f 2261/501/289 2243/483/26 2246/483/26
+f 2246/483/26 2262/501/289 2261/501/289
+f 2259/502/10 2263/503/10 2250/489/10
+f 2250/489/10 2235/492/10 2259/502/10
+f 2255/496/10 2247/486/10 2249/488/10
+f 2249/488/10 2256/497/10 2255/496/10
+f 2251/504/1 2227/504/1 2230/505/1
+f 2230/505/1 2264/505/1 2251/504/1
+f 2250/506/293 2228/506/293 2227/504/293
+f 2227/504/293 2251/504/293 2250/506/293
+f 2263/507/292 2257/507/292 2228/506/292
+f 2228/506/292 2250/506/292 2263/507/292
+f 2265/508/7 2258/508/7 2257/507/7
+f 2257/507/7 2263/507/7 2265/508/7
+f 2266/509/203 2229/510/203 2258/511/203
+f 2258/511/203 2265/512/203 2266/509/203
+f 2264/513/296 2230/514/296 2229/510/296
+f 2229/510/296 2266/509/296 2264/513/296
+f 2267/515/10 2265/516/10 2263/503/10
+f 2263/503/10 2259/502/10 2267/515/10
+f 2259/500/1 2260/500/1 2268/517/1
+f 2268/517/1 2267/517/1 2259/500/1
+f 2236/480/7 2269/518/7 2270/518/7
+f 2270/518/7 2237/480/7 2236/480/7
+f 2269/519/10 2236/491/10 2251/490/10
+f 2251/490/10 2264/474/10 2269/519/10
+f 2231/475/7 2271/481/7 2272/482/7
+f 2272/482/7 2232/476/7 2231/475/7
+f 2264/513/314 2249/513/314 2248/485/314
+f 2248/485/314 2269/520/314 2264/513/314
+f 2266/509/296 2256/509/296 2249/513/296
+f 2249/513/296 2264/513/296 2266/509/296
+f 2265/512/203 2254/512/203 2256/509/203
+f 2256/509/203 2266/509/203 2265/512/203
+f 2267/521/294 2252/521/294 2254/512/294
+f 2254/512/294 2265/512/294 2267/521/294
+f 2239/476/1 2273/477/1 2274/478/1
+f 2274/478/1 2240/475/1 2239/476/1
+f 2243/483/297 2255/522/297 2253/523/291
+f 2253/523/291 2244/484/291 2243/483/297
+f 2261/501/289 2247/524/289 2255/522/289
+f 2255/522/289 2243/483/289 2261/501/289
+f 2269/520/27 2231/525/27 2234/526/27
+f 2234/526/27 2270/527/27 2269/520/27
+f 2248/485/27 2271/528/27 2231/525/27
+f 2231/525/27 2269/520/27 2248/485/27
+f 2247/486/10 2272/486/10 2271/487/10
+f 2271/487/10 2248/487/10 2247/486/10
+f 2261/501/26 2232/501/26 2272/524/26
+f 2272/524/26 2247/524/26 2261/501/26
+f 2262/501/26 2233/501/26 2232/501/26
+f 2232/501/26 2261/501/26 2262/501/26
+f 2244/484/26 2239/484/26 2242/485/26
+f 2242/485/26 2245/485/26 2244/484/26
+f 2253/523/26 2273/523/26 2239/484/26
+f 2239/484/26 2244/484/26 2253/523/26
+f 2252/493/10 2274/529/10 2273/530/10
+f 2273/530/10 2253/494/10 2252/493/10
+f 2267/521/27 2240/531/27 2274/532/27
+f 2274/532/27 2252/521/27 2267/521/27
+f 2268/533/27 2241/531/27 2240/531/27
+f 2240/531/27 2267/521/27 2268/533/27
+f 2275/534/4 2276/535/4 2277/536/4
+f 2277/536/4 2278/537/4 2275/534/4
+f 2279/538/4 2280/539/4 2281/540/4
+f 2281/540/4 2282/541/4 2279/538/4
+f 2283/542/4 2284/543/4 2276/535/4
+f 2276/535/4 2275/534/4 2283/542/4
+f 2280/539/4 2278/537/4 2277/536/4
+f 2277/536/4 2281/540/4 2280/539/4
+f 2285/544/315 2286/545/315 2287/546/316
+f 2287/546/316 2288/547/316 2285/544/315
+f 2286/548/4 2289/549/4 2290/550/4
+f 2290/550/4 2287/551/4 2286/548/4
+f 2289/552/317 2291/553/317 2292/554/318
+f 2292/554/318 2290/555/318 2289/552/317
+f 2288/547/316 2287/546/316 2293/556/319
+f 2293/556/319 2294/557/319 2288/547/316
+f 2287/551/4 2290/550/4 2295/558/4
+f 2295/558/4 2293/559/4 2287/551/4
+f 2290/555/318 2292/554/318 2296/560/320
+f 2296/560/320 2295/561/320 2290/555/318
+f 2294/557/319 2293/556/319 2297/562/27
+f 2297/562/27 2298/563/27 2294/557/319
+f 2293/559/4 2295/558/4 2299/564/4
+f 2299/564/4 2297/565/4 2293/559/4
+f 2295/561/320 2296/560/320 2300/566/26
+f 2300/566/26 2299/567/26 2295/561/320
+f 2298/563/27 2297/562/27 2301/556/321
+f 2301/556/321 2302/557/321 2298/563/27
+f 2297/565/4 2299/564/4 2303/568/4
+f 2303/568/4 2301/569/4 2297/565/4
+f 2299/567/26 2300/566/26 2304/560/322
+f 2304/560/322 2303/561/322 2299/567/26
+f 2302/557/321 2301/556/321 2305/546/323
+f 2305/546/323 2306/547/323 2302/557/321
+f 2301/569/4 2303/568/4 2307/570/4
+f 2307/570/4 2305/571/4 2301/569/4
+f 2303/561/322 2304/560/322 2308/554/324
+f 2308/554/324 2307/555/324 2303/561/322
+f 2306/547/323 2305/546/323 2309/545/325
+f 2309/545/325 2310/544/325 2306/547/323
+f 2305/571/4 2307/570/4 2311/572/4
+f 2311/572/4 2309/573/4 2305/571/4
+f 2307/555/324 2308/554/324 2312/553/326
+f 2312/553/326 2311/552/326 2307/555/324
+f 2313/574/327 2314/575/327 2315/576/327
+f 2315/576/327 2316/577/327 2313/574/327
+f 2317/578/328 2313/579/328 2316/580/328
+f 2316/580/328 2318/581/328 2317/578/328
+f 2319/579/329 2317/578/329 2318/581/329
+f 2318/581/329 2320/580/329 2319/579/329
+f 2319/578/330 2320/581/330 2315/580/330
+f 2315/580/330 2314/579/330 2319/578/330
+f 2321/582/331 2316/577/331 2315/576/331
+f 2315/576/331 2322/583/332 2321/582/331
+f 2318/581/333 2316/580/333 2321/584/333
+f 2321/584/333 2323/585/333 2318/581/333
+f 2324/584/334 2320/580/334 2318/581/334
+f 2318/581/334 2323/585/334 2324/584/334
+f 2322/584/335 2315/580/335 2320/581/335
+f 2320/581/335 2324/585/335 2322/584/335
+f 2325/586/336 2326/587/26 2327/588/26
+f 2327/588/26 2328/589/336 2325/586/336
+f 2328/590/1 2327/591/1 2329/592/1
+f 2329/592/1 2330/593/1 2328/590/1
+f 2330/589/337 2329/588/27 2331/587/27
+f 2331/587/27 2332/586/337 2330/589/337
+f 2327/588/26 2326/587/26 2333/594/338
+f 2333/594/338 2334/595/338 2327/588/26
+f 2329/592/1 2327/591/1 2334/596/1
+f 2334/596/1 2335/597/1 2329/592/1
+f 2331/587/27 2329/588/27 2335/595/339
+f 2335/595/339 2336/594/339 2331/587/27
+f 2337/586/340 2338/587/26 2339/588/26
+f 2339/588/26 2340/589/340 2337/586/340
+f 2340/590/4 2339/591/4 2341/592/4
+f 2341/592/4 2342/593/4 2340/590/4
+f 2342/589/341 2341/588/27 2343/587/27
+f 2343/587/27 2344/586/342 2342/589/341
+f 2339/588/26 2338/587/26 2345/594/343
+f 2345/594/343 2346/595/343 2339/588/26
+f 2341/592/4 2339/591/4 2346/596/4
+f 2346/596/4 2347/597/4 2341/592/4
+f 2343/587/27 2341/588/27 2347/595/344
+f 2347/595/344 2348/594/344 2343/587/27
+f 2347/598/1 2346/596/1 2345/599/1
+f 2345/599/1 2348/600/1 2347/598/1
+f 2349/574/345 2350/577/345 2351/576/345
+f 2351/576/345 2352/575/345 2349/574/345
+f 2353/578/346 2354/581/346 2350/580/346
+f 2350/580/346 2349/579/346 2353/578/346
+f 2355/579/347 2356/580/347 2354/581/347
+f 2354/581/347 2353/578/347 2355/579/347
+f 2355/578/348 2352/579/348 2351/580/348
+f 2351/580/348 2356/581/348 2355/578/348
+f 2357/582/175 2358/583/349 2351/576/349
+f 2351/576/349 2350/577/349 2357/582/175
+f 2354/581/350 2359/585/350 2357/584/350
+f 2357/584/350 2350/580/350 2354/581/350
+f 2360/584/351 2359/585/351 2354/581/351
+f 2354/581/351 2356/580/351 2360/584/351
+f 2358/584/352 2360/585/352 2356/581/353
+f 2356/581/353 2351/580/352 2358/584/352
+f 2361/586/340 2362/589/340 2363/588/26
+f 2363/588/26 2364/587/26 2361/586/340
+f 2362/590/10 2365/593/10 2366/592/10
+f 2366/592/10 2363/591/10 2362/590/10
+f 2365/589/341 2367/586/342 2368/587/27
+f 2368/587/27 2366/588/27 2365/589/341
+f 2363/588/26 2369/595/343 2370/594/343
+f 2370/594/343 2364/587/26 2363/588/26
+f 2366/592/10 2371/597/10 2369/596/10
+f 2369/596/10 2363/591/10 2366/592/10
+f 2368/587/27 2372/594/344 2371/595/344
+f 2371/595/344 2366/588/27 2368/587/27
+f 2370/599/1 2369/596/1 2371/598/1
+f 2371/598/1 2372/600/1 2370/599/1
+f 2373/586/354 2374/589/340 2375/588/26
+f 2375/588/26 2376/587/26 2373/586/354
+f 2374/590/10 2377/593/10 2378/592/10
+f 2378/592/10 2375/591/10 2374/590/10
+f 2377/589/342 2379/586/341 2380/587/27
+f 2380/587/27 2378/588/27 2377/589/342
+f 2375/588/26 2381/595/355 2382/594/355
+f 2382/594/355 2376/587/26 2375/588/26
+f 2378/592/10 2383/597/10 2381/596/10
+f 2381/596/10 2375/591/10 2378/592/10
+f 2380/587/27 2384/594/356 2383/595/344
+f 2383/595/344 2378/588/27 2380/587/27
+f 2385/601/7 2386/602/7 2387/603/7
+f 2387/603/7 691/604/7 2385/601/7
+f 2388/605/4 2389/606/4 2390/607/4
+f 2390/607/4 690/608/4 2388/605/4
+f 2391/601/1 2392/602/1 2393/609/1
+f 2393/609/1 692/610/1 2391/601/1
+f 2394/611/10 2395/612/10 2396/613/10
+f 2396/613/10 693/614/10 2394/611/10
+f 690/610/7 2390/609/7 2386/602/7
+f 2386/602/7 2385/601/7 690/610/7
+f 693/604/1 2396/603/1 2392/602/1
+f 2392/602/1 2391/601/1 693/604/1
+f 692/615/4 2393/616/4 2389/606/4
+f 2389/606/4 2388/605/4 692/615/4
+f 691/617/10 2387/618/10 2395/612/10
+f 2395/612/10 2394/611/10 691/617/10
+f 2397/619/357 2398/620/358 2399/621/358
+f 2399/621/358 2400/622/357 2397/619/357
+f 2398/620/358 2401/623/359 2402/624/359
+f 2402/624/359 2399/621/358 2398/620/358
+f 2403/625/360 2404/626/10 2398/627/10
+f 2398/627/10 2397/628/360 2403/625/360
+f 2398/627/10 2404/626/10 2405/629/361
+f 2405/629/361 2401/630/361 2398/627/10
+f 2403/619/315 2406/622/315 2407/621/362
+f 2407/621/362 2404/620/362 2403/619/315
+f 2404/620/362 2407/621/362 2408/624/363
+f 2408/624/363 2405/623/363 2404/620/362
+f 2406/631/364 2400/632/364 2399/633/365
+f 2399/633/365 2407/634/365 2406/631/364
+f 2399/633/365 2402/635/366 2408/636/366
+f 2408/636/366 2407/634/365 2399/633/365
+f 2409/637/7 2410/638/7 2411/639/7
+f 2411/639/7 2412/640/7 2409/637/7
+f 2413/640/4 2412/641/4 2411/642/4
+f 2411/642/4 2414/643/4 2413/640/4
+f 2413/637/1 2414/638/1 2415/639/1
+f 2415/639/1 2416/640/1 2413/637/1
+f 2417/644/1 2418/645/1 2419/646/1
+f 2419/646/1 2420/647/1 2417/644/1
+f 2421/647/7 2422/644/7 2423/645/7
+f 2423/645/7 2424/646/7 2421/647/7
+f 2418/648/367 2417/649/367 2425/650/367
+f 2425/650/367 2426/651/367 2418/648/367
+f 2425/652/4 2417/567/4 2420/653/4
+f 2420/653/4 2427/654/4 2425/652/4
+f 2420/648/368 2419/649/368 2428/650/368
+f 2428/650/368 2427/651/368 2420/648/368
+f 2429/637/7 2430/638/7 2431/639/7
+f 2431/639/7 2432/640/7 2429/637/7
+f 2432/640/4 2431/643/4 2433/642/4
+f 2433/642/4 2434/641/4 2432/640/4
+f 2434/637/1 2433/638/1 2435/639/1
+f 2435/639/1 2436/640/1 2434/637/1
+f 2437/655/369 2423/656/369 2422/657/369
+f 2422/657/369 2438/658/369 2437/655/369
+f 2437/659/4 2439/660/4 2424/661/4
+f 2424/661/4 2423/662/4 2437/659/4
+f 2440/655/370 2421/656/370 2424/657/370
+f 2424/657/370 2439/658/370 2440/655/370
+f 2441/663/298 2442/664/298 2426/651/298
+f 2426/651/298 2425/650/298 2441/663/298
+f 2427/654/4 2443/665/4 2441/666/4
+f 2441/666/4 2425/652/4 2427/654/4
+f 2444/663/371 2443/664/371 2427/651/371
+f 2427/651/371 2428/650/371 2444/663/371
+f 2437/655/297 2438/658/297 2442/664/297
+f 2442/664/297 2441/663/297 2437/655/297
+f 2439/660/4 2437/659/4 2441/666/4
+f 2441/666/4 2443/665/4 2439/660/4
+f 2440/655/372 2439/658/372 2443/664/372
+f 2443/664/372 2444/663/372 2440/655/372
+f 2445/667/373 2446/668/373 2447/669/373
+f 2447/669/373 2448/670/373 2445/667/373
+f 2449/671/374 2450/672/374 2446/668/374
+f 2446/668/374 2445/667/374 2449/671/374
+f 2451/673/7 2452/674/7 2453/675/7
+f 2453/675/7 2454/676/7 2451/673/7
+f 2451/673/7 2450/673/7 2455/673/7
+f 2455/673/7 2452/674/7 2451/673/7
+f 2451/673/7 2447/677/7 2446/677/7
+f 2446/677/7 2450/673/7 2451/673/7
+f 2456/678/7 2447/677/7 2451/673/7
+f 2451/673/7 2454/676/7 2456/678/7
+f 2453/679/27 2452/303/27 2457/680/27
+f 2457/680/27 2458/681/27 2453/679/27
+f 2452/682/375 2455/672/375 2459/671/375
+f 2459/671/375 2457/683/375 2452/682/375
+f 2455/672/376 2450/672/377 2449/671/377
+f 2449/671/377 2459/671/376 2455/672/376
+f 2460/684/373 2461/685/373 2445/667/373
+f 2445/667/373 2448/670/373 2460/684/373
+f 2461/685/374 2462/686/374 2449/671/374
+f 2449/671/374 2445/667/374 2461/685/374
+f 2463/678/1 2464/677/1 2465/673/1
+f 2465/673/1 2466/676/1 2463/678/1
+f 2465/673/1 2464/677/1 2467/677/1
+f 2467/677/1 2462/673/1 2465/673/1
+f 2465/673/1 2462/673/1 2461/673/1
+f 2461/673/1 2460/674/1 2465/673/1
+f 2465/673/1 2460/674/1 2468/675/1
+f 2468/675/1 2466/676/1 2465/673/1
+f 2457/680/27 2464/687/27 2463/688/27
+f 2463/688/27 2458/681/27 2457/680/27
+f 2459/671/375 2467/686/375 2464/678/375
+f 2464/678/375 2457/683/375 2459/671/375
+f 2449/671/377 2462/686/377 2467/686/376
+f 2467/686/376 2459/671/376 2449/671/377
+f 2469/689/4 2470/690/4 2471/691/4
+f 2471/691/4 2472/692/4 2469/689/4
+f 2473/693/4 2472/692/4 2471/691/4
+f 2471/691/4 2474/694/4 2473/693/4
+f 2475/619/357 2476/620/358 2477/621/358
+f 2477/621/358 2478/622/357 2475/619/357
+f 2476/620/358 2479/623/359 2480/624/359
+f 2480/624/359 2477/621/358 2476/620/358
+f 2481/625/360 2482/626/10 2476/627/10
+f 2476/627/10 2475/628/360 2481/625/360
+f 2476/627/10 2482/626/10 2483/629/361
+f 2483/629/361 2479/630/361 2476/627/10
+f 2481/619/315 2484/622/315 2485/621/362
+f 2485/621/362 2482/620/362 2481/619/315
+f 2482/620/362 2485/621/362 2486/624/363
+f 2486/624/363 2483/623/363 2482/620/362
+f 2484/631/364 2478/632/364 2477/633/365
+f 2477/633/365 2485/634/365 2484/631/364
+f 2477/633/365 2480/635/366 2486/636/366
+f 2486/636/366 2485/634/365 2477/633/365
+f 2487/619/357 2488/622/357 2489/621/378
+f 2489/621/378 2490/620/378 2487/619/357
+f 2490/620/378 2489/621/378 2491/624/379
+f 2491/624/379 2492/623/379 2490/620/378
+f 2493/625/365 2487/628/365 2490/627/4
+f 2490/627/4 2494/626/4 2493/625/365
+f 2490/627/4 2492/630/380 2495/629/380
+f 2495/629/380 2494/626/4 2490/627/4
+f 2493/619/315 2494/620/381 2496/621/381
+f 2496/621/381 2497/622/315 2493/619/315
+f 2494/620/381 2495/623/382 2498/624/382
+f 2498/624/382 2496/621/381 2494/620/381
+f 2497/631/383 2496/634/360 2489/633/360
+f 2489/633/360 2488/632/383 2497/631/383
+f 2489/633/360 2496/634/360 2498/636/384
+f 2498/636/384 2491/635/384 2489/633/360
+f 2499/619/357 2500/622/357 2501/621/378
+f 2501/621/378 2502/620/378 2499/619/357
+f 2502/620/378 2501/621/378 2503/624/379
+f 2503/624/379 2504/623/379 2502/620/378
+f 2505/625/365 2499/628/365 2502/627/4
+f 2502/627/4 2506/626/4 2505/625/365
+f 2502/627/4 2504/630/380 2507/629/380
+f 2507/629/380 2506/626/4 2502/627/4
+f 2505/619/315 2506/620/381 2508/621/381
+f 2508/621/381 2509/622/315 2505/619/315
+f 2506/620/381 2507/623/382 2510/624/382
+f 2510/624/382 2508/621/381 2506/620/381
+f 2509/631/383 2508/634/360 2501/633/360
+f 2501/633/360 2500/632/383 2509/631/383
+f 2501/633/360 2508/634/360 2510/636/384
+f 2510/636/384 2503/635/384 2501/633/360
+f 2511/586/336 2512/589/336 2513/588/26
+f 2513/588/26 2514/587/26 2511/586/336
+f 2512/590/7 2515/593/7 2516/592/7
+f 2516/592/7 2513/591/7 2512/590/7
+f 2515/589/337 2517/586/337 2518/587/27
+f 2518/587/27 2516/588/27 2515/589/337
+f 2513/588/26 2519/595/338 2520/594/338
+f 2520/594/338 2514/587/26 2513/588/26
+f 2516/592/7 2521/597/7 2519/596/7
+f 2519/596/7 2513/591/7 2516/592/7
+f 2518/587/27 2522/594/339 2521/595/339
+f 2521/595/339 2516/588/27 2518/587/27
+f 2523/451/27 2524/452/27 2525/453/27
+f 2525/453/27 2526/454/27 2523/451/27
+f 2527/455/4 2528/456/4 2524/457/4
+f 2524/457/4 2523/458/4 2527/455/4
+f 2528/459/1 2529/460/1 2525/461/1
+f 2525/461/1 2524/462/1 2528/459/1
+f 2529/456/10 2530/455/10 2526/458/10
+f 2526/458/10 2525/457/10 2529/456/10
+f 2530/460/7 2527/459/7 2523/462/7
+f 2523/462/7 2526/461/7 2530/460/7
+f 2531/451/27 2532/452/27 2533/453/27
+f 2533/453/27 2534/454/27 2531/451/27
+f 2535/455/7 2536/456/7 2532/457/7
+f 2532/457/7 2531/458/7 2535/455/7
+f 2536/459/4 2537/460/4 2533/461/4
+f 2533/461/4 2532/462/4 2536/459/4
+f 2537/456/1 2538/455/1 2534/458/1
+f 2534/458/1 2533/457/1 2537/456/1
+f 2538/460/10 2535/459/10 2531/462/10
+f 2531/462/10 2534/461/10 2538/460/10
+f 2539/451/27 2540/452/27 2541/453/27
+f 2541/453/27 2542/454/27 2539/451/27
+f 2543/455/7 2544/456/7 2540/457/7
+f 2540/457/7 2539/458/7 2543/455/7
+f 2544/459/4 2545/460/4 2541/461/4
+f 2541/461/4 2540/462/4 2544/459/4
+f 2545/456/1 2546/455/1 2542/458/1
+f 2542/458/1 2541/457/1 2545/456/1
+f 2546/460/10 2543/459/10 2539/462/10
+f 2539/462/10 2542/461/10 2546/460/10
+f 2547/3/12 2548/2/12 2549/1/1
+f 2549/1/1 2550/4/1 2547/3/12
+f 2551/6/11 2552/5/11 2548/2/12
+f 2548/2/12 2547/3/12 2551/6/11
+f 2553/8/10 2554/7/10 2552/5/11
+f 2552/5/11 2551/6/11 2553/8/10
+f 2555/11/9 2556/10/9 2554/9/10
+f 2554/9/10 2553/12/10 2555/11/9
+f 2557/14/8 2558/13/8 2556/10/9
+f 2556/10/9 2555/11/9 2557/14/8
+f 2559/16/7 2560/15/7 2558/13/8
+f 2558/13/8 2557/14/8 2559/16/7
+f 2561/18/6 2562/17/6 2560/15/7
+f 2560/15/7 2559/16/7 2561/18/6
+f 2563/20/5 2564/19/5 2562/17/6
+f 2562/17/6 2561/18/6 2563/20/5
+f 2565/22/4 2566/21/4 2564/19/5
+f 2564/19/5 2563/20/5 2565/22/4
+f 2567/24/3 2568/23/3 2566/21/4
+f 2566/21/4 2565/22/4 2567/24/3
+f 2569/26/2 2570/25/2 2568/23/3
+f 2568/23/3 2567/24/3 2569/26/2
+f 2550/4/1 2549/1/1 2570/25/2
+f 2570/25/2 2569/26/2 2550/4/1
+f 2571/27/24 2572/30/24 2573/29/24
+f 2573/29/24 2574/28/24 2571/27/24
+f 2575/31/23 2576/32/23 2572/30/23
+f 2572/30/23 2571/27/23 2575/31/23
+f 2577/33/22 2578/34/22 2576/32/22
+f 2576/32/22 2575/31/22 2577/33/22
+f 2579/35/21 2580/38/21 2578/37/21
+f 2578/37/21 2577/36/21 2579/35/21
+f 2581/39/20 2582/40/20 2580/38/20
+f 2580/38/20 2579/35/20 2581/39/20
+f 2583/41/19 2584/42/19 2582/40/19
+f 2582/40/19 2581/39/19 2583/41/19
+f 2585/43/18 2586/44/18 2584/42/18
+f 2584/42/18 2583/41/18 2585/43/18
+f 2587/45/17 2588/46/17 2586/44/17
+f 2586/44/17 2585/43/17 2587/45/17
+f 2589/47/16 2590/48/16 2588/46/16
+f 2588/46/16 2587/45/16 2589/47/16
+f 2591/49/15 2592/50/15 2590/48/15
+f 2590/48/15 2589/47/15 2591/49/15
+f 2593/51/14 2594/52/14 2592/50/14
+f 2592/50/14 2591/49/14 2593/51/14
+f 2574/28/13 2573/29/13 2594/52/192
+f 2594/52/192 2593/51/192 2574/28/13
+f 2548/53/26 2571/53/26 2574/54/26
+f 2574/54/26 2549/54/26 2548/53/26
+f 2549/54/26 2574/54/26 2593/55/26
+f 2593/55/26 2570/55/26 2549/54/26
+f 2570/55/26 2593/55/26 2591/56/26
+f 2591/56/26 2568/56/26 2570/55/26
+f 2568/56/26 2591/56/26 2589/57/26
+f 2589/57/26 2566/57/26 2568/56/26
+f 2566/57/26 2589/57/26 2587/59/26
+f 2587/59/26 2564/58/26 2566/57/26
+f 2564/58/26 2587/59/26 2585/61/26
+f 2585/61/26 2562/60/26 2564/58/26
+f 2562/60/26 2585/61/26 2583/62/26
+f 2583/62/26 2560/62/26 2562/60/26
+f 2560/62/26 2583/62/26 2581/64/26
+f 2581/64/26 2558/63/26 2560/62/26
+f 2558/63/26 2581/64/26 2579/66/26
+f 2579/66/26 2556/65/26 2558/63/26
+f 2556/65/26 2579/66/26 2577/67/26
+f 2577/67/26 2554/67/26 2556/65/26
+f 2554/67/26 2577/67/26 2575/68/26
+f 2575/68/26 2552/68/26 2554/67/26
+f 2552/68/26 2575/68/26 2571/53/26
+f 2571/53/26 2548/53/26 2552/68/26
+f 2595/54/27 2573/54/27 2572/53/27
+f 2572/53/27 2596/53/27 2595/54/27
+f 2596/53/27 2572/53/27 2576/68/27
+f 2576/68/27 2597/68/27 2596/53/27
+f 2597/68/27 2576/68/27 2578/67/27
+f 2578/67/27 2598/67/27 2597/68/27
+f 2598/67/27 2578/67/27 2580/66/27
+f 2580/66/27 2599/65/27 2598/67/27
+f 2599/65/27 2580/66/27 2582/64/27
+f 2582/64/27 2600/63/27 2599/65/27
+f 2600/63/27 2582/64/27 2584/62/27
+f 2584/62/27 2601/62/27 2600/63/27
+f 2601/62/27 2584/62/27 2586/61/27
+f 2586/61/27 2602/60/27 2601/62/27
+f 2602/60/27 2586/61/27 2588/59/27
+f 2588/59/27 2603/58/27 2602/60/27
+f 2603/58/27 2588/59/27 2590/57/27
+f 2590/57/27 2604/57/27 2603/58/27
+f 2604/57/27 2590/57/27 2592/56/27
+f 2592/56/27 2605/56/27 2604/57/27
+f 2605/56/27 2592/56/27 2594/55/27
+f 2594/55/27 2606/55/27 2605/56/27
+f 2606/55/27 2594/55/27 2573/54/27
+f 2573/54/27 2595/54/27 2606/55/27
+f 2607/71/12 2608/70/1 2595/69/1
+f 2595/69/1 2596/72/12 2607/71/12
+f 2609/73/23 2607/71/12 2596/72/12
+f 2596/72/12 2597/74/23 2609/73/23
+f 2610/75/22 2609/73/22 2597/74/22
+f 2597/74/22 2598/76/22 2610/75/22
+f 2611/77/9 2610/75/21 2598/76/21
+f 2598/76/21 2599/78/9 2611/77/9
+f 2612/79/8 2611/77/9 2599/78/9
+f 2599/78/9 2600/80/8 2612/79/8
+f 2613/83/7 2612/82/8 2600/81/8
+f 2600/81/8 2601/84/7 2613/83/7
+f 2614/85/6 2613/83/7 2601/84/7
+f 2601/84/7 2602/86/6 2614/85/6
+f 2615/87/5 2614/85/6 2602/86/6
+f 2602/86/6 2603/88/5 2615/87/5
+f 2616/89/4 2615/87/5 2603/88/5
+f 2603/88/5 2604/90/4 2616/89/4
+f 2617/91/3 2616/89/4 2604/90/4
+f 2604/90/4 2605/92/3 2617/91/3
+f 2618/93/2 2617/91/3 2605/92/3
+f 2605/92/3 2606/94/2 2618/93/2
+f 2608/70/1 2618/93/2 2606/94/2
+f 2606/94/2 2595/69/1 2608/70/1
+f 2619/95/26 2620/95/26 2621/96/26
+f 2621/96/26 2622/96/26 2619/95/26
+f 2623/97/26 2624/97/26 2620/95/26
+f 2620/95/26 2619/95/26 2623/97/26
+f 2625/67/26 2626/98/26 2624/97/26
+f 2624/97/26 2623/97/26 2625/67/26
+f 2627/99/26 2628/99/26 2626/98/26
+f 2626/98/26 2625/67/26 2627/99/26
+f 2629/100/26 2630/100/26 2628/99/26
+f 2628/99/26 2627/99/26 2629/100/26
+f 2631/101/26 2632/101/26 2630/100/26
+f 2630/100/26 2629/100/26 2631/101/26
+f 2633/61/26 2634/61/26 2632/101/26
+f 2632/101/26 2631/101/26 2633/61/26
+f 2635/59/26 2636/102/26 2634/61/26
+f 2634/61/26 2633/61/26 2635/59/26
+f 2637/103/26 2638/103/26 2636/102/26
+f 2636/102/26 2635/59/26 2637/103/26
+f 2639/104/26 2640/105/26 2638/103/26
+f 2638/103/26 2637/103/26 2639/104/26
+f 2641/106/26 2642/106/26 2640/105/26
+f 2640/105/26 2639/104/26 2641/106/26
+f 2622/96/26 2621/96/26 2642/106/26
+f 2642/106/26 2641/106/26 2622/96/26
+f 2620/107/39 2643/110/39 2644/109/39
+f 2644/109/39 2621/108/39 2620/107/39
+f 2624/111/38 2645/112/38 2643/110/38
+f 2643/110/38 2620/107/38 2624/111/38
+f 2626/113/37 2646/114/37 2645/112/37
+f 2645/112/37 2624/111/37 2626/113/37
+f 2628/115/36 2647/116/36 2646/114/36
+f 2646/114/36 2626/113/36 2628/115/36
+f 2630/117/35 2648/118/35 2647/116/35
+f 2647/116/35 2628/115/35 2630/117/35
+f 2632/119/34 2649/120/34 2648/118/34
+f 2648/118/34 2630/117/34 2632/119/34
+f 2634/121/33 2650/122/33 2649/120/33
+f 2649/120/33 2632/119/33 2634/121/33
+f 2636/123/32 2651/124/32 2650/122/32
+f 2650/122/32 2634/121/32 2636/123/32
+f 2638/125/31 2652/126/31 2651/124/31
+f 2651/124/31 2636/123/31 2638/125/31
+f 2640/127/30 2653/130/30 2652/129/30
+f 2652/129/30 2638/128/30 2640/127/30
+f 2642/131/29 2654/132/29 2653/130/29
+f 2653/130/29 2640/127/29 2642/131/29
+f 2621/108/28 2644/109/28 2654/132/28
+f 2654/132/28 2642/131/28 2621/108/28
+f 2643/110/54 2655/134/54 2656/133/54
+f 2656/133/54 2644/109/54 2643/110/54
+f 2645/112/53 2657/135/53 2655/134/53
+f 2655/134/53 2643/110/53 2645/112/53
+f 2646/114/51 2658/136/52 2657/135/51
+f 2657/135/51 2645/112/51 2646/114/51
+f 2647/116/50 2659/137/50 2658/136/50
+f 2658/136/50 2646/114/50 2647/116/50
+f 2648/118/49 2660/138/49 2659/137/49
+f 2659/137/49 2647/116/49 2648/118/49
+f 2649/120/48 2661/139/48 2660/138/48
+f 2660/138/48 2648/118/48 2649/120/48
+f 2650/122/385 2662/140/46 2661/139/46
+f 2661/139/46 2649/120/46 2650/122/385
+f 2651/124/45 2663/141/45 2662/140/45
+f 2662/140/45 2650/122/45 2651/124/45
+f 2652/126/44 2664/142/44 2663/141/44
+f 2663/141/44 2651/124/44 2652/126/44
+f 2653/130/42 2665/144/42 2664/143/43
+f 2664/143/43 2652/129/42 2653/130/42
+f 2654/132/41 2666/145/41 2665/144/41
+f 2665/144/41 2653/130/41 2654/132/41
+f 2644/109/40 2656/133/40 2666/145/40
+f 2666/145/40 2654/132/386 2644/109/40
+f 2607/148/71 2667/147/71 2668/146/71
+f 2668/146/71 2608/149/71 2607/148/71
+f 2609/151/69 2669/150/70 2667/147/70
+f 2667/147/70 2607/148/69 2609/151/69
+f 2610/154/68 2670/153/68 2669/152/68
+f 2669/152/68 2609/155/68 2610/154/68
+f 2611/156/67 2671/142/67 2670/153/67
+f 2670/153/67 2610/154/67 2611/156/67
+f 2612/158/65 2672/157/66 2671/142/66
+f 2671/142/66 2611/156/65 2612/158/65
+f 2613/160/64 2673/159/64 2672/157/64
+f 2672/157/64 2612/158/64 2613/160/64
+f 2614/162/63 2674/161/63 2673/159/63
+f 2673/159/63 2613/160/63 2614/162/63
+f 2615/164/62 2675/163/61 2674/161/61
+f 2674/161/61 2614/162/62 2615/164/62
+f 2616/166/60 2676/165/60 2675/163/60
+f 2675/163/60 2615/164/60 2616/166/60
+f 2617/168/59 2677/167/59 2676/165/59
+f 2676/165/59 2616/166/59 2617/168/59
+f 2618/170/58 2678/169/57 2677/167/57
+f 2677/167/57 2617/168/57 2618/170/58
+f 2608/149/56 2668/146/56 2678/169/56
+f 2678/169/56 2618/170/56 2608/149/56
+f 2667/173/12 2619/172/12 2622/171/1
+f 2622/171/1 2668/174/1 2667/173/12
+f 2669/176/11 2623/175/11 2619/172/12
+f 2619/172/12 2667/173/12 2669/176/11
+f 2670/179/10 2625/178/10 2623/177/11
+f 2623/177/11 2669/180/11 2670/179/10
+f 2671/181/9 2627/86/9 2625/178/10
+f 2625/178/10 2670/179/10 2671/181/9
+f 2672/183/8 2629/182/8 2627/86/9
+f 2627/86/9 2671/181/9 2672/183/8
+f 2673/185/7 2631/184/7 2629/182/8
+f 2629/182/8 2672/183/8 2673/185/7
+f 2674/187/6 2633/186/6 2631/184/7
+f 2631/184/7 2673/185/7 2674/187/6
+f 2675/189/5 2635/188/5 2633/186/6
+f 2633/186/6 2674/187/6 2675/189/5
+f 2676/191/4 2637/190/4 2635/188/5
+f 2635/188/5 2675/189/5 2676/191/4
+f 2677/192/3 2639/76/3 2637/190/4
+f 2637/190/4 2676/191/4 2677/192/3
+f 2678/194/2 2641/193/2 2639/76/3
+f 2639/76/3 2677/192/3 2678/194/2
+f 2668/174/1 2622/171/1 2641/193/2
+f 2641/193/2 2678/194/2 2668/174/1
+f 2679/195/387 2680/198/387 2681/197/387
+f 2681/197/387 2682/196/387 2679/195/387
+f 2683/199/388 2684/202/388 2685/201/388
+f 2685/201/388 2686/200/388 2683/199/388
+f 2687/203/389 2688/206/389 2689/205/389
+f 2689/205/389 2690/204/389 2687/203/389
+f 2691/202/390 2692/199/390 2693/200/390
+f 2693/200/390 2694/201/390 2691/202/390
+f 2695/207/391 2696/209/391 2697/208/391
+f 2697/208/391 2698/207/391 2695/207/391
+f 2699/209/392 2700/211/392 2701/210/392
+f 2690/212/393 2689/214/393 2702/213/393
+f 2702/213/393 2703/196/393 2690/212/393
+f 2704/210/394 2705/211/394 2706/209/394
+f 2707/215/395 2706/209/395 2705/211/395
+f 2705/211/395 2708/216/395 2707/215/395
+f 2709/217/396 2682/196/396 2681/197/396
+f 2681/197/396 2710/218/396 2709/217/396
+f 2711/219/397 2687/203/397 2690/204/397
+f 2690/204/397 2712/220/397 2711/219/397
+f 2713/209/398 2695/207/398 2698/207/398
+f 2698/207/398 2714/208/398 2713/209/398
+f 2690/212/399 2703/196/399 2715/213/399
+f 2715/213/399 2712/214/399 2690/212/399
+f 2707/215/400 2708/216/400 2700/211/400
+f 2700/211/400 2699/209/400 2707/215/400
+f 2716/221/390 2680/221/390 2679/222/390
+f 2679/222/390 2702/222/390 2716/221/390
+f 2702/222/401 2679/222/401 2682/203/401
+f 2682/203/401 2703/203/401 2702/222/401
+f 2703/203/402 2682/203/402 2709/206/402
+f 2709/206/402 2715/206/402 2703/203/402
+f 2715/206/388 2709/206/388 2710/223/388
+f 2710/223/388 2717/223/388 2715/206/388
+f 2717/224/403 2710/224/403 2681/226/403
+f 2681/226/403 2718/225/403 2717/224/403
+f 2718/225/404 2681/226/404 2680/224/404
+f 2680/224/404 2716/224/404 2718/225/404
+f 2712/214/394 2715/213/394 2717/228/394
+f 2717/228/394 2719/227/394 2712/214/394
+f 2719/229/390 2720/221/390 2711/219/390
+f 2711/219/390 2712/220/390 2719/229/390
+f 2688/206/388 2721/223/388 2722/230/388
+f 2722/230/388 2689/205/388 2688/206/388
+f 2722/227/392 2716/228/392 2702/213/392
+f 2702/213/392 2689/214/392 2722/227/392
+f 2685/201/388 2723/202/388 2724/199/388
+f 2724/199/388 2686/200/388 2685/201/388
+f 2722/231/405 2701/233/406 2700/232/405
+f 2700/232/405 2716/224/405 2722/231/405
+f 2716/224/404 2700/232/404 2708/234/404
+f 2708/234/404 2718/225/404 2716/224/404
+f 2718/225/403 2708/234/403 2705/232/403
+f 2705/232/403 2717/224/403 2718/225/403
+f 2717/224/407 2705/232/407 2704/233/407
+f 2704/233/407 2719/231/407 2717/224/407
+f 2693/200/390 2725/199/390 2726/202/390
+f 2726/202/390 2694/201/390 2693/200/390
+f 2697/208/391 2706/236/391 2707/235/391
+f 2707/235/391 2698/207/391 2697/208/391
+f 2698/207/398 2707/235/398 2699/236/398
+f 2699/236/398 2714/208/398 2698/207/398
+f 2721/236/27 2683/238/27 2686/237/27
+f 2686/237/27 2722/231/27 2721/236/27
+f 2722/231/27 2686/237/27 2724/239/27
+f 2724/239/27 2701/233/27 2722/231/27
+f 2701/210/408 2724/241/409 2723/240/409
+f 2723/240/409 2699/209/408 2701/210/408
+f 2699/236/26 2723/238/26 2685/242/26
+f 2685/242/26 2714/208/26 2699/236/26
+f 2714/208/26 2685/242/26 2684/240/26
+f 2684/240/26 2713/209/26 2714/208/26
+f 2696/209/26 2691/240/26 2694/242/26
+f 2694/242/26 2697/208/26 2696/209/26
+f 2697/208/26 2694/242/26 2726/238/26
+f 2726/238/26 2706/236/26 2697/208/26
+f 2706/209/410 2726/240/410 2725/241/410
+f 2725/241/410 2704/210/410 2706/209/410
+f 2704/233/27 2725/239/27 2693/237/27
+f 2693/237/27 2719/231/27 2704/233/27
+f 2719/231/27 2693/237/27 2692/238/27
+f 2692/238/27 2720/236/27 2719/231/27
+f 2727/195/411 2728/198/411 2729/197/411
+f 2729/197/411 2730/196/411 2727/195/411
+f 2731/199/412 2732/202/412 2733/201/413
+f 2733/201/413 2734/200/413 2731/199/412
+f 2735/203/414 2736/206/414 2737/205/414
+f 2737/205/414 2738/204/414 2735/203/414
+f 2739/202/415 2740/199/415 2741/200/416
+f 2741/200/416 2742/201/416 2739/202/415
+f 2743/207/417 2744/209/417 2745/208/417
+f 2745/208/417 2746/207/417 2743/207/417
+f 2747/209/171 2748/211/171 2749/210/171
+f 2738/212/418 2737/214/418 2750/213/418
+f 2750/213/418 2751/196/418 2738/212/418
+f 2752/210/419 2753/211/419 2754/209/419
+f 2755/215/420 2754/209/420 2753/211/420
+f 2753/211/420 2756/216/420 2755/215/420
+f 2757/217/167 2730/196/167 2729/197/167
+f 2729/197/167 2758/218/167 2757/217/167
+f 2759/219/421 2735/203/421 2738/204/421
+f 2738/204/421 2760/220/421 2759/219/421
+f 2761/209/422 2743/207/422 2746/207/422
+f 2746/207/422 2762/208/422 2761/209/422
+f 2738/212/423 2751/196/423 2763/213/423
+f 2763/213/423 2760/214/423 2738/212/423
+f 2755/215/424 2756/216/424 2748/211/424
+f 2748/211/424 2747/209/424 2755/215/424
+f 2764/221/415 2728/221/416 2727/222/416
+f 2727/222/416 2750/222/415 2764/221/415
+f 2750/222/425 2727/222/425 2730/203/425
+f 2730/203/425 2751/203/425 2750/222/425
+f 2751/203/426 2730/203/426 2757/206/426
+f 2757/206/426 2763/206/426 2751/203/426
+f 2763/206/413 2757/206/413 2758/223/413
+f 2758/223/413 2765/223/413 2763/206/413
+f 2765/224/427 2758/224/427 2729/226/427
+f 2729/226/427 2766/225/427 2765/224/427
+f 2766/225/428 2729/226/428 2728/224/428
+f 2728/224/428 2764/224/428 2766/225/428
+f 2760/214/419 2763/213/419 2765/228/419
+f 2765/228/419 2767/227/419 2760/214/419
+f 2767/229/415 2768/221/415 2759/219/415
+f 2759/219/415 2760/220/415 2767/229/415
+f 2736/206/413 2769/223/413 2770/230/413
+f 2770/230/413 2737/205/413 2736/206/413
+f 2770/227/171 2764/228/171 2750/213/171
+f 2750/213/171 2737/214/171 2770/227/171
+f 2733/201/413 2771/202/412 2772/199/412
+f 2772/199/412 2734/200/413 2733/201/413
+f 2770/231/429 2749/233/429 2748/232/429
+f 2748/232/429 2764/224/429 2770/231/429
+f 2764/224/428 2748/232/428 2756/234/428
+f 2756/234/428 2766/225/428 2764/224/428
+f 2766/225/427 2756/234/427 2753/232/427
+f 2753/232/427 2765/224/427 2766/225/427
+f 2765/224/430 2753/232/430 2752/233/430
+f 2752/233/430 2767/231/430 2765/224/430
+f 2741/200/416 2773/199/415 2774/202/415
+f 2774/202/415 2742/201/416 2741/200/416
+f 2745/208/417 2754/236/417 2755/235/417
+f 2755/235/417 2746/207/417 2745/208/417
+f 2746/207/422 2755/235/422 2747/236/422
+f 2747/236/422 2762/208/422 2746/207/422
+f 2769/236/27 2731/238/27 2734/237/27
+f 2734/237/27 2770/231/27 2769/236/27
+f 2770/231/27 2734/237/27 2772/239/27
+f 2772/239/27 2749/233/27 2770/231/27
+f 2749/210/191 2772/241/191 2771/240/191
+f 2771/240/191 2747/209/191 2749/210/191
+f 2747/236/26 2771/238/26 2733/242/26
+f 2733/242/26 2762/208/26 2747/236/26
+f 2762/208/26 2733/242/26 2732/240/26
+f 2732/240/26 2761/209/26 2762/208/26
+f 2744/209/26 2739/240/26 2742/242/26
+f 2742/242/26 2745/208/26 2744/209/26
+f 2745/208/26 2742/242/26 2774/238/26
+f 2774/238/26 2754/236/26 2745/208/26
+f 2754/209/431 2774/240/431 2773/241/431
+f 2773/241/431 2752/210/431 2754/209/431
+f 2752/233/27 2773/239/27 2741/237/27
+f 2741/237/27 2767/231/27 2752/233/27
+f 2767/231/27 2741/237/27 2740/238/27
+f 2740/238/27 2768/236/27 2767/231/27
+f 2775/243/432 2776/246/432 2777/245/432
+f 2777/245/432 2778/244/432 2775/243/432
+f 2775/247/433 2779/250/433 2780/249/433
+f 2780/249/433 2776/248/433 2775/247/433
+f 2776/246/434 2780/252/434 2781/251/434
+f 2781/251/434 2777/245/434 2776/246/434
+f 2777/248/435 2781/249/435 2782/250/435
+f 2782/250/435 2778/247/435 2777/248/435
+f 2783/195/436 2784/198/436 2785/197/436
+f 2785/197/436 2786/196/436 2783/195/436
+f 2787/199/437 2788/202/437 2789/201/413
+f 2789/201/413 2790/200/413 2787/199/437
+f 2791/203/414 2792/206/414 2793/205/414
+f 2793/205/414 2794/204/414 2791/203/414
+f 2795/202/415 2796/199/415 2797/200/416
+f 2797/200/416 2798/201/416 2795/202/415
+f 2799/207/417 2800/209/417 2801/208/417
+f 2801/208/417 2802/207/417 2799/207/417
+f 2803/209/171 2804/211/171 2805/210/171
+f 2794/212/418 2793/214/418 2806/213/418
+f 2806/213/418 2807/196/418 2794/212/418
+f 2808/210/419 2809/211/419 2810/209/419
+f 2811/215/420 2810/209/420 2809/211/420
+f 2809/211/420 2812/216/420 2811/215/420
+f 2813/217/167 2786/196/167 2785/197/167
+f 2785/197/167 2814/218/167 2813/217/167
+f 2815/219/438 2791/203/421 2794/204/421
+f 2794/204/421 2816/220/438 2815/219/438
+f 2817/209/422 2799/207/422 2802/207/422
+f 2802/207/422 2818/208/422 2817/209/422
+f 2794/212/423 2807/196/423 2819/213/423
+f 2819/213/423 2816/214/423 2794/212/423
+f 2811/215/424 2812/216/424 2804/211/424
+f 2804/211/424 2803/209/424 2811/215/424
+f 2820/221/415 2784/221/415 2783/222/415
+f 2783/222/415 2806/222/415 2820/221/415
+f 2806/222/425 2783/222/425 2786/203/425
+f 2786/203/425 2807/203/425 2806/222/425
+f 2807/203/426 2786/203/426 2813/206/426
+f 2813/206/426 2819/206/426 2807/203/426
+f 2819/206/413 2813/206/413 2814/223/413
+f 2814/223/413 2821/223/413 2819/206/413
+f 2821/224/427 2814/224/427 2785/226/427
+f 2785/226/427 2822/225/427 2821/224/427
+f 2822/225/428 2785/226/428 2784/224/428
+f 2784/224/428 2820/224/428 2822/225/428
+f 2816/214/419 2819/213/419 2821/228/419
+f 2821/228/419 2823/227/419 2816/214/419
+f 2823/229/416 2824/221/416 2815/219/416
+f 2815/219/416 2816/220/416 2823/229/416
+f 2792/206/413 2825/223/413 2826/230/412
+f 2826/230/412 2793/205/412 2792/206/413
+f 2826/227/171 2820/228/171 2806/213/171
+f 2806/213/171 2793/214/171 2826/227/171
+f 2789/201/413 2827/202/412 2828/199/412
+f 2828/199/412 2790/200/413 2789/201/413
+f 2826/231/429 2805/233/429 2804/232/429
+f 2804/232/429 2820/224/429 2826/231/429
+f 2820/224/428 2804/232/428 2812/234/428
+f 2812/234/428 2822/225/428 2820/224/428
+f 2822/225/427 2812/234/427 2809/232/427
+f 2809/232/427 2821/224/427 2822/225/427
+f 2821/224/430 2809/232/430 2808/233/430
+f 2808/233/430 2823/231/430 2821/224/430
+f 2797/200/416 2829/199/415 2830/202/415
+f 2830/202/415 2798/201/416 2797/200/416
+f 2801/208/417 2810/236/417 2811/235/417
+f 2811/235/417 2802/207/417 2801/208/417
+f 2802/207/422 2811/235/422 2803/236/422
+f 2803/236/422 2818/208/422 2802/207/422
+f 2825/236/27 2787/238/27 2790/237/27
+f 2790/237/27 2826/231/27 2825/236/27
+f 2826/231/27 2790/237/27 2828/239/27
+f 2828/239/27 2805/233/27 2826/231/27
+f 2805/210/191 2828/241/191 2827/240/191
+f 2827/240/191 2803/209/191 2805/210/191
+f 2803/236/26 2827/238/26 2789/242/26
+f 2789/242/26 2818/208/26 2803/236/26
+f 2818/208/26 2789/242/26 2788/240/26
+f 2788/240/26 2817/209/26 2818/208/26
+f 2800/209/26 2795/240/26 2798/242/26
+f 2798/242/26 2801/208/26 2800/209/26
+f 2801/208/26 2798/242/26 2830/238/26
+f 2830/238/26 2810/236/26 2801/208/26
+f 2810/209/431 2830/240/431 2829/241/431
+f 2829/241/431 2808/210/431 2810/209/431
+f 2808/233/27 2829/239/27 2797/237/27
+f 2797/237/27 2823/231/27 2808/233/27
+f 2823/231/27 2797/237/27 2796/238/27
+f 2796/238/27 2824/236/27 2823/231/27
+f 2831/243/439 2832/246/439 2833/245/439
+f 2833/245/439 2834/244/439 2831/243/439
+f 2831/247/440 2835/250/440 2836/249/440
+f 2836/249/440 2832/248/440 2831/247/440
+f 2832/246/441 2836/252/441 2837/251/441
+f 2837/251/441 2833/245/441 2832/246/441
+f 2833/248/442 2837/249/442 2838/250/442
+f 2838/250/442 2834/247/442 2833/248/442
+f 2839/195/443 2840/198/443 2841/197/443
+f 2841/197/443 2842/196/443 2839/195/443
+f 2843/199/390 2844/202/390 2845/201/390
+f 2845/201/390 2846/200/390 2843/199/390
+f 2847/203/444 2848/206/444 2849/205/444
+f 2849/205/444 2850/204/444 2847/203/444
+f 2851/202/388 2852/199/388 2853/200/388
+f 2853/200/388 2854/201/388 2851/202/388
+f 2855/207/398 2856/209/398 2857/208/398
+f 2857/208/398 2858/207/398 2855/207/398
+f 2859/209/445 2860/211/445 2861/210/445
+f 2850/212/446 2849/214/446 2862/213/446
+f 2862/213/446 2863/196/446 2850/212/446
+f 2864/210/447 2865/211/447 2866/209/447
+f 2867/215/448 2866/209/448 2865/211/448
+f 2865/211/448 2868/216/448 2867/215/448
+f 2869/217/449 2842/196/450 2841/197/450
+f 2841/197/450 2870/218/449 2869/217/449
+f 2871/219/451 2847/203/451 2850/204/451
+f 2850/204/451 2872/220/451 2871/219/451
+f 2873/209/391 2855/207/391 2858/207/391
+f 2858/207/391 2874/208/391 2873/209/391
+f 2850/212/452 2863/196/452 2875/213/452
+f 2875/213/452 2872/214/452 2850/212/452
+f 2867/215/453 2868/216/453 2860/211/453
+f 2860/211/453 2859/209/453 2867/215/453
+f 2876/221/388 2840/221/388 2839/222/388
+f 2839/222/388 2862/222/388 2876/221/388
+f 2862/222/402 2839/222/402 2842/203/402
+f 2842/203/402 2863/203/402 2862/222/402
+f 2863/203/401 2842/203/401 2869/206/401
+f 2869/206/401 2875/206/401 2863/203/401
+f 2875/206/390 2869/206/390 2870/223/390
+f 2870/223/390 2877/223/390 2875/206/390
+f 2877/224/454 2870/224/454 2841/226/454
+f 2841/226/454 2878/225/454 2877/224/454
+f 2878/225/455 2841/226/455 2840/224/455
+f 2840/224/455 2876/224/455 2878/225/455
+f 2872/214/447 2875/213/447 2877/228/447
+f 2877/228/447 2879/227/447 2872/214/447
+f 2879/229/388 2880/221/388 2871/219/388
+f 2871/219/388 2872/220/388 2879/229/388
+f 2848/206/390 2881/223/390 2882/230/390
+f 2882/230/390 2849/205/390 2848/206/390
+f 2882/227/445 2876/228/445 2862/213/445
+f 2862/213/445 2849/214/445 2882/227/445
+f 2845/201/390 2883/202/390 2884/199/390
+f 2884/199/390 2846/200/390 2845/201/390
+f 2882/231/456 2861/233/456 2860/232/456
+f 2860/232/456 2876/224/456 2882/231/456
+f 2876/224/455 2860/232/455 2868/234/455
+f 2868/234/455 2878/225/455 2876/224/455
+f 2878/225/454 2868/234/454 2865/232/454
+f 2865/232/454 2877/224/454 2878/225/454
+f 2877/224/457 2865/232/457 2864/233/457
+f 2864/233/457 2879/231/457 2877/224/457
+f 2853/200/388 2885/199/388 2886/202/388
+f 2886/202/388 2854/201/388 2853/200/388
+f 2857/208/398 2866/236/398 2867/235/398
+f 2867/235/398 2858/207/398 2857/208/398
+f 2858/207/391 2867/235/391 2859/236/391
+f 2859/236/391 2874/208/391 2858/207/391
+f 2881/236/27 2843/238/27 2846/237/27
+f 2846/237/27 2882/231/27 2881/236/27
+f 2882/231/27 2846/237/27 2884/239/27
+f 2884/239/27 2861/233/27 2882/231/27
+f 2861/210/458 2884/241/458 2883/240/458
+f 2883/240/458 2859/209/458 2861/210/458
+f 2859/236/26 2883/238/26 2845/242/26
+f 2845/242/26 2874/208/26 2859/236/26
+f 2874/208/26 2845/242/26 2844/240/26
+f 2844/240/26 2873/209/26 2874/208/26
+f 2856/209/26 2851/240/26 2854/242/26
+f 2854/242/26 2857/208/26 2856/209/26
+f 2857/208/26 2854/242/26 2886/238/26
+f 2886/238/26 2866/236/26 2857/208/26
+f 2866/209/459 2886/240/459 2885/241/459
+f 2885/241/459 2864/210/459 2866/209/459
+f 2864/233/27 2885/239/27 2853/237/27
+f 2853/237/27 2879/231/27 2864/233/27
+f 2879/231/27 2853/237/27 2852/238/27
+f 2852/238/27 2880/236/27 2879/231/27
+f 2887/243/154 2888/246/154 2889/245/154
+f 2889/245/154 2890/244/154 2887/243/154
+f 2887/247/1 2891/250/1 2892/249/1
+f 2892/249/1 2888/248/1 2887/247/1
+f 2888/246/155 2892/252/155 2893/251/155
+f 2893/251/155 2889/245/155 2888/246/155
+f 2889/248/7 2893/249/7 2894/250/7
+f 2894/250/7 2890/247/7 2889/248/7
+f 2895/243/160 2896/246/160 2897/245/160
+f 2897/245/160 2898/244/160 2895/243/160
+f 2895/247/163 2899/250/163 2900/249/163
+f 2900/249/163 2896/248/163 2895/247/163
+f 2896/246/162 2900/252/162 2901/251/162
+f 2901/251/162 2897/245/162 2896/246/162
+f 2897/248/161 2901/249/161 2902/250/161
+f 2902/250/161 2898/247/161 2897/248/161
+f 2903/243/148 2904/246/148 2905/245/148
+f 2905/245/148 2906/244/148 2903/243/148
+f 2903/247/7 2907/250/7 2908/249/7
+f 2908/249/7 2904/248/7 2903/247/7
+f 2904/246/149 2908/252/149 2909/251/149
+f 2909/251/149 2905/245/149 2904/246/149
+f 2905/248/1 2909/249/1 2910/250/1
+f 2910/250/1 2906/247/1 2905/248/1
+f 2911/243/460 2912/246/460 2913/245/460
+f 2913/245/460 2914/244/460 2911/243/460
+f 2911/247/461 2915/250/461 2916/249/461
+f 2916/249/461 2912/248/461 2911/247/461
+f 2912/246/462 2916/252/462 2917/251/462
+f 2917/251/462 2913/245/462 2912/246/462
+f 2913/248/463 2917/249/463 2918/250/463
+f 2918/250/463 2914/247/463 2913/248/463
+f 2919/243/150 2920/246/150 2921/245/150
+f 2921/245/150 2922/244/150 2919/243/150
+f 2919/247/153 2923/250/153 2924/249/153
+f 2924/249/153 2920/248/153 2919/247/153
+f 2920/246/152 2924/252/152 2925/251/152
+f 2925/251/152 2921/245/152 2920/246/152
+f 2921/248/151 2925/249/151 2926/250/151
+f 2926/250/151 2922/247/151 2921/248/151
+f 2927/195/443 2928/198/443 2929/197/443
+f 2929/197/443 2930/196/443 2927/195/443
+f 2931/199/390 2932/202/390 2933/201/390
+f 2933/201/390 2934/200/390 2931/199/390
+f 2935/203/444 2936/206/444 2937/205/444
+f 2937/205/444 2938/204/444 2935/203/444
+f 2939/202/388 2940/199/388 2941/200/388
+f 2941/200/388 2942/201/388 2939/202/388
+f 2943/207/398 2944/209/398 2945/208/398
+f 2945/208/398 2946/207/398 2943/207/398
+f 2947/209/445 2948/211/445 2949/210/445
+f 2938/212/446 2937/214/446 2950/213/446
+f 2950/213/446 2951/196/446 2938/212/446
+f 2952/210/447 2953/211/447 2954/209/447
+f 2955/215/448 2954/209/448 2953/211/448
+f 2953/211/448 2956/216/448 2955/215/448
+f 2957/217/449 2930/196/450 2929/197/450
+f 2929/197/450 2958/218/449 2957/217/449
+f 2959/219/451 2935/203/451 2938/204/451
+f 2938/204/451 2960/220/451 2959/219/451
+f 2961/209/391 2943/207/391 2946/207/391
+f 2946/207/391 2962/208/391 2961/209/391
+f 2938/212/452 2951/196/452 2963/213/452
+f 2963/213/452 2960/214/452 2938/212/452
+f 2955/215/453 2956/216/453 2948/211/453
+f 2948/211/453 2947/209/453 2955/215/453
+f 2964/221/388 2928/221/388 2927/222/388
+f 2927/222/388 2950/222/388 2964/221/388
+f 2950/222/402 2927/222/402 2930/203/402
+f 2930/203/402 2951/203/402 2950/222/402
+f 2951/203/401 2930/203/401 2957/206/401
+f 2957/206/401 2963/206/401 2951/203/401
+f 2963/206/390 2957/206/390 2958/223/390
+f 2958/223/390 2965/223/390 2963/206/390
+f 2965/224/454 2958/224/454 2929/226/454
+f 2929/226/454 2966/225/454 2965/224/454
+f 2966/225/455 2929/226/455 2928/224/455
+f 2928/224/455 2964/224/455 2966/225/455
+f 2960/214/447 2963/213/447 2965/228/447
+f 2965/228/447 2967/227/447 2960/214/447
+f 2967/229/388 2968/221/388 2959/219/388
+f 2959/219/388 2960/220/388 2967/229/388
+f 2936/206/390 2969/223/390 2970/230/390
+f 2970/230/390 2937/205/390 2936/206/390
+f 2970/227/445 2964/228/445 2950/213/445
+f 2950/213/445 2937/214/445 2970/227/445
+f 2933/201/390 2971/202/390 2972/199/390
+f 2972/199/390 2934/200/390 2933/201/390
+f 2970/231/456 2949/233/456 2948/232/456
+f 2948/232/456 2964/224/456 2970/231/456
+f 2964/224/455 2948/232/455 2956/234/455
+f 2956/234/455 2966/225/455 2964/224/455
+f 2966/225/454 2956/234/454 2953/232/454
+f 2953/232/454 2965/224/454 2966/225/454
+f 2965/224/457 2953/232/457 2952/233/457
+f 2952/233/457 2967/231/457 2965/224/457
+f 2941/200/388 2973/199/388 2974/202/388
+f 2974/202/388 2942/201/388 2941/200/388
+f 2945/208/398 2954/236/398 2955/235/398
+f 2955/235/398 2946/207/398 2945/208/398
+f 2946/207/391 2955/235/391 2947/236/391
+f 2947/236/391 2962/208/391 2946/207/391
+f 2969/236/27 2931/238/27 2934/237/27
+f 2934/237/27 2970/231/27 2969/236/27
+f 2970/231/27 2934/237/27 2972/239/27
+f 2972/239/27 2949/233/27 2970/231/27
+f 2949/210/458 2972/241/458 2971/240/458
+f 2971/240/458 2947/209/458 2949/210/458
+f 2947/236/26 2971/238/26 2933/242/26
+f 2933/242/26 2962/208/26 2947/236/26
+f 2962/208/26 2933/242/26 2932/240/26
+f 2932/240/26 2961/209/26 2962/208/26
+f 2944/209/26 2939/240/26 2942/242/26
+f 2942/242/26 2945/208/26 2944/209/26
+f 2945/208/26 2942/242/26 2974/238/26
+f 2974/238/26 2954/236/26 2945/208/26
+f 2954/209/459 2974/240/459 2973/241/459
+f 2973/241/459 2952/210/459 2954/209/459
+f 2952/233/27 2973/239/27 2941/237/27
+f 2941/237/27 2967/231/27 2952/233/27
+f 2967/231/27 2941/237/27 2940/238/27
+f 2940/238/27 2968/236/27 2967/231/27
+f 2975/195/464 2976/198/464 2977/197/4
+f 2977/197/4 2978/196/4 2975/195/464
+f 2979/199/465 2980/202/465 2981/201/465
+f 2981/201/465 2982/200/465 2979/199/465
+f 2983/203/421 2984/206/421 2985/205/421
+f 2985/205/421 2986/204/421 2983/203/421
+f 2987/202/437 2988/199/437 2989/200/437
+f 2989/200/437 2990/201/437 2987/202/437
+f 2991/207/466 2992/209/466 2993/208/466
+f 2993/208/466 2994/207/466 2991/207/466
+f 2995/209/107 2996/211/107 2997/210/107
+f 2986/212/467 2985/214/467 2998/213/467
+f 2998/213/467 2999/196/467 2986/212/467
+f 3000/210/468 3001/211/468 3002/209/468
+f 3003/215/469 3002/209/469 3001/211/469
+f 3001/211/469 3004/216/469 3003/215/469
+f 3005/217/103 2978/196/103 2977/197/103
+f 2977/197/103 3006/218/103 3005/217/103
+f 3007/219/470 2983/203/414 2986/204/414
+f 2986/204/414 3008/220/414 3007/219/470
+f 3009/209/471 2991/207/471 2994/207/471
+f 2994/207/471 3010/208/471 3009/209/471
+f 2986/212/472 2999/196/472 3011/213/472
+f 3011/213/472 3008/214/472 2986/212/472
+f 3003/215/332 3004/216/332 2996/211/332
+f 2996/211/332 2995/209/332 3003/215/332
+f 3012/221/437 2976/221/437 2975/222/437
+f 2975/222/437 2998/222/437 3012/221/437
+f 2998/222/426 2975/222/426 2978/203/426
+f 2978/203/426 2999/203/426 2998/222/426
+f 2999/203/425 2978/203/425 3005/206/425
+f 3005/206/425 3011/206/425 2999/203/425
+f 3011/206/465 3005/206/465 3006/223/465
+f 3006/223/465 3013/223/465 3011/206/465
+f 3013/224/473 3006/224/473 2977/226/473
+f 2977/226/473 3014/225/473 3013/224/473
+f 3014/225/430 2977/226/430 2976/224/430
+f 2976/224/430 3012/224/430 3014/225/430
+f 3008/214/468 3011/213/468 3013/228/468
+f 3013/228/468 3015/227/468 3008/214/468
+f 3015/229/437 3016/221/437 3007/219/437
+f 3007/219/437 3008/220/437 3015/229/437
+f 2984/206/465 3017/223/465 3018/230/465
+f 3018/230/465 2985/205/465 2984/206/465
+f 3018/227/107 3012/228/107 2998/213/107
+f 2998/213/107 2985/214/107 3018/227/107
+f 2981/201/465 3019/202/465 3020/199/465
+f 3020/199/465 2982/200/465 2981/201/465
+f 3018/231/474 2997/233/474 2996/232/474
+f 2996/232/474 3012/224/474 3018/231/474
+f 3012/224/430 2996/232/430 3004/234/430
+f 3004/234/430 3014/225/430 3012/224/430
+f 3014/225/473 3004/234/473 3001/232/473
+f 3001/232/473 3013/224/473 3014/225/473
+f 3013/224/428 3001/232/428 3000/233/428
+f 3000/233/428 3015/231/428 3013/224/428
+f 2989/200/437 3021/199/437 3022/202/437
+f 3022/202/437 2990/201/437 2989/200/437
+f 2993/208/466 3002/236/466 3003/235/466
+f 3003/235/466 2994/207/466 2993/208/466
+f 2994/207/471 3003/235/471 2995/236/471
+f 2995/236/471 3010/208/471 2994/207/471
+f 3017/236/27 2979/238/27 2982/237/27
+f 2982/237/27 3018/231/27 3017/236/27
+f 3018/231/27 2982/237/27 3020/239/27
+f 3020/239/27 2997/233/27 3018/231/27
+f 2997/210/193 3020/241/193 3019/240/193
+f 3019/240/193 2995/209/193 2997/210/193
+f 2995/236/26 3019/238/26 2981/242/26
+f 2981/242/26 3010/208/26 2995/236/26
+f 3010/208/26 2981/242/26 2980/240/26
+f 2980/240/26 3009/209/26 3010/208/26
+f 2992/209/26 2987/240/26 2990/242/26
+f 2990/242/26 2993/208/26 2992/209/26
+f 2993/208/26 2990/242/26 3022/238/26
+f 3022/238/26 3002/236/26 2993/208/26
+f 3002/209/475 3022/240/475 3021/241/475
+f 3021/241/475 3000/210/475 3002/209/475
+f 3000/233/27 3021/239/27 2989/237/27
+f 2989/237/27 3015/231/27 3000/233/27
+f 3015/231/27 2989/237/27 2988/238/27
+f 2988/238/27 3016/236/27 3015/231/27
+f 3023/243/187 3024/246/187 3025/245/187
+f 3025/245/187 3026/244/187 3023/243/187
+f 3023/247/161 3027/250/161 3028/249/161
+f 3028/249/161 3024/248/161 3023/247/161
+f 3024/246/188 3028/252/189 3029/251/188
+f 3029/251/188 3025/245/188 3024/246/188
+f 3025/248/163 3029/249/163 3030/250/163
+f 3030/250/163 3026/247/163 3025/248/163
+f 3031/195/4 3032/198/4 3033/197/4
+f 3033/197/4 3034/196/4 3031/195/4
+f 3035/199/465 3036/202/465 3037/201/465
+f 3037/201/465 3038/200/465 3035/199/465
+f 3039/203/421 3040/206/421 3041/205/421
+f 3041/205/421 3042/204/421 3039/203/421
+f 3043/202/437 3044/199/437 3045/200/437
+f 3045/200/437 3046/201/437 3043/202/437
+f 3047/207/466 3048/209/466 3049/208/466
+f 3049/208/466 3050/207/466 3047/207/466
+f 3051/209/107 3052/211/107 3053/210/107
+f 3042/212/467 3041/214/467 3054/213/467
+f 3054/213/467 3055/196/467 3042/212/467
+f 3056/210/468 3057/211/468 3058/209/468
+f 3059/215/469 3058/209/469 3057/211/469
+f 3057/211/469 3060/216/469 3059/215/469
+f 3061/217/103 3034/196/103 3033/197/103
+f 3033/197/103 3062/218/103 3061/217/103
+f 3063/219/414 3039/203/414 3042/204/470
+f 3042/204/470 3064/220/414 3063/219/414
+f 3065/209/471 3047/207/471 3050/207/471
+f 3050/207/471 3066/208/471 3065/209/471
+f 3042/212/472 3055/196/472 3067/213/472
+f 3067/213/472 3064/214/472 3042/212/472
+f 3059/215/332 3060/216/332 3052/211/332
+f 3052/211/332 3051/209/332 3059/215/332
+f 3068/221/437 3032/221/437 3031/222/437
+f 3031/222/437 3054/222/437 3068/221/437
+f 3054/222/426 3031/222/426 3034/203/426
+f 3034/203/426 3055/203/426 3054/222/426
+f 3055/203/425 3034/203/425 3061/206/425
+f 3061/206/425 3067/206/425 3055/203/425
+f 3067/206/465 3061/206/465 3062/223/465
+f 3062/223/465 3069/223/465 3067/206/465
+f 3069/224/473 3062/224/473 3033/226/473
+f 3033/226/473 3070/225/473 3069/224/473
+f 3070/225/430 3033/226/430 3032/224/430
+f 3032/224/430 3068/224/430 3070/225/430
+f 3064/214/468 3067/213/468 3069/228/468
+f 3069/228/468 3071/227/468 3064/214/468
+f 3071/229/437 3072/221/437 3063/219/437
+f 3063/219/437 3064/220/437 3071/229/437
+f 3040/206/465 3073/223/465 3074/230/465
+f 3074/230/465 3041/205/465 3040/206/465
+f 3074/227/107 3068/228/107 3054/213/107
+f 3054/213/107 3041/214/107 3074/227/107
+f 3037/201/465 3075/202/465 3076/199/465
+f 3076/199/465 3038/200/465 3037/201/465
+f 3074/231/474 3053/233/474 3052/232/474
+f 3052/232/474 3068/224/474 3074/231/474
+f 3068/224/430 3052/232/430 3060/234/430
+f 3060/234/430 3070/225/430 3068/224/430
+f 3070/225/473 3060/234/473 3057/232/473
+f 3057/232/473 3069/224/473 3070/225/473
+f 3069/224/428 3057/232/428 3056/233/428
+f 3056/233/428 3071/231/428 3069/224/428
+f 3045/200/437 3077/199/437 3078/202/437
+f 3078/202/437 3046/201/437 3045/200/437
+f 3049/208/466 3058/236/466 3059/235/466
+f 3059/235/466 3050/207/466 3049/208/466
+f 3050/207/471 3059/235/471 3051/236/471
+f 3051/236/471 3066/208/471 3050/207/471
+f 3073/236/27 3035/238/27 3038/237/27
+f 3038/237/27 3074/231/27 3073/236/27
+f 3074/231/27 3038/237/27 3076/239/27
+f 3076/239/27 3053/233/27 3074/231/27
+f 3053/210/193 3076/241/193 3075/240/193
+f 3075/240/193 3051/209/193 3053/210/193
+f 3051/236/26 3075/238/26 3037/242/26
+f 3037/242/26 3066/208/26 3051/236/26
+f 3066/208/26 3037/242/26 3036/240/26
+f 3036/240/26 3065/209/26 3066/208/26
+f 3048/209/26 3043/240/26 3046/242/26
+f 3046/242/26 3049/208/26 3048/209/26
+f 3049/208/26 3046/242/26 3078/238/26
+f 3078/238/26 3058/236/26 3049/208/26
+f 3058/209/475 3078/240/475 3077/241/475
+f 3077/241/475 3056/210/475 3058/209/475
+f 3056/233/27 3077/239/27 3045/237/27
+f 3045/237/27 3071/231/27 3056/233/27
+f 3071/231/27 3045/237/27 3044/238/27
+f 3044/238/27 3072/236/27 3071/231/27
+f 3079/243/476 3080/246/476 3081/245/476
+f 3081/245/476 3082/244/476 3079/243/476
+f 3079/247/477 3083/250/477 3084/249/477
+f 3084/249/477 3080/248/477 3079/247/477
+f 3080/246/478 3084/252/478 3085/251/478
+f 3085/251/478 3081/245/478 3080/246/478
+f 3081/248/479 3085/249/479 3086/250/479
+f 3086/250/479 3082/247/479 3081/248/479
+f 3087/195/387 3088/198/387 3089/197/387
+f 3089/197/387 3090/196/387 3087/195/387
+f 3091/199/388 3092/202/388 3093/201/388
+f 3093/201/388 3094/200/388 3091/199/388
+f 3095/203/389 3096/206/389 3097/205/389
+f 3097/205/389 3098/204/389 3095/203/389
+f 3099/202/390 3100/199/390 3101/200/390
+f 3101/200/390 3102/201/390 3099/202/390
+f 3103/207/391 3104/209/391 3105/208/391
+f 3105/208/391 3106/207/391 3103/207/391
+f 3107/209/392 3108/211/392 3109/210/392
+f 3098/212/393 3097/214/393 3110/213/393
+f 3110/213/393 3111/196/393 3098/212/393
+f 3112/210/394 3113/211/394 3114/209/394
+f 3115/215/395 3114/209/395 3113/211/395
+f 3113/211/395 3116/216/395 3115/215/395
+f 3117/217/396 3090/196/396 3089/197/396
+f 3089/197/396 3118/218/396 3117/217/396
+f 3119/219/397 3095/203/397 3098/204/397
+f 3098/204/397 3120/220/397 3119/219/397
+f 3121/209/398 3103/207/398 3106/207/398
+f 3106/207/398 3122/208/398 3121/209/398
+f 3098/212/399 3111/196/399 3123/213/399
+f 3123/213/399 3120/214/399 3098/212/399
+f 3115/215/400 3116/216/400 3108/211/400
+f 3108/211/400 3107/209/400 3115/215/400
+f 3124/221/390 3088/221/390 3087/222/390
+f 3087/222/390 3110/222/390 3124/221/390
+f 3110/222/401 3087/222/401 3090/203/401
+f 3090/203/401 3111/203/401 3110/222/401
+f 3111/203/402 3090/203/402 3117/206/402
+f 3117/206/402 3123/206/402 3111/203/402
+f 3123/206/388 3117/206/388 3118/223/388
+f 3118/223/388 3125/223/388 3123/206/388
+f 3125/224/403 3118/224/403 3089/226/403
+f 3089/226/403 3126/225/403 3125/224/403
+f 3126/225/404 3089/226/404 3088/224/404
+f 3088/224/404 3124/224/404 3126/225/404
+f 3120/214/394 3123/213/394 3125/228/394
+f 3125/228/394 3127/227/394 3120/214/394
+f 3127/229/390 3128/221/390 3119/219/390
+f 3119/219/390 3120/220/390 3127/229/390
+f 3096/206/388 3129/223/388 3130/230/388
+f 3130/230/388 3097/205/388 3096/206/388
+f 3130/227/392 3124/228/392 3110/213/392
+f 3110/213/392 3097/214/392 3130/227/392
+f 3093/201/388 3131/202/388 3132/199/388
+f 3132/199/388 3094/200/388 3093/201/388
+f 3130/231/405 3109/233/405 3108/232/405
+f 3108/232/405 3124/224/405 3130/231/405
+f 3124/224/404 3108/232/404 3116/234/404
+f 3116/234/404 3126/225/404 3124/224/404
+f 3126/225/403 3116/234/403 3113/232/403
+f 3113/232/403 3125/224/403 3126/225/403
+f 3125/224/407 3113/232/407 3112/233/407
+f 3112/233/407 3127/231/407 3125/224/407
+f 3101/200/390 3133/199/390 3134/202/390
+f 3134/202/390 3102/201/390 3101/200/390
+f 3105/208/391 3114/236/391 3115/235/391
+f 3115/235/391 3106/207/391 3105/208/391
+f 3106/207/398 3115/235/398 3107/236/398
+f 3107/236/398 3122/208/398 3106/207/398
+f 3129/236/27 3091/238/27 3094/237/27
+f 3094/237/27 3130/231/27 3129/236/27
+f 3130/231/27 3094/237/27 3132/239/27
+f 3132/239/27 3109/233/27 3130/231/27
+f 3109/210/409 3132/241/409 3131/240/409
+f 3131/240/409 3107/209/409 3109/210/409
+f 3107/236/26 3131/238/26 3093/242/26
+f 3093/242/26 3122/208/26 3107/236/26
+f 3122/208/26 3093/242/26 3092/240/26
+f 3092/240/26 3121/209/26 3122/208/26
+f 3104/209/26 3099/240/26 3102/242/26
+f 3102/242/26 3105/208/26 3104/209/26
+f 3105/208/26 3102/242/26 3134/238/26
+f 3134/238/26 3114/236/26 3105/208/26
+f 3114/209/410 3134/240/410 3133/241/410
+f 3133/241/410 3112/210/410 3114/209/410
+f 3112/233/27 3133/239/27 3101/237/27
+f 3101/237/27 3127/231/27 3112/233/27
+f 3127/231/27 3101/237/27 3100/238/27
+f 3100/238/27 3128/236/27 3127/231/27
+f 3135/243/180 3136/246/180 3137/245/180
+f 3137/245/180 3138/244/180 3135/243/180
+f 3135/247/151 3139/250/151 3140/249/151
+f 3140/249/151 3136/248/151 3135/247/151
+f 3136/246/181 3140/252/181 3141/251/182
+f 3141/251/182 3137/245/181 3136/246/181
+f 3137/248/153 3141/249/153 3142/250/153
+f 3142/250/153 3138/247/153 3137/248/153
+f 3143/253/24 3144/256/24 3145/255/24
+f 3145/255/24 3146/254/24 3143/253/24
+f 3147/257/23 3148/258/23 3144/256/23
+f 3144/256/23 3143/253/23 3147/257/23
+f 3149/259/191 3150/260/22 3148/258/191
+f 3148/258/191 3147/257/191 3149/259/191
+f 3151/261/21 3152/264/21 3150/263/21
+f 3150/263/21 3149/262/21 3151/261/21
+f 3153/265/20 3154/266/20 3152/264/20
+f 3152/264/20 3151/261/20 3153/265/20
+f 3155/267/19 3156/268/19 3154/266/19
+f 3154/266/19 3153/265/19 3155/267/19
+f 3157/269/194 3158/270/194 3156/268/18
+f 3156/268/18 3155/267/18 3157/269/194
+f 3159/271/17 3160/272/17 3158/270/17
+f 3158/270/17 3157/269/17 3159/271/17
+f 3161/273/16 3162/274/16 3160/272/16
+f 3160/272/16 3159/271/16 3161/273/16
+f 3163/275/118 3164/276/118 3162/274/15
+f 3162/274/15 3161/273/118 3163/275/118
+f 3165/277/14 3166/278/14 3164/276/14
+f 3164/276/14 3163/275/14 3165/277/14
+f 3146/254/13 3145/255/13 3166/278/192
+f 3166/278/192 3165/277/192 3146/254/13
+f 3144/279/27 3167/282/27 3168/281/27
+f 3168/281/27 3145/280/27 3144/279/27
+f 3169/283/27 3170/284/27 3171/282/27
+f 3171/282/27 3172/279/27 3169/283/27
+f 3150/285/27 3173/285/27 3174/284/27
+f 3174/284/27 3148/283/27 3150/285/27
+f 3175/286/27 3176/287/27 3177/285/27
+f 3177/285/27 3178/285/27 3175/286/27
+f 3154/288/27 3179/289/27 3180/287/27
+f 3180/287/27 3152/286/27 3154/288/27
+f 3181/290/27 3182/291/27 3183/289/27
+f 3183/289/27 3184/288/27 3181/290/27
+f 3158/292/27 3185/293/27 3186/291/27
+f 3186/291/27 3156/290/27 3158/292/27
+f 3187/294/27 3188/295/27 3189/293/27
+f 3189/293/27 3190/292/27 3187/294/27
+f 3162/296/27 3191/297/27 3192/295/27
+f 3192/295/27 3160/294/27 3162/296/27
+f 3193/298/27 3194/299/27 3195/297/27
+f 3195/297/27 3196/296/27 3193/298/27
+f 3166/300/27 3197/300/27 3198/299/27
+f 3198/299/27 3164/298/27 3166/300/27
+f 3199/280/27 3200/281/27 3201/300/27
+f 3201/300/27 3202/300/27 3199/280/27
+f 3167/301/18 3203/304/18 3204/303/18
+f 3204/303/18 3168/302/18 3167/301/18
+f 3174/305/17 3205/306/17 3203/304/17
+f 3203/304/17 3167/301/17 3174/305/17
+f 3173/307/16 3206/308/16 3205/306/16
+f 3205/306/16 3174/305/16 3173/307/16
+f 3180/309/15 3207/310/15 3206/308/15
+f 3206/308/15 3173/307/15 3180/309/15
+f 3179/311/14 3208/312/14 3207/310/14
+f 3207/310/14 3180/309/14 3179/311/14
+f 3186/313/13 3209/314/13 3208/312/13
+f 3208/312/13 3179/311/13 3186/313/13
+f 3185/315/25 3210/316/25 3209/314/24
+f 3209/314/24 3186/313/24 3185/315/25
+f 3192/317/23 3211/318/23 3210/316/23
+f 3210/316/23 3185/315/23 3192/317/23
+f 3191/319/22 3212/320/22 3211/318/22
+f 3211/318/22 3192/317/22 3191/319/22
+f 3198/321/21 3213/324/21 3212/323/178
+f 3212/323/178 3191/322/21 3198/321/21
+f 3197/325/20 3214/326/20 3213/324/20
+f 3213/324/20 3198/321/20 3197/325/20
+f 3168/302/19 3204/303/19 3214/326/190
+f 3214/326/190 3197/325/190 3168/302/19
+f 3203/327/27 3215/329/27 3204/328/27
+f 3205/330/27 3215/329/27 3203/327/27
+f 3206/331/27 3215/329/27 3205/330/27
+f 3207/332/27 3215/329/27 3206/331/27
+f 3208/333/27 3215/329/27 3207/332/27
+f 3209/334/27 3215/329/27 3208/333/27
+f 3210/335/27 3215/329/27 3209/334/27
+f 3211/336/27 3215/329/27 3210/335/27
+f 3212/337/27 3215/329/27 3211/336/27
+f 3213/338/27 3215/329/27 3212/337/27
+f 3214/339/27 3215/329/27 3213/338/27
+f 3204/328/27 3215/329/27 3214/339/27
+f 3148/258/23 3169/341/23 3172/340/23
+f 3172/340/23 3144/256/23 3148/258/23
+f 3144/279/153 3172/279/153 3171/282/153
+f 3171/282/153 3167/282/153 3144/279/153
+f 3167/301/17 3171/343/17 3170/342/17
+f 3170/342/17 3174/305/17 3167/301/17
+f 3174/284/196 3170/284/196 3169/283/196
+f 3169/283/196 3148/283/196 3174/284/196
+f 3152/264/21 3175/345/21 3178/344/178
+f 3178/344/178 3150/263/21 3152/264/21
+f 3150/285/1 3178/285/1 3177/285/1
+f 3177/285/1 3173/285/1 3150/285/1
+f 3173/307/15 3177/347/15 3176/346/15
+f 3176/346/15 3180/309/15 3173/307/15
+f 3180/287/195 3176/287/195 3175/286/195
+f 3175/286/195 3152/286/195 3180/287/195
+f 3156/268/19 3181/349/19 3184/348/19
+f 3184/348/19 3154/266/19 3156/268/19
+f 3154/288/161 3184/288/161 3183/289/161
+f 3183/289/161 3179/289/161 3154/288/161
+f 3179/311/13 3183/351/13 3182/350/13
+f 3182/350/13 3186/313/13 3179/311/13
+f 3186/291/4 3182/291/4 3181/290/4
+f 3181/290/4 3156/290/4 3186/291/4
+f 3160/272/17 3187/353/17 3190/352/17
+f 3190/352/17 3158/270/17 3160/272/17
+f 3158/292/151 3190/292/151 3189/293/151
+f 3189/293/151 3185/293/151 3158/292/151
+f 3185/315/23 3189/355/23 3188/354/23
+f 3188/354/23 3192/317/23 3185/315/23
+f 3192/295/198 3188/295/198 3187/294/198
+f 3187/294/198 3160/294/198 3192/295/198
+f 3164/276/118 3193/357/15 3196/356/15
+f 3196/356/15 3162/274/15 3164/276/118
+f 3162/296/7 3196/296/7 3195/297/7
+f 3195/297/7 3191/297/7 3162/296/7
+f 3191/322/21 3195/359/21 3194/358/21
+f 3194/358/21 3198/321/21 3191/322/21
+f 3198/299/197 3194/299/197 3193/298/197
+f 3193/298/197 3164/298/197 3198/299/197
+f 3145/255/13 3199/361/13 3202/360/13
+f 3202/360/13 3166/278/192 3145/255/13
+f 3166/300/163 3202/300/163 3201/300/163
+f 3201/300/163 3197/300/163 3166/300/163
+f 3197/325/190 3201/363/190 3200/362/19
+f 3200/362/19 3168/302/19 3197/325/190
+f 3168/281/10 3200/281/10 3199/280/10
+f 3199/280/10 3145/280/10 3168/281/10
+f 3216/1/7 3217/2/8 3218/3/8
+f 3218/3/8 3219/4/7 3216/1/7
+f 3217/2/8 3220/5/9 3221/6/9
+f 3221/6/9 3218/3/8 3217/2/8
+f 3220/5/9 3222/7/10 3223/8/10
+f 3223/8/10 3221/6/9 3220/5/9
+f 3222/9/10 3224/10/11 3225/11/11
+f 3225/11/11 3223/12/10 3222/9/10
+f 3224/10/11 3226/13/12 3227/14/12
+f 3227/14/12 3225/11/11 3224/10/11
+f 3226/13/12 3228/15/1 3229/16/1
+f 3229/16/1 3227/14/12 3226/13/12
+f 3228/15/1 3230/17/2 3231/18/2
+f 3231/18/2 3229/16/1 3228/15/1
+f 3230/17/2 3232/19/3 3233/20/3
+f 3233/20/3 3231/18/2 3230/17/2
+f 3232/19/3 3234/21/4 3235/22/4
+f 3235/22/4 3233/20/3 3232/19/3
+f 3234/21/4 3236/23/5 3237/24/5
+f 3237/24/5 3235/22/4 3234/21/4
+f 3236/23/5 3238/25/6 3239/26/6
+f 3239/26/6 3237/24/5 3236/23/5
+f 3238/25/6 3216/1/7 3219/4/7
+f 3219/4/7 3239/26/6 3238/25/6
+f 3240/27/19 3241/28/19 3242/29/19
+f 3242/29/19 3243/30/19 3240/27/19
+f 3244/31/20 3240/27/20 3243/30/20
+f 3243/30/20 3245/32/20 3244/31/20
+f 3246/33/21 3244/31/21 3245/32/21
+f 3245/32/21 3247/34/21 3246/33/21
+f 3248/35/22 3246/36/22 3247/37/22
+f 3247/37/22 3249/38/22 3248/35/22
+f 3250/39/23 3248/35/23 3249/38/23
+f 3249/38/23 3251/40/23 3250/39/23
+f 3252/41/24 3250/39/24 3251/40/24
+f 3251/40/24 3253/42/24 3252/41/24
+f 3254/43/13 3252/41/13 3253/42/13
+f 3253/42/13 3255/44/13 3254/43/13
+f 3256/45/14 3254/43/14 3255/44/14
+f 3255/44/14 3257/46/14 3256/45/14
+f 3258/47/15 3256/45/15 3257/46/15
+f 3257/46/15 3259/48/15 3258/47/15
+f 3260/49/16 3258/47/16 3259/48/16
+f 3259/48/16 3261/50/16 3260/49/16
+f 3262/51/17 3260/49/17 3261/50/17
+f 3261/50/17 3263/52/17 3262/51/17
+f 3241/28/18 3262/51/194 3263/52/18
+f 3263/52/18 3242/29/18 3241/28/18
+f 3217/53/26 3216/54/26 3241/54/26
+f 3241/54/26 3240/53/26 3217/53/26
+f 3216/54/26 3238/55/26 3262/55/26
+f 3262/55/26 3241/54/26 3216/54/26
+f 3238/55/26 3236/56/26 3260/56/26
+f 3260/56/26 3262/55/26 3238/55/26
+f 3236/56/26 3234/57/26 3258/57/26
+f 3258/57/26 3260/56/26 3236/56/26
+f 3234/57/26 3232/58/26 3256/59/26
+f 3256/59/26 3258/57/26 3234/57/26
+f 3232/58/26 3230/60/26 3254/61/26
+f 3254/61/26 3256/59/26 3232/58/26
+f 3230/60/26 3228/62/26 3252/62/26
+f 3252/62/26 3254/61/26 3230/60/26
+f 3228/62/26 3226/63/26 3250/64/26
+f 3250/64/26 3252/62/26 3228/62/26
+f 3226/63/26 3224/65/26 3248/66/26
+f 3248/66/26 3250/64/26 3226/63/26
+f 3224/65/26 3222/67/26 3246/67/26
+f 3246/67/26 3248/66/26 3224/65/26
+f 3222/67/26 3220/68/26 3244/68/26
+f 3244/68/26 3246/67/26 3222/67/26
+f 3220/68/26 3217/53/26 3240/53/26
+f 3240/53/26 3244/68/26 3220/68/26
+f 3264/54/27 3265/53/27 3243/53/27
+f 3243/53/27 3242/54/27 3264/54/27
+f 3265/53/27 3266/68/27 3245/68/27
+f 3245/68/27 3243/53/27 3265/53/27
+f 3266/68/27 3267/67/27 3247/67/27
+f 3247/67/27 3245/68/27 3266/68/27
+f 3267/67/27 3268/65/27 3249/66/27
+f 3249/66/27 3247/67/27 3267/67/27
+f 3268/65/27 3269/63/27 3251/64/27
+f 3251/64/27 3249/66/27 3268/65/27
+f 3269/63/27 3270/62/27 3253/62/27
+f 3253/62/27 3251/64/27 3269/63/27
+f 3270/62/27 3271/60/27 3255/61/27
+f 3255/61/27 3253/62/27 3270/62/27
+f 3271/60/27 3272/58/27 3257/59/27
+f 3257/59/27 3255/61/27 3271/60/27
+f 3272/58/27 3273/57/27 3259/57/27
+f 3259/57/27 3257/59/27 3272/58/27
+f 3273/57/27 3274/56/27 3261/56/27
+f 3261/56/27 3259/57/27 3273/57/27
+f 3274/56/27 3275/55/27 3263/55/27
+f 3263/55/27 3261/56/27 3274/56/27
+f 3275/55/27 3264/54/27 3242/54/27
+f 3242/54/27 3263/55/27 3275/55/27
+f 3264/69/7 3276/70/7 3277/71/8
+f 3277/71/8 3265/72/8 3264/69/7
+f 3265/72/8 3277/71/8 3278/73/20
+f 3278/73/20 3266/74/20 3265/72/8
+f 3266/74/21 3278/73/21 3279/75/21
+f 3279/75/21 3267/76/21 3266/74/21
+f 3267/76/22 3279/75/22 3280/77/11
+f 3280/77/11 3268/78/11 3267/76/22
+f 3268/78/11 3280/77/11 3281/79/12
+f 3281/79/12 3269/80/12 3268/78/11
+f 3269/81/12 3281/82/12 3282/83/1
+f 3282/83/1 3270/84/1 3269/81/12
+f 3270/84/1 3282/83/1 3283/85/2
+f 3283/85/2 3271/86/2 3270/84/1
+f 3271/86/2 3283/85/2 3284/87/3
+f 3284/87/3 3272/88/3 3271/86/2
+f 3272/88/3 3284/87/3 3285/89/4
+f 3285/89/4 3273/90/4 3272/88/3
+f 3273/90/4 3285/89/4 3286/91/5
+f 3286/91/5 3274/92/5 3273/90/4
+f 3274/92/5 3286/91/5 3287/93/6
+f 3287/93/6 3275/94/6 3274/92/5
+f 3275/94/6 3287/93/6 3276/70/7
+f 3276/70/7 3264/69/7 3275/94/6
+f 3288/95/26 3289/96/26 3290/96/26
+f 3290/96/26 3291/95/26 3288/95/26
+f 3292/97/26 3288/95/26 3291/95/26
+f 3291/95/26 3293/97/26 3292/97/26
+f 3294/67/26 3292/97/26 3293/97/26
+f 3293/97/26 3295/98/26 3294/67/26
+f 3296/99/26 3294/67/26 3295/98/26
+f 3295/98/26 3297/99/26 3296/99/26
+f 3298/100/26 3296/99/26 3297/99/26
+f 3297/99/26 3299/100/26 3298/100/26
+f 3300/101/26 3298/100/26 3299/100/26
+f 3299/100/26 3301/101/26 3300/101/26
+f 3302/61/26 3300/101/26 3301/101/26
+f 3301/101/26 3303/61/26 3302/61/26
+f 3304/59/26 3302/61/26 3303/61/26
+f 3303/61/26 3305/102/26 3304/59/26
+f 3306/103/26 3304/59/26 3305/102/26
+f 3305/102/26 3307/103/26 3306/103/26
+f 3308/104/26 3306/103/26 3307/103/26
+f 3307/103/26 3309/105/26 3308/104/26
+f 3310/106/26 3308/104/26 3309/105/26
+f 3309/105/26 3311/106/26 3310/106/26
+f 3289/96/26 3310/106/26 3311/106/26
+f 3311/106/26 3290/96/26 3289/96/26
+f 3291/107/34 3290/108/34 3312/109/34
+f 3312/109/34 3313/110/34 3291/107/34
+f 3293/111/35 3291/107/35 3313/110/35
+f 3313/110/35 3314/112/35 3293/111/35
+f 3295/113/36 3293/111/36 3314/112/36
+f 3314/112/36 3315/114/36 3295/113/36
+f 3297/115/37 3295/113/37 3315/114/37
+f 3315/114/37 3316/116/37 3297/115/37
+f 3299/117/38 3297/115/38 3316/116/38
+f 3316/116/38 3317/118/38 3299/117/38
+f 3301/119/39 3299/117/39 3317/118/39
+f 3317/118/39 3318/120/39 3301/119/39
+f 3303/121/28 3301/119/28 3318/120/28
+f 3318/120/28 3319/122/28 3303/121/28
+f 3305/123/29 3303/121/29 3319/122/29
+f 3319/122/29 3320/124/29 3305/123/29
+f 3307/125/30 3305/123/30 3320/124/30
+f 3320/124/30 3321/126/30 3307/125/30
+f 3309/127/31 3307/128/31 3321/129/31
+f 3321/129/31 3322/130/31 3309/127/31
+f 3311/131/32 3309/127/32 3322/130/32
+f 3322/130/32 3323/132/32 3311/131/32
+f 3290/108/33 3311/131/33 3323/132/33
+f 3323/132/33 3312/109/33 3290/108/33
+f 3313/110/48 3312/109/48 3324/133/48
+f 3324/133/48 3325/134/48 3313/110/48
+f 3314/112/49 3313/110/49 3325/134/49
+f 3325/134/49 3326/135/49 3314/112/49
+f 3315/114/50 3314/112/50 3326/135/50
+f 3326/135/50 3327/136/50 3315/114/50
+f 3316/116/51 3315/114/51 3327/136/52
+f 3327/136/52 3328/137/51 3316/116/51
+f 3317/118/53 3316/116/53 3328/137/53
+f 3328/137/53 3329/138/53 3317/118/53
+f 3318/120/54 3317/118/54 3329/138/54
+f 3329/138/54 3330/139/54 3318/120/54
+f 3319/122/386 3318/120/40 3330/139/40
+f 3330/139/40 3331/140/40 3319/122/386
+f 3320/124/41 3319/122/41 3331/140/41
+f 3331/140/41 3332/141/41 3320/124/41
+f 3321/126/42 3320/124/42 3332/141/42
+f 3332/141/42 3333/142/43 3321/126/42
+f 3322/130/44 3321/129/44 3333/143/44
+f 3333/143/44 3334/144/44 3322/130/44
+f 3323/132/45 3322/130/45 3334/144/45
+f 3334/144/45 3335/145/45 3323/132/45
+f 3312/109/46 3323/132/385 3335/145/46
+f 3335/145/46 3324/133/46 3312/109/46
+f 3336/146/64 3337/147/64 3277/148/64
+f 3277/148/64 3276/149/64 3336/146/64
+f 3337/147/66 3338/150/66 3278/151/65
+f 3278/151/65 3277/148/65 3337/147/66
+f 3338/152/67 3339/153/67 3279/154/67
+f 3279/154/67 3278/155/67 3338/152/67
+f 3339/153/68 3340/142/68 3280/156/68
+f 3280/156/68 3279/154/68 3339/153/68
+f 3340/142/70 3341/157/70 3281/158/69
+f 3281/158/69 3280/156/69 3340/142/70
+f 3341/157/71 3342/159/71 3282/160/71
+f 3282/160/71 3281/158/71 3341/157/71
+f 3342/159/56 3343/161/56 3283/162/56
+f 3283/162/56 3282/160/56 3342/159/56
+f 3343/161/57 3344/163/57 3284/164/58
+f 3284/164/58 3283/162/58 3343/161/57
+f 3344/163/59 3345/165/59 3285/166/59
+f 3285/166/59 3284/164/59 3344/163/59
+f 3345/165/60 3346/167/60 3286/168/60
+f 3286/168/60 3285/166/60 3345/165/60
+f 3346/167/61 3347/169/61 3287/170/61
+f 3287/170/61 3286/168/62 3346/167/61
+f 3347/169/63 3336/146/63 3276/149/63
+f 3276/149/63 3287/170/63 3347/169/63
+f 3289/171/7 3288/172/8 3337/173/8
+f 3337/173/8 3336/174/7 3289/171/7
+f 3288/172/8 3292/175/9 3338/176/9
+f 3338/176/9 3337/173/8 3288/172/8
+f 3292/177/9 3294/178/10 3339/179/10
+f 3339/179/10 3338/180/9 3292/177/9
+f 3294/178/10 3296/86/11 3340/181/11
+f 3340/181/11 3339/179/10 3294/178/10
+f 3296/86/11 3298/182/12 3341/183/12
+f 3341/183/12 3340/181/11 3296/86/11
+f 3298/182/12 3300/184/1 3342/185/1
+f 3342/185/1 3341/183/12 3298/182/12
+f 3300/184/1 3302/186/2 3343/187/2
+f 3343/187/2 3342/185/1 3300/184/1
+f 3302/186/2 3304/188/3 3344/189/3
+f 3344/189/3 3343/187/2 3302/186/2
+f 3304/188/3 3306/190/4 3345/191/4
+f 3345/191/4 3344/189/3 3304/188/3
+f 3306/190/4 3308/76/5 3346/192/5
+f 3346/192/5 3345/191/4 3306/190/4
+f 3308/76/5 3310/193/6 3347/194/6
+f 3347/194/6 3346/192/5 3308/76/5
+f 3310/193/6 3289/171/7 3336/174/7
+f 3336/174/7 3347/194/6 3310/193/6
+f 3348/195/131 3349/196/131 3350/197/131
+f 3350/197/131 3351/198/131 3348/195/131
+f 3352/199/75 3353/200/75 3354/201/75
+f 3354/201/75 3355/202/75 3352/199/75
+f 3356/203/132 3357/204/132 3358/205/132
+f 3358/205/132 3359/206/132 3356/203/132
+f 3360/202/73 3361/201/73 3362/200/73
+f 3362/200/73 3363/199/73 3360/202/73
+f 3364/207/83 3365/207/83 3366/208/83
+f 3366/208/83 3367/209/83 3364/207/83
+f 3368/209/133 3369/210/133 3370/211/133
+f 3357/212/134 3371/196/134 3372/213/134
+f 3372/213/134 3358/214/134 3357/212/134
+f 3373/210/135 3374/209/135 3375/211/135
+f 3376/215/136 3377/216/136 3375/211/136
+f 3375/211/136 3374/209/136 3376/215/136
+f 3378/217/137 3379/218/137 3350/197/137
+f 3350/197/137 3349/196/137 3378/217/137
+f 3380/219/139 3381/220/139 3357/204/139
+f 3357/204/139 3356/203/139 3380/219/139
+f 3382/209/76 3383/208/76 3365/207/76
+f 3365/207/76 3364/207/76 3382/209/76
+f 3357/212/140 3381/214/140 3384/213/140
+f 3384/213/140 3371/196/140 3357/212/140
+f 3376/215/141 3368/209/141 3370/211/141
+f 3370/211/141 3377/216/141 3376/215/141
+f 3385/221/73 3372/222/73 3348/222/73
+f 3348/222/73 3351/221/73 3385/221/73
+f 3372/222/87 3371/203/87 3349/203/87
+f 3349/203/87 3348/222/87 3372/222/87
+f 3371/203/86 3384/206/86 3378/206/86
+f 3378/206/86 3349/203/86 3371/203/86
+f 3384/206/75 3386/223/75 3379/223/75
+f 3379/223/75 3378/206/75 3384/206/75
+f 3386/224/142 3387/225/142 3350/226/142
+f 3350/226/142 3379/224/142 3386/224/142
+f 3387/225/143 3385/224/143 3351/224/143
+f 3351/224/143 3350/226/143 3387/225/143
+f 3381/214/135 3388/227/135 3386/228/135
+f 3386/228/135 3384/213/135 3381/214/135
+f 3388/229/73 3381/220/73 3380/219/73
+f 3380/219/73 3389/221/73 3388/229/73
+f 3359/206/75 3358/205/75 3390/230/75
+f 3390/230/75 3391/223/75 3359/206/75
+f 3390/227/133 3358/214/133 3372/213/133
+f 3372/213/133 3385/228/133 3390/227/133
+f 3354/201/75 3353/200/75 3392/199/75
+f 3392/199/75 3393/202/75 3354/201/75
+f 3390/231/144 3385/224/144 3370/232/144
+f 3370/232/144 3369/233/144 3390/231/144
+f 3385/224/143 3387/225/143 3377/234/143
+f 3377/234/143 3370/232/143 3385/224/143
+f 3387/225/142 3386/224/142 3375/232/142
+f 3375/232/142 3377/234/142 3387/225/142
+f 3386/224/145 3388/231/145 3373/233/145
+f 3373/233/145 3375/232/145 3386/224/145
+f 3362/200/73 3361/201/73 3394/202/73
+f 3394/202/73 3395/199/73 3362/200/73
+f 3366/208/83 3365/207/83 3376/235/83
+f 3376/235/83 3374/236/83 3366/208/83
+f 3365/207/76 3383/208/76 3368/236/76
+f 3368/236/76 3376/235/76 3365/207/76
+f 3391/236/27 3390/231/27 3353/237/27
+f 3353/237/27 3352/238/27 3391/236/27
+f 3390/231/27 3369/233/27 3392/239/27
+f 3392/239/27 3353/237/27 3390/231/27
+f 3369/210/480 3368/209/480 3393/240/480
+f 3393/240/480 3392/241/480 3369/210/480
+f 3368/236/26 3383/208/26 3354/242/26
+f 3354/242/26 3393/238/26 3368/236/26
+f 3383/208/26 3382/209/26 3355/240/26
+f 3355/240/26 3354/242/26 3383/208/26
+f 3367/209/26 3366/208/26 3361/242/26
+f 3361/242/26 3360/240/26 3367/209/26
+f 3366/208/26 3374/236/26 3394/238/26
+f 3394/238/26 3361/242/26 3366/208/26
+f 3374/209/147 3373/210/147 3395/241/147
+f 3395/241/147 3394/240/147 3374/209/147
+f 3373/233/27 3388/231/27 3362/237/27
+f 3362/237/27 3395/239/27 3373/233/27
+f 3388/231/27 3389/236/27 3363/238/27
+f 3363/238/27 3362/237/27 3388/231/27
+f 3396/195/10 3397/196/10 3398/197/10
+f 3398/197/10 3399/198/10 3396/195/10
+f 3400/199/101 3401/200/100 3402/201/100
+f 3402/201/100 3403/202/101 3400/199/101
+f 3404/203/108 3405/204/108 3406/205/108
+f 3406/205/108 3407/206/108 3404/203/108
+f 3408/202/98 3409/201/97 3410/200/97
+f 3410/200/97 3411/199/98 3408/202/98
+f 3412/207/166 3413/207/166 3414/208/166
+f 3414/208/166 3415/209/166 3412/207/166
+f 3416/209/167 3417/210/167 3418/211/167
+f 3405/212/168 3419/196/168 3420/213/168
+f 3420/213/168 3406/214/168 3405/212/168
+f 3421/210/169 3422/209/169 3423/211/169
+f 3424/215/170 3425/216/170 3423/211/170
+f 3423/211/170 3422/209/170 3424/215/170
+f 3426/217/171 3427/218/171 3398/197/171
+f 3398/197/171 3397/196/171 3426/217/171
+f 3428/219/99 3429/220/99 3405/204/99
+f 3405/204/99 3404/203/99 3428/219/99
+f 3430/209/173 3431/208/173 3413/207/173
+f 3413/207/173 3412/207/173 3430/209/173
+f 3405/212/174 3429/214/174 3432/213/174
+f 3432/213/174 3419/196/174 3405/212/174
+f 3424/215/175 3416/209/175 3418/211/175
+f 3418/211/175 3425/216/175 3424/215/175
+f 3433/221/98 3420/222/98 3396/222/97
+f 3396/222/97 3399/221/97 3433/221/98
+f 3420/222/113 3419/203/113 3397/203/113
+f 3397/203/113 3396/222/113 3420/222/113
+f 3419/203/112 3432/206/112 3426/206/112
+f 3426/206/112 3397/203/112 3419/203/112
+f 3432/206/100 3434/223/100 3427/223/100
+f 3427/223/100 3426/206/100 3432/206/100
+f 3434/224/176 3435/225/176 3398/226/176
+f 3398/226/176 3427/224/176 3434/224/176
+f 3435/225/117 3433/224/117 3399/224/117
+f 3399/224/117 3398/226/117 3435/225/117
+f 3429/214/169 3436/227/169 3434/228/169
+f 3434/228/169 3432/213/169 3429/214/169
+f 3436/229/98 3429/220/98 3428/219/98
+f 3428/219/98 3437/221/98 3436/229/98
+f 3407/206/100 3406/205/100 3438/230/100
+f 3438/230/100 3439/223/100 3407/206/100
+f 3438/227/167 3406/214/167 3420/213/167
+f 3420/213/167 3433/228/167 3438/227/167
+f 3402/201/100 3401/200/100 3440/199/101
+f 3440/199/101 3441/202/101 3402/201/100
+f 3438/231/481 3433/224/481 3418/232/481
+f 3418/232/481 3417/233/481 3438/231/481
+f 3433/224/117 3435/225/117 3425/234/117
+f 3425/234/117 3418/232/117 3433/224/117
+f 3435/225/176 3434/224/176 3423/232/176
+f 3423/232/176 3425/234/176 3435/225/176
+f 3434/224/115 3436/231/115 3421/233/115
+f 3421/233/115 3423/232/115 3434/224/115
+f 3410/200/97 3409/201/97 3442/202/98
+f 3442/202/98 3443/199/98 3410/200/97
+f 3414/208/166 3413/207/166 3424/235/166
+f 3424/235/166 3422/236/166 3414/208/166
+f 3413/207/173 3431/208/173 3416/236/173
+f 3416/236/173 3424/235/173 3413/207/173
+f 3439/236/27 3438/231/27 3401/237/27
+f 3401/237/27 3400/238/27 3439/236/27
+f 3438/231/27 3417/233/27 3440/239/27
+f 3440/239/27 3401/237/27 3438/231/27
+f 3417/210/178 3416/209/178 3441/240/178
+f 3441/240/178 3440/241/178 3417/210/178
+f 3416/236/26 3431/208/26 3402/242/26
+f 3402/242/26 3441/238/26 3416/236/26
+f 3431/208/26 3430/209/26 3403/240/26
+f 3403/240/26 3402/242/26 3431/208/26
+f 3415/209/26 3414/208/26 3409/242/26
+f 3409/242/26 3408/240/26 3415/209/26
+f 3414/208/26 3422/236/26 3442/238/26
+f 3442/238/26 3409/242/26 3414/208/26
+f 3422/209/179 3421/210/179 3443/241/179
+f 3443/241/179 3442/240/179 3422/209/179
+f 3421/233/27 3436/231/27 3410/237/27
+f 3410/237/27 3443/239/27 3421/233/27
+f 3436/231/27 3437/236/27 3411/238/27
+f 3411/238/27 3410/237/27 3436/231/27
+f 3444/243/183 3445/244/183 3446/245/183
+f 3446/245/183 3447/246/183 3444/243/183
+f 3444/247/184 3447/248/184 3448/249/184
+f 3448/249/184 3449/250/184 3444/247/184
+f 3447/246/185 3446/245/185 3450/251/185
+f 3450/251/185 3448/252/185 3447/246/185
+f 3446/248/186 3445/247/186 3451/250/186
+f 3451/250/186 3450/249/186 3446/248/186
+f 3452/195/164 3453/196/164 3454/197/164
+f 3454/197/164 3455/198/164 3452/195/164
+f 3456/199/101 3457/200/100 3458/201/100
+f 3458/201/100 3459/202/101 3456/199/101
+f 3460/203/108 3461/204/108 3462/205/108
+f 3462/205/108 3463/206/108 3460/203/108
+f 3464/202/98 3465/201/97 3466/200/97
+f 3466/200/97 3467/199/98 3464/202/98
+f 3468/207/166 3469/207/166 3470/208/166
+f 3470/208/166 3471/209/166 3468/207/166
+f 3472/209/167 3473/210/167 3474/211/167
+f 3461/212/168 3475/196/168 3476/213/168
+f 3476/213/168 3462/214/168 3461/212/168
+f 3477/210/169 3478/209/169 3479/211/169
+f 3480/215/170 3481/216/170 3479/211/170
+f 3479/211/170 3478/209/170 3480/215/170
+f 3482/217/171 3483/218/171 3454/197/171
+f 3454/197/171 3453/196/171 3482/217/171
+f 3484/219/172 3485/220/172 3461/204/99
+f 3461/204/99 3460/203/99 3484/219/172
+f 3486/209/173 3487/208/173 3469/207/173
+f 3469/207/173 3468/207/173 3486/209/173
+f 3461/212/174 3485/214/174 3488/213/174
+f 3488/213/174 3475/196/174 3461/212/174
+f 3480/215/175 3472/209/175 3474/211/175
+f 3474/211/175 3481/216/175 3480/215/175
+f 3489/221/98 3476/222/98 3452/222/98
+f 3452/222/98 3455/221/98 3489/221/98
+f 3476/222/113 3475/203/113 3453/203/113
+f 3453/203/113 3452/222/113 3476/222/113
+f 3475/203/112 3488/206/112 3482/206/112
+f 3482/206/112 3453/203/112 3475/203/112
+f 3488/206/100 3490/223/100 3483/223/100
+f 3483/223/100 3482/206/100 3488/206/100
+f 3490/224/176 3491/225/176 3454/226/176
+f 3454/226/176 3483/224/176 3490/224/176
+f 3491/225/117 3489/224/117 3455/224/117
+f 3455/224/117 3454/226/117 3491/225/117
+f 3485/214/169 3492/227/169 3490/228/169
+f 3490/228/169 3488/213/169 3485/214/169
+f 3492/229/125 3485/220/125 3484/219/97
+f 3484/219/97 3493/221/97 3492/229/125
+f 3463/206/100 3462/205/101 3494/230/101
+f 3494/230/101 3495/223/100 3463/206/100
+f 3494/227/167 3462/214/167 3476/213/167
+f 3476/213/167 3489/228/167 3494/227/167
+f 3458/201/100 3457/200/100 3496/199/101
+f 3496/199/101 3497/202/101 3458/201/100
+f 3494/231/481 3489/224/481 3474/232/481
+f 3474/232/481 3473/233/481 3494/231/481
+f 3489/224/117 3491/225/117 3481/234/117
+f 3481/234/117 3474/232/117 3489/224/117
+f 3491/225/176 3490/224/176 3479/232/176
+f 3479/232/176 3481/234/176 3491/225/176
+f 3490/224/115 3492/231/115 3477/233/115
+f 3477/233/115 3479/232/115 3490/224/115
+f 3466/200/97 3465/201/97 3498/202/98
+f 3498/202/98 3499/199/98 3466/200/97
+f 3470/208/166 3469/207/166 3480/235/166
+f 3480/235/166 3478/236/166 3470/208/166
+f 3469/207/173 3487/208/173 3472/236/173
+f 3472/236/173 3480/235/173 3469/207/173
+f 3495/236/27 3494/231/27 3457/237/27
+f 3457/237/27 3456/238/27 3495/236/27
+f 3494/231/27 3473/233/27 3496/239/27
+f 3496/239/27 3457/237/27 3494/231/27
+f 3473/210/178 3472/209/178 3497/240/178
+f 3497/240/178 3496/241/178 3473/210/178
+f 3472/236/26 3487/208/26 3458/242/26
+f 3458/242/26 3497/238/26 3472/236/26
+f 3487/208/26 3486/209/26 3459/240/26
+f 3459/240/26 3458/242/26 3487/208/26
+f 3471/209/26 3470/208/26 3465/242/26
+f 3465/242/26 3464/240/26 3471/209/26
+f 3470/208/26 3478/236/26 3498/238/26
+f 3498/238/26 3465/242/26 3470/208/26
+f 3478/209/179 3477/210/179 3499/241/179
+f 3499/241/179 3498/240/179 3478/209/179
+f 3477/233/27 3492/231/27 3466/237/27
+f 3466/237/27 3499/239/27 3477/233/27
+f 3492/231/27 3493/236/27 3467/238/27
+f 3467/238/27 3466/237/27 3492/231/27
+f 3500/243/156 3501/244/156 3502/245/156
+f 3502/245/156 3503/246/156 3500/243/156
+f 3500/247/157 3503/248/157 3504/249/157
+f 3504/249/157 3505/250/157 3500/247/157
+f 3503/246/158 3502/245/158 3506/251/158
+f 3506/251/158 3504/252/158 3503/246/158
+f 3502/248/159 3501/247/159 3507/250/159
+f 3507/250/159 3506/249/159 3502/248/159
+f 3508/195/72 3509/196/72 3510/197/72
+f 3510/197/72 3511/198/72 3508/195/72
+f 3512/199/73 3513/200/73 3514/201/73
+f 3514/201/73 3515/202/73 3512/199/73
+f 3516/203/74 3517/204/74 3518/205/74
+f 3518/205/74 3519/206/74 3516/203/74
+f 3520/202/75 3521/201/75 3522/200/75
+f 3522/200/75 3523/199/75 3520/202/75
+f 3524/207/76 3525/207/76 3526/208/76
+f 3526/208/76 3527/209/76 3524/207/76
+f 3528/209/77 3529/210/77 3530/211/77
+f 3517/212/78 3531/196/78 3532/213/78
+f 3532/213/78 3518/214/78 3517/212/78
+f 3533/210/79 3534/209/79 3535/211/79
+f 3536/215/80 3537/216/80 3535/211/80
+f 3535/211/80 3534/209/80 3536/215/80
+f 3538/217/81 3539/218/81 3510/197/482
+f 3510/197/482 3509/196/482 3538/217/81
+f 3540/219/82 3541/220/82 3517/204/82
+f 3517/204/82 3516/203/82 3540/219/82
+f 3542/209/83 3543/208/83 3525/207/83
+f 3525/207/83 3524/207/83 3542/209/83
+f 3517/212/84 3541/214/84 3544/213/84
+f 3544/213/84 3531/196/84 3517/212/84
+f 3536/215/85 3528/209/85 3530/211/85
+f 3530/211/85 3537/216/85 3536/215/85
+f 3545/221/75 3532/222/75 3508/222/75
+f 3508/222/75 3511/221/75 3545/221/75
+f 3532/222/86 3531/203/86 3509/203/86
+f 3509/203/86 3508/222/86 3532/222/86
+f 3531/203/87 3544/206/87 3538/206/87
+f 3538/206/87 3509/203/87 3531/203/87
+f 3544/206/73 3546/223/73 3539/223/73
+f 3539/223/73 3538/206/73 3544/206/73
+f 3546/224/88 3547/225/88 3510/226/88
+f 3510/226/88 3539/224/88 3546/224/88
+f 3547/225/89 3545/224/89 3511/224/89
+f 3511/224/89 3510/226/89 3547/225/89
+f 3541/214/79 3548/227/79 3546/228/79
+f 3546/228/79 3544/213/79 3541/214/79
+f 3548/229/75 3541/220/75 3540/219/75
+f 3540/219/75 3549/221/75 3548/229/75
+f 3519/206/73 3518/205/73 3550/230/73
+f 3550/230/73 3551/223/73 3519/206/73
+f 3550/227/77 3518/214/77 3532/213/77
+f 3532/213/77 3545/228/77 3550/227/77
+f 3514/201/73 3513/200/73 3552/199/73
+f 3552/199/73 3553/202/73 3514/201/73
+f 3550/231/90 3545/224/90 3530/232/90
+f 3530/232/90 3529/233/90 3550/231/90
+f 3545/224/89 3547/225/89 3537/234/89
+f 3537/234/89 3530/232/89 3545/224/89
+f 3547/225/88 3546/224/88 3535/232/88
+f 3535/232/88 3537/234/88 3547/225/88
+f 3546/224/92 3548/231/92 3533/233/92
+f 3533/233/92 3535/232/92 3546/224/92
+f 3522/200/75 3521/201/75 3554/202/75
+f 3554/202/75 3555/199/75 3522/200/75
+f 3526/208/76 3525/207/76 3536/235/76
+f 3536/235/76 3534/236/76 3526/208/76
+f 3525/207/83 3543/208/83 3528/236/83
+f 3528/236/83 3536/235/83 3525/207/83
+f 3551/236/27 3550/231/27 3513/237/27
+f 3513/237/27 3512/238/27 3551/236/27
+f 3550/231/27 3529/233/27 3552/239/27
+f 3552/239/27 3513/237/27 3550/231/27
+f 3529/210/94 3528/209/94 3553/240/94
+f 3553/240/94 3552/241/94 3529/210/94
+f 3528/236/26 3543/208/26 3514/242/26
+f 3514/242/26 3553/238/26 3528/236/26
+f 3543/208/26 3542/209/26 3515/240/26
+f 3515/240/26 3514/242/26 3543/208/26
+f 3527/209/26 3526/208/26 3521/242/26
+f 3521/242/26 3520/240/26 3527/209/26
+f 3526/208/26 3534/236/26 3554/238/26
+f 3554/238/26 3521/242/26 3526/208/26
+f 3534/209/95 3533/210/95 3555/241/95
+f 3555/241/95 3554/240/95 3534/209/95
+f 3533/233/27 3548/231/27 3522/237/27
+f 3522/237/27 3555/239/27 3533/233/27
+f 3548/231/27 3549/236/27 3523/238/27
+f 3523/238/27 3522/237/27 3548/231/27
+f 3556/243/154 3557/244/154 3558/245/154
+f 3558/245/154 3559/246/154 3556/243/154
+f 3556/247/7 3559/248/7 3560/249/7
+f 3560/249/7 3561/250/7 3556/247/7
+f 3559/246/155 3558/245/155 3562/251/155
+f 3562/251/155 3560/252/155 3559/246/155
+f 3558/248/1 3557/247/1 3563/250/1
+f 3563/250/1 3562/249/1 3558/248/1
+f 3564/243/180 3565/244/180 3566/245/180
+f 3566/245/180 3567/246/180 3564/243/180
+f 3564/247/153 3567/248/153 3568/249/153
+f 3568/249/153 3569/250/153 3564/247/153
+f 3567/246/181 3566/245/181 3570/251/181
+f 3570/251/181 3568/252/181 3567/246/181
+f 3566/248/151 3565/247/151 3571/250/151
+f 3571/250/151 3570/249/151 3566/248/151
+f 3572/243/148 3573/244/148 3574/245/148
+f 3574/245/148 3575/246/148 3572/243/148
+f 3572/247/1 3575/248/1 3576/249/1
+f 3576/249/1 3577/250/1 3572/247/1
+f 3575/246/149 3574/245/149 3578/251/149
+f 3578/251/149 3576/252/149 3575/246/149
+f 3574/248/7 3573/247/7 3579/250/7
+f 3579/250/7 3578/249/7 3574/248/7
+f 3580/243/127 3581/244/127 3582/245/127
+f 3582/245/127 3583/246/127 3580/243/127
+f 3580/247/128 3583/248/128 3584/249/128
+f 3584/249/128 3585/250/128 3580/247/128
+f 3583/246/129 3582/245/129 3586/251/129
+f 3586/251/129 3584/252/129 3583/246/129
+f 3582/248/130 3581/247/130 3587/250/130
+f 3587/250/130 3586/249/130 3582/248/130
+f 3588/243/187 3589/244/187 3590/245/187
+f 3590/245/187 3591/246/187 3588/243/187
+f 3588/247/163 3591/248/163 3592/249/163
+f 3592/249/163 3593/250/163 3588/247/163
+f 3591/246/188 3590/245/188 3594/251/188
+f 3594/251/188 3592/252/188 3591/246/188
+f 3590/248/161 3589/247/161 3595/250/161
+f 3595/250/161 3594/249/161 3590/248/161
+f 3596/195/72 3597/196/72 3598/197/72
+f 3598/197/72 3599/198/72 3596/195/72
+f 3600/199/73 3601/200/73 3602/201/73
+f 3602/201/73 3603/202/73 3600/199/73
+f 3604/203/74 3605/204/74 3606/205/74
+f 3606/205/74 3607/206/74 3604/203/74
+f 3608/202/75 3609/201/75 3610/200/75
+f 3610/200/75 3611/199/75 3608/202/75
+f 3612/207/76 3613/207/76 3614/208/76
+f 3614/208/76 3615/209/76 3612/207/76
+f 3616/209/77 3617/210/77 3618/211/77
+f 3605/212/78 3619/196/78 3620/213/78
+f 3620/213/78 3606/214/78 3605/212/78
+f 3621/210/79 3622/209/79 3623/211/79
+f 3624/215/80 3625/216/80 3623/211/80
+f 3623/211/80 3622/209/80 3624/215/80
+f 3626/217/81 3627/218/81 3598/197/482
+f 3598/197/482 3597/196/482 3626/217/81
+f 3628/219/82 3629/220/82 3605/204/82
+f 3605/204/82 3604/203/82 3628/219/82
+f 3630/209/83 3631/208/83 3613/207/83
+f 3613/207/83 3612/207/83 3630/209/83
+f 3605/212/84 3629/214/84 3632/213/84
+f 3632/213/84 3619/196/84 3605/212/84
+f 3624/215/85 3616/209/85 3618/211/85
+f 3618/211/85 3625/216/85 3624/215/85
+f 3633/221/75 3620/222/75 3596/222/75
+f 3596/222/75 3599/221/75 3633/221/75
+f 3620/222/86 3619/203/86 3597/203/86
+f 3597/203/86 3596/222/86 3620/222/86
+f 3619/203/87 3632/206/87 3626/206/87
+f 3626/206/87 3597/203/87 3619/203/87
+f 3632/206/73 3634/223/73 3627/223/73
+f 3627/223/73 3626/206/73 3632/206/73
+f 3634/224/88 3635/225/88 3598/226/88
+f 3598/226/88 3627/224/88 3634/224/88
+f 3635/225/89 3633/224/89 3599/224/89
+f 3599/224/89 3598/226/89 3635/225/89
+f 3629/214/79 3636/227/79 3634/228/79
+f 3634/228/79 3632/213/79 3629/214/79
+f 3636/229/75 3629/220/75 3628/219/75
+f 3628/219/75 3637/221/75 3636/229/75
+f 3607/206/73 3606/205/73 3638/230/73
+f 3638/230/73 3639/223/73 3607/206/73
+f 3638/227/77 3606/214/77 3620/213/77
+f 3620/213/77 3633/228/77 3638/227/77
+f 3602/201/73 3601/200/73 3640/199/73
+f 3640/199/73 3641/202/73 3602/201/73
+f 3638/231/90 3633/224/90 3618/232/90
+f 3618/232/90 3617/233/90 3638/231/90
+f 3633/224/89 3635/225/89 3625/234/89
+f 3625/234/89 3618/232/89 3633/224/89
+f 3635/225/88 3634/224/88 3623/232/88
+f 3623/232/88 3625/234/88 3635/225/88
+f 3634/224/92 3636/231/92 3621/233/92
+f 3621/233/92 3623/232/92 3634/224/92
+f 3610/200/75 3609/201/75 3642/202/75
+f 3642/202/75 3643/199/75 3610/200/75
+f 3614/208/76 3613/207/76 3624/235/76
+f 3624/235/76 3622/236/76 3614/208/76
+f 3613/207/83 3631/208/83 3616/236/83
+f 3616/236/83 3624/235/83 3613/207/83
+f 3639/236/27 3638/231/27 3601/237/27
+f 3601/237/27 3600/238/27 3639/236/27
+f 3638/231/27 3617/233/27 3640/239/27
+f 3640/239/27 3601/237/27 3638/231/27
+f 3617/210/94 3616/209/94 3641/240/94
+f 3641/240/94 3640/241/94 3617/210/94
+f 3616/236/26 3631/208/26 3602/242/26
+f 3602/242/26 3641/238/26 3616/236/26
+f 3631/208/26 3630/209/26 3603/240/26
+f 3603/240/26 3602/242/26 3631/208/26
+f 3615/209/26 3614/208/26 3609/242/26
+f 3609/242/26 3608/240/26 3615/209/26
+f 3614/208/26 3622/236/26 3642/238/26
+f 3642/238/26 3609/242/26 3614/208/26
+f 3622/209/95 3621/210/95 3643/241/95
+f 3643/241/95 3642/240/95 3622/209/95
+f 3621/233/27 3636/231/27 3610/237/27
+f 3610/237/27 3643/239/27 3621/233/27
+f 3636/231/27 3637/236/27 3611/238/27
+f 3611/238/27 3610/237/27 3636/231/27
+f 3644/195/124 3645/196/96 3646/197/96
+f 3646/197/96 3647/198/124 3644/195/124
+f 3648/199/125 3649/200/125 3650/201/125
+f 3650/201/125 3651/202/125 3648/199/125
+f 3652/203/99 3653/204/99 3654/205/99
+f 3654/205/99 3655/206/99 3652/203/99
+f 3656/202/165 3657/201/165 3658/200/165
+f 3658/200/165 3659/199/165 3656/202/165
+f 3660/207/102 3661/207/102 3662/208/102
+f 3662/208/102 3663/209/102 3660/207/102
+f 3664/209/103 3665/210/103 3666/211/103
+f 3653/212/104 3667/196/104 3668/213/104
+f 3668/213/104 3654/214/104 3653/212/104
+f 3669/210/105 3670/209/105 3671/211/105
+f 3672/215/106 3673/216/106 3671/211/106
+f 3671/211/106 3670/209/106 3672/215/106
+f 3674/217/107 3675/218/107 3646/197/107
+f 3646/197/107 3645/196/107 3674/217/107
+f 3676/219/126 3677/220/108 3653/204/108
+f 3653/204/108 3652/203/108 3676/219/126
+f 3678/209/109 3679/208/109 3661/207/109
+f 3661/207/109 3660/207/109 3678/209/109
+f 3653/212/110 3677/214/110 3680/213/110
+f 3680/213/110 3667/196/110 3653/212/110
+f 3672/215/111 3664/209/111 3666/211/111
+f 3666/211/111 3673/216/111 3672/215/111
+f 3681/221/165 3668/222/165 3644/222/165
+f 3644/222/165 3647/221/165 3681/221/165
+f 3668/222/112 3667/203/112 3645/203/112
+f 3645/203/112 3644/222/112 3668/222/112
+f 3667/203/113 3680/206/113 3674/206/113
+f 3674/206/113 3645/203/113 3667/203/113
+f 3680/206/125 3682/223/125 3675/223/125
+f 3675/223/125 3674/206/125 3680/206/125
+f 3682/224/114 3683/225/114 3646/226/114
+f 3646/226/114 3675/224/114 3682/224/114
+f 3683/225/115 3681/224/115 3647/224/115
+f 3647/224/115 3646/226/115 3683/225/115
+f 3677/214/105 3684/227/105 3682/228/105
+f 3682/228/105 3680/213/105 3677/214/105
+f 3684/229/165 3677/220/165 3676/219/165
+f 3676/219/165 3685/221/165 3684/229/165
+f 3655/206/125 3654/205/125 3686/230/125
+f 3686/230/125 3687/223/125 3655/206/125
+f 3686/227/103 3654/214/103 3668/213/103
+f 3668/213/103 3681/228/103 3686/227/103
+f 3650/201/125 3649/200/125 3688/199/125
+f 3688/199/125 3689/202/125 3650/201/125
+f 3686/231/483 3681/224/483 3666/232/483
+f 3666/232/483 3665/233/483 3686/231/483
+f 3681/224/115 3683/225/115 3673/234/115
+f 3673/234/115 3666/232/115 3681/224/115
+f 3683/225/114 3682/224/114 3671/232/114
+f 3671/232/114 3673/234/114 3683/225/114
+f 3682/224/117 3684/231/117 3669/233/117
+f 3669/233/117 3671/232/117 3682/224/117
+f 3658/200/165 3657/201/165 3690/202/165
+f 3690/202/165 3691/199/165 3658/200/165
+f 3662/208/102 3661/207/102 3672/235/102
+f 3672/235/102 3670/236/102 3662/208/102
+f 3661/207/109 3679/208/109 3664/236/109
+f 3664/236/109 3672/235/109 3661/207/109
+f 3687/236/27 3686/231/27 3649/237/27
+f 3649/237/27 3648/238/27 3687/236/27
+f 3686/231/27 3665/233/27 3688/239/27
+f 3688/239/27 3649/237/27 3686/231/27
+f 3665/210/118 3664/209/118 3689/240/118
+f 3689/240/118 3688/241/118 3665/210/118
+f 3664/236/26 3679/208/26 3650/242/26
+f 3650/242/26 3689/238/26 3664/236/26
+f 3679/208/26 3678/209/26 3651/240/26
+f 3651/240/26 3650/242/26 3679/208/26
+f 3663/209/26 3662/208/26 3657/242/26
+f 3657/242/26 3656/240/26 3663/209/26
+f 3662/208/26 3670/236/26 3690/238/26
+f 3690/238/26 3657/242/26 3662/208/26
+f 3670/209/119 3669/210/119 3691/241/119
+f 3691/241/119 3690/240/119 3670/209/119
+f 3669/233/27 3684/231/27 3658/237/27
+f 3658/237/27 3691/239/27 3669/233/27
+f 3684/231/27 3685/236/27 3659/238/27
+f 3659/238/27 3658/237/27 3684/231/27
+f 3692/243/150 3693/244/150 3694/245/150
+f 3694/245/150 3695/246/150 3692/243/150
+f 3692/247/151 3695/248/151 3696/249/151
+f 3696/249/151 3697/250/151 3692/247/151
+f 3695/246/152 3694/245/152 3698/251/152
+f 3698/251/152 3696/252/152 3695/246/152
+f 3694/248/153 3693/247/153 3699/250/153
+f 3699/250/153 3698/249/153 3694/248/153
+f 3700/195/96 3701/196/124 3702/197/124
+f 3702/197/124 3703/198/96 3700/195/96
+f 3704/199/125 3705/200/125 3706/201/125
+f 3706/201/125 3707/202/125 3704/199/125
+f 3708/203/99 3709/204/99 3710/205/99
+f 3710/205/99 3711/206/99 3708/203/99
+f 3712/202/165 3713/201/165 3714/200/165
+f 3714/200/165 3715/199/165 3712/202/165
+f 3716/207/102 3717/207/102 3718/208/102
+f 3718/208/102 3719/209/102 3716/207/102
+f 3720/209/103 3721/210/103 3722/211/103
+f 3709/212/104 3723/196/104 3724/213/104
+f 3724/213/104 3710/214/104 3709/212/104
+f 3725/210/105 3726/209/105 3727/211/105
+f 3728/215/106 3729/216/106 3727/211/106
+f 3727/211/106 3726/209/106 3728/215/106
+f 3730/217/107 3731/218/107 3702/197/107
+f 3702/197/107 3701/196/107 3730/217/107
+f 3732/219/108 3733/220/108 3709/204/126
+f 3709/204/126 3708/203/108 3732/219/108
+f 3734/209/109 3735/208/109 3717/207/109
+f 3717/207/109 3716/207/109 3734/209/109
+f 3709/212/110 3733/214/110 3736/213/110
+f 3736/213/110 3723/196/110 3709/212/110
+f 3728/215/111 3720/209/111 3722/211/111
+f 3722/211/111 3729/216/111 3728/215/111
+f 3737/221/165 3724/222/165 3700/222/165
+f 3700/222/165 3703/221/165 3737/221/165
+f 3724/222/112 3723/203/112 3701/203/112
+f 3701/203/112 3700/222/112 3724/222/112
+f 3723/203/113 3736/206/113 3730/206/113
+f 3730/206/113 3701/203/113 3723/203/113
+f 3736/206/125 3738/223/125 3731/223/125
+f 3731/223/125 3730/206/125 3736/206/125
+f 3738/224/114 3739/225/114 3702/226/114
+f 3702/226/114 3731/224/114 3738/224/114
+f 3739/225/115 3737/224/115 3703/224/115
+f 3703/224/115 3702/226/115 3739/225/115
+f 3733/214/105 3740/227/105 3738/228/105
+f 3738/228/105 3736/213/105 3733/214/105
+f 3740/229/165 3733/220/165 3732/219/165
+f 3732/219/165 3741/221/165 3740/229/165
+f 3711/206/125 3710/205/125 3742/230/125
+f 3742/230/125 3743/223/125 3711/206/125
+f 3742/227/103 3710/214/103 3724/213/103
+f 3724/213/103 3737/228/103 3742/227/103
+f 3706/201/125 3705/200/125 3744/199/125
+f 3744/199/125 3745/202/125 3706/201/125
+f 3742/231/483 3737/224/483 3722/232/483
+f 3722/232/483 3721/233/483 3742/231/483
+f 3737/224/115 3739/225/115 3729/234/115
+f 3729/234/115 3722/232/115 3737/224/115
+f 3739/225/114 3738/224/114 3727/232/114
+f 3727/232/114 3729/234/114 3739/225/114
+f 3738/224/117 3740/231/117 3725/233/117
+f 3725/233/117 3727/232/117 3738/224/117
+f 3714/200/165 3713/201/165 3746/202/165
+f 3746/202/165 3747/199/165 3714/200/165
+f 3718/208/102 3717/207/102 3728/235/102
+f 3728/235/102 3726/236/102 3718/208/102
+f 3717/207/109 3735/208/109 3720/236/109
+f 3720/236/109 3728/235/109 3717/207/109
+f 3743/236/27 3742/231/27 3705/237/27
+f 3705/237/27 3704/238/27 3743/236/27
+f 3742/231/27 3721/233/27 3744/239/27
+f 3744/239/27 3705/237/27 3742/231/27
+f 3721/210/118 3720/209/118 3745/240/118
+f 3745/240/118 3744/241/118 3721/210/118
+f 3720/236/26 3735/208/26 3706/242/26
+f 3706/242/26 3745/238/26 3720/236/26
+f 3735/208/26 3734/209/26 3707/240/26
+f 3707/240/26 3706/242/26 3735/208/26
+f 3719/209/26 3718/208/26 3713/242/26
+f 3713/242/26 3712/240/26 3719/209/26
+f 3718/208/26 3726/236/26 3746/238/26
+f 3746/238/26 3713/242/26 3718/208/26
+f 3726/209/119 3725/210/119 3747/241/119
+f 3747/241/119 3746/240/119 3726/209/119
+f 3725/233/27 3740/231/27 3714/237/27
+f 3714/237/27 3747/239/27 3725/233/27
+f 3740/231/27 3741/236/27 3715/238/27
+f 3715/238/27 3714/237/27 3740/231/27
+f 3748/243/120 3749/244/120 3750/245/120
+f 3750/245/120 3751/246/120 3748/243/120
+f 3748/247/121 3751/248/121 3752/249/121
+f 3752/249/121 3753/250/121 3748/247/121
+f 3751/246/122 3750/245/122 3754/251/122
+f 3754/251/122 3752/252/122 3751/246/122
+f 3750/248/123 3749/247/123 3755/250/123
+f 3755/250/123 3754/249/123 3750/248/123
+f 3756/195/131 3757/196/131 3758/197/131
+f 3758/197/131 3759/198/131 3756/195/131
+f 3760/199/75 3761/200/75 3762/201/75
+f 3762/201/75 3763/202/75 3760/199/75
+f 3764/203/132 3765/204/132 3766/205/132
+f 3766/205/132 3767/206/132 3764/203/132
+f 3768/202/73 3769/201/73 3770/200/73
+f 3770/200/73 3771/199/73 3768/202/73
+f 3772/207/83 3773/207/83 3774/208/83
+f 3774/208/83 3775/209/83 3772/207/83
+f 3776/209/133 3777/210/133 3778/211/133
+f 3765/212/134 3779/196/134 3780/213/134
+f 3780/213/134 3766/214/134 3765/212/134
+f 3781/210/135 3782/209/135 3783/211/135
+f 3784/215/136 3785/216/136 3783/211/136
+f 3783/211/136 3782/209/136 3784/215/136
+f 3786/217/137 3787/218/137 3758/197/137
+f 3758/197/137 3757/196/137 3786/217/137
+f 3788/219/139 3789/220/139 3765/204/139
+f 3765/204/139 3764/203/139 3788/219/139
+f 3790/209/76 3791/208/76 3773/207/76
+f 3773/207/76 3772/207/76 3790/209/76
+f 3765/212/140 3789/214/140 3792/213/140
+f 3792/213/140 3779/196/140 3765/212/140
+f 3784/215/141 3776/209/141 3778/211/141
+f 3778/211/141 3785/216/141 3784/215/141
+f 3793/221/73 3780/222/73 3756/222/73
+f 3756/222/73 3759/221/73 3793/221/73
+f 3780/222/87 3779/203/87 3757/203/87
+f 3757/203/87 3756/222/87 3780/222/87
+f 3779/203/86 3792/206/86 3786/206/86
+f 3786/206/86 3757/203/86 3779/203/86
+f 3792/206/75 3794/223/75 3787/223/75
+f 3787/223/75 3786/206/75 3792/206/75
+f 3794/224/142 3795/225/142 3758/226/142
+f 3758/226/142 3787/224/142 3794/224/142
+f 3795/225/143 3793/224/143 3759/224/143
+f 3759/224/143 3758/226/143 3795/225/143
+f 3789/214/135 3796/227/135 3794/228/135
+f 3794/228/135 3792/213/135 3789/214/135
+f 3796/229/73 3789/220/73 3788/219/73
+f 3788/219/73 3797/221/73 3796/229/73
+f 3767/206/75 3766/205/75 3798/230/75
+f 3798/230/75 3799/223/75 3767/206/75
+f 3798/227/133 3766/214/133 3780/213/133
+f 3780/213/133 3793/228/133 3798/227/133
+f 3762/201/75 3761/200/75 3800/199/75
+f 3800/199/75 3801/202/75 3762/201/75
+f 3798/231/144 3793/224/144 3778/232/144
+f 3778/232/144 3777/233/144 3798/231/144
+f 3793/224/143 3795/225/143 3785/234/143
+f 3785/234/143 3778/232/143 3793/224/143
+f 3795/225/142 3794/224/142 3783/232/142
+f 3783/232/142 3785/234/142 3795/225/142
+f 3794/224/145 3796/231/145 3781/233/145
+f 3781/233/145 3783/232/145 3794/224/145
+f 3770/200/73 3769/201/73 3802/202/73
+f 3802/202/73 3803/199/73 3770/200/73
+f 3774/208/83 3773/207/83 3784/235/83
+f 3784/235/83 3782/236/83 3774/208/83
+f 3773/207/76 3791/208/76 3776/236/76
+f 3776/236/76 3784/235/76 3773/207/76
+f 3799/236/27 3798/231/27 3761/237/27
+f 3761/237/27 3760/238/27 3799/236/27
+f 3798/231/27 3777/233/27 3800/239/27
+f 3800/239/27 3761/237/27 3798/231/27
+f 3777/210/480 3776/209/480 3801/240/480
+f 3801/240/480 3800/241/480 3777/210/480
+f 3776/236/26 3791/208/26 3762/242/26
+f 3762/242/26 3801/238/26 3776/236/26
+f 3791/208/26 3790/209/26 3763/240/26
+f 3763/240/26 3762/242/26 3791/208/26
+f 3775/209/26 3774/208/26 3769/242/26
+f 3769/242/26 3768/240/26 3775/209/26
+f 3774/208/26 3782/236/26 3802/238/26
+f 3802/238/26 3769/242/26 3774/208/26
+f 3782/209/147 3781/210/147 3803/241/147
+f 3803/241/147 3802/240/147 3782/209/147
+f 3781/233/27 3796/231/27 3770/237/27
+f 3770/237/27 3803/239/27 3781/233/27
+f 3796/231/27 3797/236/27 3771/238/27
+f 3771/238/27 3770/237/27 3796/231/27
+f 3804/243/160 3805/244/160 3806/245/160
+f 3806/245/160 3807/246/160 3804/243/160
+f 3804/247/161 3807/248/161 3808/249/161
+f 3808/249/161 3809/250/161 3804/247/161
+f 3807/246/162 3806/245/162 3810/251/162
+f 3810/251/162 3808/252/162 3807/246/162
+f 3806/248/163 3805/247/163 3811/250/163
+f 3811/250/163 3810/249/163 3806/248/163
+f 3812/253/19 3813/254/19 3814/255/19
+f 3814/255/19 3815/256/19 3812/253/19
+f 3816/257/20 3812/253/20 3815/256/20
+f 3815/256/20 3817/258/20 3816/257/20
+f 3818/259/21 3816/257/21 3817/258/21
+f 3817/258/21 3819/260/21 3818/259/21
+f 3820/261/22 3818/262/191 3819/263/22
+f 3819/263/22 3821/264/22 3820/261/22
+f 3822/265/23 3820/261/23 3821/264/23
+f 3821/264/23 3823/266/23 3822/265/23
+f 3824/267/24 3822/265/24 3823/266/24
+f 3823/266/24 3825/268/24 3824/267/24
+f 3826/269/192 3824/267/13 3825/268/13
+f 3825/268/13 3827/270/192 3826/269/192
+f 3828/271/14 3826/269/14 3827/270/14
+f 3827/270/14 3829/272/14 3828/271/14
+f 3830/273/118 3828/271/15 3829/272/15
+f 3829/272/15 3831/274/15 3830/273/118
+f 3832/275/16 3830/273/16 3831/274/16
+f 3831/274/16 3833/276/16 3832/275/16
+f 3834/277/17 3832/275/17 3833/276/17
+f 3833/276/17 3835/278/17 3834/277/17
+f 3813/254/18 3834/277/194 3835/278/194
+f 3835/278/194 3814/255/18 3813/254/18
+f 3815/279/27 3814/280/27 3836/281/27
+f 3836/281/27 3837/282/27 3815/279/27
+f 3838/283/27 3839/279/27 3840/282/27
+f 3840/282/27 3841/284/27 3838/283/27
+f 3819/285/27 3817/283/27 3842/284/27
+f 3842/284/27 3843/285/27 3819/285/27
+f 3844/286/27 3845/285/27 3846/285/27
+f 3846/285/27 3847/287/27 3844/286/27
+f 3823/288/27 3821/286/27 3848/287/27
+f 3848/287/27 3849/289/27 3823/288/27
+f 3850/290/27 3851/288/27 3852/289/27
+f 3852/289/27 3853/291/27 3850/290/27
+f 3827/292/27 3825/290/27 3854/291/27
+f 3854/291/27 3855/293/27 3827/292/27
+f 3856/294/27 3857/292/27 3858/293/27
+f 3858/293/27 3859/295/27 3856/294/27
+f 3831/296/27 3829/294/27 3860/295/27
+f 3860/295/27 3861/297/27 3831/296/27
+f 3862/298/27 3863/296/27 3864/297/27
+f 3864/297/27 3865/299/27 3862/298/27
+f 3835/300/27 3833/298/27 3866/299/27
+f 3866/299/27 3867/300/27 3835/300/27
+f 3868/280/27 3869/300/27 3870/300/27
+f 3870/300/27 3871/281/27 3868/280/27
+f 3837/301/13 3836/302/13 3872/303/13
+f 3872/303/13 3873/304/13 3837/301/13
+f 3842/305/14 3837/301/14 3873/304/14
+f 3873/304/14 3874/306/14 3842/305/14
+f 3843/307/15 3842/305/118 3874/306/15
+f 3874/306/15 3875/308/15 3843/307/15
+f 3848/309/16 3843/307/16 3875/308/16
+f 3875/308/16 3876/310/16 3848/309/16
+f 3849/311/17 3848/309/17 3876/310/17
+f 3876/310/17 3877/312/17 3849/311/17
+f 3854/313/18 3849/311/18 3877/312/18
+f 3877/312/18 3878/314/18 3854/313/18
+f 3855/315/190 3854/313/19 3878/314/19
+f 3878/314/19 3879/316/190 3855/315/190
+f 3860/317/20 3855/315/20 3879/316/20
+f 3879/316/20 3880/318/20 3860/317/20
+f 3861/319/21 3860/317/21 3880/318/21
+f 3880/318/21 3881/320/21 3861/319/21
+f 3866/321/191 3861/322/22 3881/323/22
+f 3881/323/22 3882/324/22 3866/321/191
+f 3867/325/23 3866/321/23 3882/324/23
+f 3882/324/23 3883/326/23 3867/325/23
+f 3836/302/24 3867/325/25 3883/326/25
+f 3883/326/25 3872/303/24 3836/302/24
+f 3873/327/27 3872/328/27 3884/329/27
+f 3874/330/27 3873/327/27 3884/329/27
+f 3875/331/27 3874/330/27 3884/329/27
+f 3876/332/27 3875/331/27 3884/329/27
+f 3877/333/27 3876/332/27 3884/329/27
+f 3878/334/27 3877/333/27 3884/329/27
+f 3879/335/27 3878/334/27 3884/329/27
+f 3880/336/27 3879/335/27 3884/329/27
+f 3881/337/27 3880/336/27 3884/329/27
+f 3882/338/27 3881/337/27 3884/329/27
+f 3883/339/27 3882/338/27 3884/329/27
+f 3872/328/27 3883/339/27 3884/329/27
+f 3817/258/20 3815/256/20 3839/340/20
+f 3839/340/20 3838/341/20 3817/258/20
+f 3815/279/163 3837/282/163 3840/282/163
+f 3840/282/163 3839/279/163 3815/279/163
+f 3837/301/14 3842/305/14 3841/342/14
+f 3841/342/14 3840/343/14 3837/301/14
+f 3842/284/197 3817/283/197 3838/283/197
+f 3838/283/197 3841/284/197 3842/284/197
+f 3821/264/22 3819/263/22 3845/344/22
+f 3845/344/22 3844/345/22 3821/264/22
+f 3819/285/7 3843/285/7 3846/285/7
+f 3846/285/7 3845/285/7 3819/285/7
+f 3843/307/16 3848/309/16 3847/346/16
+f 3847/346/16 3846/347/16 3843/307/16
+f 3848/287/198 3821/286/198 3844/286/198
+f 3844/286/198 3847/287/198 3848/287/198
+f 3825/268/24 3823/266/24 3851/348/24
+f 3851/348/24 3850/349/24 3825/268/24
+f 3823/288/151 3849/289/151 3852/289/151
+f 3852/289/151 3851/288/151 3823/288/151
+f 3849/311/18 3854/313/18 3853/350/18
+f 3853/350/18 3852/351/18 3849/311/18
+f 3854/291/4 3825/290/4 3850/290/4
+f 3850/290/4 3853/291/4 3854/291/4
+f 3829/272/14 3827/270/14 3857/352/14
+f 3857/352/14 3856/353/14 3829/272/14
+f 3827/292/161 3855/293/161 3858/293/161
+f 3858/293/161 3857/292/161 3827/292/161
+f 3855/315/20 3860/317/20 3859/354/20
+f 3859/354/20 3858/355/20 3855/315/20
+f 3860/295/195 3829/294/195 3856/294/195
+f 3856/294/195 3859/295/195 3860/295/195
+f 3833/276/16 3831/274/16 3863/356/193
+f 3863/356/193 3862/357/16 3833/276/16
+f 3831/296/1 3861/297/1 3864/297/1
+f 3864/297/1 3863/296/1 3831/296/1
+f 3861/322/22 3866/321/191 3865/358/22
+f 3865/358/22 3864/359/22 3861/322/22
+f 3866/299/196 3833/298/196 3862/298/196
+f 3862/298/196 3865/299/196 3866/299/196
+f 3814/255/18 3835/278/194 3869/360/18
+f 3869/360/18 3868/361/18 3814/255/18
+f 3835/300/153 3867/300/153 3870/300/153
+f 3870/300/153 3869/300/153 3835/300/153
+f 3867/325/25 3836/302/24 3871/362/24
+f 3871/362/24 3870/363/25 3867/325/25
+f 3836/281/10 3814/280/10 3868/280/10
+f 3868/280/10 3871/281/10 3836/281/10
+f 3885/3/6 3886/2/6 3887/1/7
+f 3887/1/7 3888/4/7 3885/3/6
+f 3889/6/5 3890/5/5 3886/2/6
+f 3886/2/6 3885/3/6 3889/6/5
+f 3891/8/4 3892/7/4 3890/5/5
+f 3890/5/5 3889/6/5 3891/8/4
+f 3893/11/3 3894/10/3 3892/9/4
+f 3892/9/4 3891/12/4 3893/11/3
+f 3895/14/2 3896/13/2 3894/10/3
+f 3894/10/3 3893/11/3 3895/14/2
+f 3897/16/1 3898/15/1 3896/13/2
+f 3896/13/2 3895/14/2 3897/16/1
+f 3899/18/12 3900/17/12 3898/15/1
+f 3898/15/1 3897/16/1 3899/18/12
+f 3901/20/11 3902/19/11 3900/17/12
+f 3900/17/12 3899/18/12 3901/20/11
+f 3903/22/10 3904/21/10 3902/19/11
+f 3902/19/11 3901/20/11 3903/22/10
+f 3905/24/9 3906/23/9 3904/21/10
+f 3904/21/10 3903/22/10 3905/24/9
+f 3907/26/8 3908/25/8 3906/23/9
+f 3906/23/9 3905/24/9 3907/26/8
+f 3888/4/7 3887/1/7 3908/25/8
+f 3908/25/8 3907/26/8 3888/4/7
+f 3909/27/18 3910/30/18 3911/29/18
+f 3911/29/18 3912/28/18 3909/27/18
+f 3913/31/17 3914/32/17 3910/30/17
+f 3910/30/17 3909/27/17 3913/31/17
+f 3915/33/16 3916/34/16 3914/32/16
+f 3914/32/16 3913/31/16 3915/33/16
+f 3917/35/15 3918/38/15 3916/37/15
+f 3916/37/15 3915/36/15 3917/35/15
+f 3919/39/14 3920/40/14 3918/38/14
+f 3918/38/14 3917/35/14 3919/39/14
+f 3921/41/13 3922/42/13 3920/40/13
+f 3920/40/13 3919/39/13 3921/41/13
+f 3923/43/24 3924/44/24 3922/42/24
+f 3922/42/24 3921/41/24 3923/43/24
+f 3925/45/23 3926/46/23 3924/44/23
+f 3924/44/23 3923/43/23 3925/45/23
+f 3927/47/22 3928/48/22 3926/46/22
+f 3926/46/22 3925/45/22 3927/47/22
+f 3929/49/21 3930/50/21 3928/48/21
+f 3928/48/21 3927/47/21 3929/49/21
+f 3931/51/20 3932/52/20 3930/50/20
+f 3930/50/20 3929/49/20 3931/51/20
+f 3912/28/19 3911/29/19 3932/52/19
+f 3932/52/19 3931/51/190 3912/28/19
+f 3886/53/26 3909/53/26 3912/54/26
+f 3912/54/26 3887/54/26 3886/53/26
+f 3887/54/26 3912/54/26 3931/55/26
+f 3931/55/26 3908/55/26 3887/54/26
+f 3908/55/26 3931/55/26 3929/56/26
+f 3929/56/26 3906/56/26 3908/55/26
+f 3906/56/26 3929/56/26 3927/57/26
+f 3927/57/26 3904/57/26 3906/56/26
+f 3904/57/26 3927/57/26 3925/59/26
+f 3925/59/26 3902/58/26 3904/57/26
+f 3902/58/26 3925/59/26 3923/61/26
+f 3923/61/26 3900/60/26 3902/58/26
+f 3900/60/26 3923/61/26 3921/62/26
+f 3921/62/26 3898/62/26 3900/60/26
+f 3898/62/26 3921/62/26 3919/64/26
+f 3919/64/26 3896/63/26 3898/62/26
+f 3896/63/26 3919/64/26 3917/66/26
+f 3917/66/26 3894/65/26 3896/63/26
+f 3894/65/26 3917/66/26 3915/67/26
+f 3915/67/26 3892/67/26 3894/65/26
+f 3892/67/26 3915/67/26 3913/68/26
+f 3913/68/26 3890/68/26 3892/67/26
+f 3890/68/26 3913/68/26 3909/53/26
+f 3909/53/26 3886/53/26 3890/68/26
+f 3933/54/27 3911/54/27 3910/53/27
+f 3910/53/27 3934/53/27 3933/54/27
+f 3934/53/27 3910/53/27 3914/68/27
+f 3914/68/27 3935/68/27 3934/53/27
+f 3935/68/27 3914/68/27 3916/67/27
+f 3916/67/27 3936/67/27 3935/68/27
+f 3936/67/27 3916/67/27 3918/66/27
+f 3918/66/27 3937/65/27 3936/67/27
+f 3937/65/27 3918/66/27 3920/64/27
+f 3920/64/27 3938/63/27 3937/65/27
+f 3938/63/27 3920/64/27 3922/62/27
+f 3922/62/27 3939/62/27 3938/63/27
+f 3939/62/27 3922/62/27 3924/61/27
+f 3924/61/27 3940/60/27 3939/62/27
+f 3940/60/27 3924/61/27 3926/59/27
+f 3926/59/27 3941/58/27 3940/60/27
+f 3941/58/27 3926/59/27 3928/57/27
+f 3928/57/27 3942/57/27 3941/58/27
+f 3942/57/27 3928/57/27 3930/56/27
+f 3930/56/27 3943/56/27 3942/57/27
+f 3943/56/27 3930/56/27 3932/55/27
+f 3932/55/27 3944/55/27 3943/56/27
+f 3944/55/27 3932/55/27 3911/54/27
+f 3911/54/27 3933/54/27 3944/55/27
+f 3945/71/6 3946/70/7 3933/69/7
+f 3933/69/7 3934/72/6 3945/71/6
+f 3947/73/17 3945/71/6 3934/72/6
+f 3934/72/6 3935/74/17 3947/73/17
+f 3948/75/16 3947/73/16 3935/74/16
+f 3935/74/16 3936/76/16 3948/75/16
+f 3949/77/3 3948/75/15 3936/76/15
+f 3936/76/15 3937/78/3 3949/77/3
+f 3950/79/2 3949/77/3 3937/78/3
+f 3937/78/3 3938/80/2 3950/79/2
+f 3951/83/1 3950/82/2 3938/81/2
+f 3938/81/2 3939/84/1 3951/83/1
+f 3952/85/12 3951/83/1 3939/84/1
+f 3939/84/1 3940/86/12 3952/85/12
+f 3953/87/11 3952/85/12 3940/86/12
+f 3940/86/12 3941/88/11 3953/87/11
+f 3954/89/10 3953/87/11 3941/88/11
+f 3941/88/11 3942/90/10 3954/89/10
+f 3955/91/9 3954/89/10 3942/90/10
+f 3942/90/10 3943/92/9 3955/91/9
+f 3956/93/8 3955/91/9 3943/92/9
+f 3943/92/9 3944/94/8 3956/93/8
+f 3946/70/7 3956/93/8 3944/94/8
+f 3944/94/8 3933/69/7 3946/70/7
+f 3957/95/26 3958/95/26 3959/96/26
+f 3959/96/26 3960/96/26 3957/95/26
+f 3961/97/26 3962/97/26 3958/95/26
+f 3958/95/26 3957/95/26 3961/97/26
+f 3963/67/26 3964/98/26 3962/97/26
+f 3962/97/26 3961/97/26 3963/67/26
+f 3965/99/26 3966/99/26 3964/98/26
+f 3964/98/26 3963/67/26 3965/99/26
+f 3967/100/26 3968/100/26 3966/99/26
+f 3966/99/26 3965/99/26 3967/100/26
+f 3969/101/26 3970/101/26 3968/100/26
+f 3968/100/26 3967/100/26 3969/101/26
+f 3971/61/26 3972/61/26 3970/101/26
+f 3970/101/26 3969/101/26 3971/61/26
+f 3973/59/26 3974/102/26 3972/61/26
+f 3972/61/26 3971/61/26 3973/59/26
+f 3975/103/26 3976/103/26 3974/102/26
+f 3974/102/26 3973/59/26 3975/103/26
+f 3977/104/26 3978/105/26 3976/103/26
+f 3976/103/26 3975/103/26 3977/104/26
+f 3979/106/26 3980/106/26 3978/105/26
+f 3978/105/26 3977/104/26 3979/106/26
+f 3960/96/26 3959/96/26 3980/106/26
+f 3980/106/26 3979/106/26 3960/96/26
+f 3958/107/33 3981/110/33 3982/109/33
+f 3982/109/33 3959/108/33 3958/107/33
+f 3962/111/32 3983/112/32 3981/110/32
+f 3981/110/32 3958/107/32 3962/111/32
+f 3964/113/31 3984/114/31 3983/112/31
+f 3983/112/31 3962/111/31 3964/113/31
+f 3966/115/30 3985/116/30 3984/114/30
+f 3984/114/30 3964/113/30 3966/115/30
+f 3968/117/29 3986/118/29 3985/116/29
+f 3985/116/29 3966/115/29 3968/117/29
+f 3970/119/28 3987/120/28 3986/118/28
+f 3986/118/28 3968/117/28 3970/119/28
+f 3972/121/39 3988/122/39 3987/120/39
+f 3987/120/39 3970/119/39 3972/121/39
+f 3974/123/38 3989/124/38 3988/122/38
+f 3988/122/38 3972/121/38 3974/123/38
+f 3976/125/37 3990/126/37 3989/124/37
+f 3989/124/37 3974/123/37 3976/125/37
+f 3978/127/36 3991/130/36 3990/129/36
+f 3990/129/36 3976/128/36 3978/127/36
+f 3980/131/35 3992/132/35 3991/130/35
+f 3991/130/35 3978/127/35 3980/131/35
+f 3959/108/34 3982/109/34 3992/132/34
+f 3992/132/34 3980/131/34 3959/108/34
+f 3981/110/46 3993/134/46 3994/133/46
+f 3994/133/46 3982/109/46 3981/110/46
+f 3983/112/45 3995/135/45 3993/134/45
+f 3993/134/45 3981/110/45 3983/112/45
+f 3984/114/44 3996/136/44 3995/135/44
+f 3995/135/44 3983/112/44 3984/114/44
+f 3985/116/42 3997/137/42 3996/136/43
+f 3996/136/43 3984/114/42 3985/116/42
+f 3986/118/41 3998/138/41 3997/137/41
+f 3997/137/41 3985/116/41 3986/118/41
+f 3987/120/40 3999/139/40 3998/138/40
+f 3998/138/40 3986/118/40 3987/120/40
+f 3988/122/55 4000/140/54 3999/139/54
+f 3999/139/54 3987/120/54 3988/122/55
+f 3989/124/53 4001/141/53 4000/140/53
+f 4000/140/53 3988/122/53 3989/124/53
+f 3990/126/51 4002/142/52 4001/141/51
+f 4001/141/51 3989/124/51 3990/126/51
+f 3991/130/50 4003/144/50 4002/143/50
+f 4002/143/50 3990/129/50 3991/130/50
+f 3992/132/49 4004/145/49 4003/144/49
+f 4003/144/49 3991/130/49 3992/132/49
+f 3982/109/48 3994/133/48 4004/145/48
+f 4004/145/48 3992/132/47 3982/109/48
+f 3945/148/63 4005/147/63 4006/146/63
+f 4006/146/63 3946/149/63 3945/148/63
+f 3947/151/62 4007/150/61 4005/147/61
+f 4005/147/61 3945/148/62 3947/151/62
+f 3948/154/60 4008/153/60 4007/152/60
+f 4007/152/60 3947/155/60 3948/154/60
+f 3949/156/59 4009/142/59 4008/153/59
+f 4008/153/59 3948/154/59 3949/156/59
+f 3950/158/58 4010/157/57 4009/142/57
+f 4009/142/57 3949/156/58 3950/158/58
+f 3951/160/56 4011/159/56 4010/157/56
+f 4010/157/56 3950/158/56 3951/160/56
+f 3952/162/71 4012/161/71 4011/159/71
+f 4011/159/71 3951/160/71 3952/162/71
+f 3953/164/69 4013/163/70 4012/161/70
+f 4012/161/70 3952/162/69 3953/164/69
+f 3954/166/68 4014/165/68 4013/163/68
+f 4013/163/68 3953/164/68 3954/166/68
+f 3955/168/67 4015/167/67 4014/165/67
+f 4014/165/67 3954/166/67 3955/168/67
+f 3956/170/66 4016/169/66 4015/167/66
+f 4015/167/66 3955/168/65 3956/170/66
+f 3946/149/64 4006/146/64 4016/169/64
+f 4016/169/64 3956/170/64 3946/149/64
+f 4005/173/6 3957/172/6 3960/171/7
+f 3960/171/7 4006/174/7 4005/173/6
+f 4007/176/5 3961/175/5 3957/172/6
+f 3957/172/6 4005/173/6 4007/176/5
+f 4008/179/4 3963/178/4 3961/177/5
+f 3961/177/5 4007/180/5 4008/179/4
+f 4009/181/3 3965/86/3 3963/178/4
+f 3963/178/4 4008/179/4 4009/181/3
+f 4010/183/2 3967/182/2 3965/86/3
+f 3965/86/3 4009/181/3 4010/183/2
+f 4011/185/1 3969/184/1 3967/182/2
+f 3967/182/2 4010/183/2 4011/185/1
+f 4012/187/12 3971/186/12 3969/184/1
+f 3969/184/1 4011/185/1 4012/187/12
+f 4013/189/11 3973/188/11 3971/186/12
+f 3971/186/12 4012/187/12 4013/189/11
+f 4014/191/10 3975/190/10 3973/188/11
+f 3973/188/11 4013/189/11 4014/191/10
+f 4015/192/9 3977/76/9 3975/190/10
+f 3975/190/10 4014/191/10 4015/192/9
+f 4016/194/8 3979/193/8 3977/76/9
+f 3977/76/9 4015/192/9 4016/194/8
+f 4006/174/7 3960/171/7 3979/193/8
+f 3979/193/8 4016/194/8 4006/174/7
+f 4017/195/443 4018/198/443 4019/197/443
+f 4019/197/443 4020/196/443 4017/195/443
+f 4021/199/390 4022/202/390 4023/201/390
+f 4023/201/390 4024/200/390 4021/199/390
+f 4025/203/444 4026/206/444 4027/205/444
+f 4027/205/444 4028/204/444 4025/203/444
+f 4029/202/388 4030/199/388 4031/200/388
+f 4031/200/388 4032/201/388 4029/202/388
+f 4033/207/398 4034/209/398 4035/208/398
+f 4035/208/398 4036/207/398 4033/207/398
+f 4037/209/445 4038/211/445 4039/210/445
+f 4028/212/446 4027/214/446 4040/213/446
+f 4040/213/446 4041/196/446 4028/212/446
+f 4042/210/447 4043/211/447 4044/209/447
+f 4045/215/448 4044/209/448 4043/211/448
+f 4043/211/448 4046/216/448 4045/215/448
+f 4047/217/449 4020/196/449 4019/197/449
+f 4019/197/449 4048/218/449 4047/217/449
+f 4049/219/451 4025/203/451 4028/204/451
+f 4028/204/451 4050/220/451 4049/219/451
+f 4051/209/391 4033/207/391 4036/207/391
+f 4036/207/391 4052/208/391 4051/209/391
+f 4028/212/452 4041/196/452 4053/213/452
+f 4053/213/452 4050/214/452 4028/212/452
+f 4045/215/453 4046/216/453 4038/211/453
+f 4038/211/453 4037/209/453 4045/215/453
+f 4054/221/388 4018/221/388 4017/222/388
+f 4017/222/388 4040/222/388 4054/221/388
+f 4040/222/402 4017/222/402 4020/203/402
+f 4020/203/402 4041/203/402 4040/222/402
+f 4041/203/401 4020/203/401 4047/206/401
+f 4047/206/401 4053/206/401 4041/203/401
+f 4053/206/390 4047/206/390 4048/223/390
+f 4048/223/390 4055/223/390 4053/206/390
+f 4055/224/454 4048/224/454 4019/226/454
+f 4019/226/454 4056/225/454 4055/224/454
+f 4056/225/455 4019/226/455 4018/224/455
+f 4018/224/455 4054/224/455 4056/225/455
+f 4050/214/447 4053/213/447 4055/228/447
+f 4055/228/447 4057/227/447 4050/214/447
+f 4057/229/388 4058/221/388 4049/219/388
+f 4049/219/388 4050/220/388 4057/229/388
+f 4026/206/390 4059/223/390 4060/230/390
+f 4060/230/390 4027/205/390 4026/206/390
+f 4060/227/445 4054/228/445 4040/213/445
+f 4040/213/445 4027/214/445 4060/227/445
+f 4023/201/390 4061/202/390 4062/199/390
+f 4062/199/390 4024/200/390 4023/201/390
+f 4060/231/456 4039/233/456 4038/232/456
+f 4038/232/456 4054/224/456 4060/231/456
+f 4054/224/455 4038/232/455 4046/234/455
+f 4046/234/455 4056/225/455 4054/224/455
+f 4056/225/454 4046/234/454 4043/232/454
+f 4043/232/454 4055/224/454 4056/225/454
+f 4055/224/457 4043/232/457 4042/233/457
+f 4042/233/457 4057/231/457 4055/224/457
+f 4031/200/388 4063/199/388 4064/202/388
+f 4064/202/388 4032/201/388 4031/200/388
+f 4035/208/398 4044/236/398 4045/235/398
+f 4045/235/398 4036/207/398 4035/208/398
+f 4036/207/391 4045/235/391 4037/236/391
+f 4037/236/391 4052/208/391 4036/207/391
+f 4059/236/27 4021/238/27 4024/237/27
+f 4024/237/27 4060/231/27 4059/236/27
+f 4060/231/27 4024/237/27 4062/239/27
+f 4062/239/27 4039/233/27 4060/231/27
+f 4039/210/484 4062/241/484 4061/240/484
+f 4061/240/484 4037/209/484 4039/210/484
+f 4037/236/26 4061/238/26 4023/242/26
+f 4023/242/26 4052/208/26 4037/236/26
+f 4052/208/26 4023/242/26 4022/240/26
+f 4022/240/26 4051/209/26 4052/208/26
+f 4034/209/26 4029/240/26 4032/242/26
+f 4032/242/26 4035/208/26 4034/209/26
+f 4035/208/26 4032/242/26 4064/238/26
+f 4064/238/26 4044/236/26 4035/208/26
+f 4044/209/459 4064/240/459 4063/241/459
+f 4063/241/459 4042/210/459 4044/209/459
+f 4042/233/27 4063/239/27 4031/237/27
+f 4031/237/27 4057/231/27 4042/233/27
+f 4057/231/27 4031/237/27 4030/238/27
+f 4030/238/27 4058/236/27 4057/231/27
+f 4065/195/4 4066/198/4 4067/197/4
+f 4067/197/4 4068/196/4 4065/195/4
+f 4069/199/416 4070/202/416 4071/201/415
+f 4071/201/415 4072/200/415 4069/199/416
+f 4073/203/421 4074/206/421 4075/205/421
+f 4075/205/421 4076/204/421 4073/203/421
+f 4077/202/413 4078/199/413 4079/200/412
+f 4079/200/412 4080/201/412 4077/202/413
+f 4081/207/466 4082/209/466 4083/208/466
+f 4083/208/466 4084/207/466 4081/207/466
+f 4085/209/107 4086/211/107 4087/210/107
+f 4076/212/467 4075/214/467 4088/213/467
+f 4088/213/467 4089/196/467 4076/212/467
+f 4090/210/468 4091/211/468 4092/209/468
+f 4093/215/469 4092/209/469 4091/211/469
+f 4091/211/469 4094/216/469 4093/215/469
+f 4095/217/103 4068/196/103 4067/197/103
+f 4067/197/103 4096/218/103 4095/217/103
+f 4097/219/414 4073/203/414 4076/204/414
+f 4076/204/414 4098/220/414 4097/219/414
+f 4099/209/471 4081/207/471 4084/207/471
+f 4084/207/471 4100/208/471 4099/209/471
+f 4076/212/472 4089/196/472 4101/213/472
+f 4101/213/472 4098/214/472 4076/212/472
+f 4093/215/332 4094/216/332 4086/211/332
+f 4086/211/332 4085/209/332 4093/215/332
+f 4102/221/413 4066/221/412 4065/222/412
+f 4065/222/412 4088/222/413 4102/221/413
+f 4088/222/426 4065/222/426 4068/203/426
+f 4068/203/426 4089/203/426 4088/222/426
+f 4089/203/425 4068/203/425 4095/206/425
+f 4095/206/425 4101/206/425 4089/203/425
+f 4101/206/415 4095/206/415 4096/223/415
+f 4096/223/415 4103/223/415 4101/206/415
+f 4103/224/473 4096/224/473 4067/226/473
+f 4067/226/473 4104/225/473 4103/224/473
+f 4104/225/430 4067/226/430 4066/224/430
+f 4066/224/430 4102/224/430 4104/225/430
+f 4098/214/468 4101/213/468 4103/228/468
+f 4103/228/468 4105/227/468 4098/214/468
+f 4105/229/413 4106/221/413 4097/219/413
+f 4097/219/413 4098/220/413 4105/229/413
+f 4074/206/415 4107/223/415 4108/230/415
+f 4108/230/415 4075/205/415 4074/206/415
+f 4108/227/107 4102/228/107 4088/213/107
+f 4088/213/107 4075/214/107 4108/227/107
+f 4071/201/415 4109/202/416 4110/199/416
+f 4110/199/416 4072/200/415 4071/201/415
+f 4108/231/485 4087/233/485 4086/232/485
+f 4086/232/485 4102/224/485 4108/231/485
+f 4102/224/430 4086/232/430 4094/234/430
+f 4094/234/430 4104/225/430 4102/224/430
+f 4104/225/473 4094/234/473 4091/232/473
+f 4091/232/473 4103/224/473 4104/225/473
+f 4103/224/428 4091/232/428 4090/233/428
+f 4090/233/428 4105/231/428 4103/224/428
+f 4079/200/412 4111/199/413 4112/202/413
+f 4112/202/413 4080/201/412 4079/200/412
+f 4083/208/466 4092/236/466 4093/235/466
+f 4093/235/466 4084/207/466 4083/208/466
+f 4084/207/471 4093/235/471 4085/236/471
+f 4085/236/471 4100/208/471 4084/207/471
+f 4107/236/27 4069/238/27 4072/237/27
+f 4072/237/27 4108/231/27 4107/236/27
+f 4108/231/27 4072/237/27 4110/239/27
+f 4110/239/27 4087/233/27 4108/231/27
+f 4087/210/193 4110/241/193 4109/240/193
+f 4109/240/193 4085/209/193 4087/210/193
+f 4085/236/26 4109/238/26 4071/242/26
+f 4071/242/26 4100/208/26 4085/236/26
+f 4100/208/26 4071/242/26 4070/240/26
+f 4070/240/26 4099/209/26 4100/208/26
+f 4082/209/26 4077/240/26 4080/242/26
+f 4080/242/26 4083/208/26 4082/209/26
+f 4083/208/26 4080/242/26 4112/238/26
+f 4112/238/26 4092/236/26 4083/208/26
+f 4092/209/475 4112/240/475 4111/241/475
+f 4111/241/475 4090/210/475 4092/209/475
+f 4090/233/27 4111/239/27 4079/237/27
+f 4079/237/27 4105/231/27 4090/233/27
+f 4105/231/27 4079/237/27 4078/238/27
+f 4078/238/27 4106/236/27 4105/231/27
+f 4113/243/476 4114/246/476 4115/245/476
+f 4115/245/476 4116/244/476 4113/243/476
+f 4113/247/477 4117/250/477 4118/249/477
+f 4118/249/477 4114/248/477 4113/247/477
+f 4114/246/478 4118/252/478 4119/251/478
+f 4119/251/478 4115/245/478 4114/246/478
+f 4115/248/479 4119/249/479 4120/250/479
+f 4120/250/479 4116/247/479 4115/248/479
+f 4121/195/464 4122/198/464 4123/197/464
+f 4123/197/464 4124/196/464 4121/195/464
+f 4125/199/416 4126/202/416 4127/201/415
+f 4127/201/415 4128/200/415 4125/199/416
+f 4129/203/421 4130/206/421 4131/205/421
+f 4131/205/421 4132/204/421 4129/203/421
+f 4133/202/413 4134/199/413 4135/200/412
+f 4135/200/412 4136/201/412 4133/202/413
+f 4137/207/466 4138/209/466 4139/208/466
+f 4139/208/466 4140/207/466 4137/207/466
+f 4141/209/107 4142/211/107 4143/210/107
+f 4132/212/467 4131/214/467 4144/213/467
+f 4144/213/467 4145/196/467 4132/212/467
+f 4146/210/468 4147/211/468 4148/209/468
+f 4149/215/469 4148/209/469 4147/211/469
+f 4147/211/469 4150/216/469 4149/215/469
+f 4151/217/103 4124/196/103 4123/197/103
+f 4123/197/103 4152/218/103 4151/217/103
+f 4153/219/470 4129/203/414 4132/204/414
+f 4132/204/414 4154/220/470 4153/219/470
+f 4155/209/471 4137/207/471 4140/207/471
+f 4140/207/471 4156/208/471 4155/209/471
+f 4132/212/472 4145/196/472 4157/213/472
+f 4157/213/472 4154/214/472 4132/212/472
+f 4149/215/332 4150/216/332 4142/211/332
+f 4142/211/332 4141/209/332 4149/215/332
+f 4158/221/413 4122/221/413 4121/222/413
+f 4121/222/413 4144/222/413 4158/221/413
+f 4144/222/426 4121/222/426 4124/203/426
+f 4124/203/426 4145/203/426 4144/222/426
+f 4145/203/425 4124/203/425 4151/206/425
+f 4151/206/425 4157/206/425 4145/203/425
+f 4157/206/415 4151/206/415 4152/223/415
+f 4152/223/415 4159/223/415 4157/206/415
+f 4159/224/473 4152/224/473 4123/226/473
+f 4123/226/473 4160/225/473 4159/224/473
+f 4160/225/430 4123/226/430 4122/224/430
+f 4122/224/430 4158/224/430 4160/225/430
+f 4154/214/468 4157/213/468 4159/228/468
+f 4159/228/468 4161/227/468 4154/214/468
+f 4161/229/437 4162/221/412 4153/219/412
+f 4153/219/412 4154/220/437 4161/229/437
+f 4130/206/415 4163/223/415 4164/230/416
+f 4164/230/416 4131/205/416 4130/206/415
+f 4164/227/107 4158/228/107 4144/213/107
+f 4144/213/107 4131/214/107 4164/227/107
+f 4127/201/415 4165/202/416 4166/199/416
+f 4166/199/416 4128/200/415 4127/201/415
+f 4164/231/485 4143/233/485 4142/232/485
+f 4142/232/485 4158/224/485 4164/231/485
+f 4158/224/430 4142/232/430 4150/234/430
+f 4150/234/430 4160/225/430 4158/224/430
+f 4160/225/473 4150/234/473 4147/232/473
+f 4147/232/473 4159/224/473 4160/225/473
+f 4159/224/428 4147/232/428 4146/233/428
+f 4146/233/428 4161/231/428 4159/224/428
+f 4135/200/412 4167/199/413 4168/202/413
+f 4168/202/413 4136/201/412 4135/200/412
+f 4139/208/466 4148/236/466 4149/235/466
+f 4149/235/466 4140/207/466 4139/208/466
+f 4140/207/471 4149/235/471 4141/236/471
+f 4141/236/471 4156/208/471 4140/207/471
+f 4163/236/27 4125/238/27 4128/237/27
+f 4128/237/27 4164/231/27 4163/236/27
+f 4164/231/27 4128/237/27 4166/239/27
+f 4166/239/27 4143/233/27 4164/231/27
+f 4143/210/193 4166/241/193 4165/240/193
+f 4165/240/193 4141/209/193 4143/210/193
+f 4141/236/26 4165/238/26 4127/242/26
+f 4127/242/26 4156/208/26 4141/236/26
+f 4156/208/26 4127/242/26 4126/240/26
+f 4126/240/26 4155/209/26 4156/208/26
+f 4138/209/26 4133/240/26 4136/242/26
+f 4136/242/26 4139/208/26 4138/209/26
+f 4139/208/26 4136/242/26 4168/238/26
+f 4168/238/26 4148/236/26 4139/208/26
+f 4148/209/475 4168/240/475 4167/241/475
+f 4167/241/475 4146/210/475 4148/209/475
+f 4146/233/27 4167/239/27 4135/237/27
+f 4135/237/27 4161/231/27 4146/233/27
+f 4161/231/27 4135/237/27 4134/238/27
+f 4134/238/27 4162/236/27 4161/231/27
+f 4169/243/460 4170/246/460 4171/245/460
+f 4171/245/460 4172/244/460 4169/243/460
+f 4169/247/461 4173/250/461 4174/249/461
+f 4174/249/461 4170/248/461 4169/247/461
+f 4170/246/462 4174/252/462 4175/251/462
+f 4175/251/462 4171/245/462 4170/246/462
+f 4171/248/463 4175/249/463 4176/250/463
+f 4176/250/463 4172/247/463 4171/248/463
+f 4177/195/387 4178/198/387 4179/197/387
+f 4179/197/387 4180/196/387 4177/195/387
+f 4181/199/388 4182/202/388 4183/201/388
+f 4183/201/388 4184/200/388 4181/199/388
+f 4185/203/389 4186/206/389 4187/205/389
+f 4187/205/389 4188/204/389 4185/203/389
+f 4189/202/390 4190/199/390 4191/200/390
+f 4191/200/390 4192/201/390 4189/202/390
+f 4193/207/391 4194/209/391 4195/208/391
+f 4195/208/391 4196/207/391 4193/207/391
+f 4197/209/392 4198/211/392 4199/210/392
+f 4188/212/393 4187/214/393 4200/213/393
+f 4200/213/393 4201/196/393 4188/212/393
+f 4202/210/394 4203/211/394 4204/209/394
+f 4205/215/395 4204/209/395 4203/211/395
+f 4203/211/395 4206/216/395 4205/215/395
+f 4207/217/396 4180/196/486 4179/197/486
+f 4179/197/486 4208/218/396 4207/217/396
+f 4209/219/397 4185/203/397 4188/204/397
+f 4188/204/397 4210/220/397 4209/219/397
+f 4211/209/398 4193/207/398 4196/207/398
+f 4196/207/398 4212/208/398 4211/209/398
+f 4188/212/399 4201/196/399 4213/213/399
+f 4213/213/399 4210/214/399 4188/212/399
+f 4205/215/400 4206/216/400 4198/211/400
+f 4198/211/400 4197/209/400 4205/215/400
+f 4214/221/390 4178/221/390 4177/222/390
+f 4177/222/390 4200/222/390 4214/221/390
+f 4200/222/401 4177/222/401 4180/203/401
+f 4180/203/401 4201/203/401 4200/222/401
+f 4201/203/402 4180/203/402 4207/206/402
+f 4207/206/402 4213/206/402 4201/203/402
+f 4213/206/388 4207/206/388 4208/223/388
+f 4208/223/388 4215/223/388 4213/206/388
+f 4215/224/403 4208/224/403 4179/226/403
+f 4179/226/403 4216/225/403 4215/224/403
+f 4216/225/404 4179/226/404 4178/224/404
+f 4178/224/404 4214/224/404 4216/225/404
+f 4210/214/394 4213/213/394 4215/228/394
+f 4215/228/394 4217/227/394 4210/214/394
+f 4217/229/390 4218/221/390 4209/219/390
+f 4209/219/390 4210/220/390 4217/229/390
+f 4186/206/388 4219/223/388 4220/230/388
+f 4220/230/388 4187/205/388 4186/206/388
+f 4220/227/392 4214/228/392 4200/213/392
+f 4200/213/392 4187/214/392 4220/227/392
+f 4183/201/388 4221/202/388 4222/199/388
+f 4222/199/388 4184/200/388 4183/201/388
+f 4220/231/405 4199/233/405 4198/232/405
+f 4198/232/405 4214/224/405 4220/231/405
+f 4214/224/404 4198/232/404 4206/234/404
+f 4206/234/404 4216/225/404 4214/224/404
+f 4216/225/403 4206/234/403 4203/232/403
+f 4203/232/403 4215/224/403 4216/225/403
+f 4215/224/407 4203/232/407 4202/233/407
+f 4202/233/407 4217/231/407 4215/224/407
+f 4191/200/390 4223/199/390 4224/202/390
+f 4224/202/390 4192/201/390 4191/200/390
+f 4195/208/391 4204/236/391 4205/235/391
+f 4205/235/391 4196/207/391 4195/208/391
+f 4196/207/398 4205/235/398 4197/236/398
+f 4197/236/398 4212/208/398 4196/207/398
+f 4219/236/27 4181/238/27 4184/237/27
+f 4184/237/27 4220/231/27 4219/236/27
+f 4220/231/27 4184/237/27 4222/239/27
+f 4222/239/27 4199/233/27 4220/231/27
+f 4199/210/409 4222/241/409 4221/240/409
+f 4221/240/409 4197/209/409 4199/210/409
+f 4197/236/26 4221/238/26 4183/242/26
+f 4183/242/26 4212/208/26 4197/236/26
+f 4212/208/26 4183/242/26 4182/240/26
+f 4182/240/26 4211/209/26 4212/208/26
+f 4194/209/26 4189/240/26 4192/242/26
+f 4192/242/26 4195/208/26 4194/209/26
+f 4195/208/26 4192/242/26 4224/238/26
+f 4224/238/26 4204/236/26 4195/208/26
+f 4204/209/410 4224/240/410 4223/241/410
+f 4223/241/410 4202/210/410 4204/209/410
+f 4202/233/27 4223/239/27 4191/237/27
+f 4191/237/27 4217/231/27 4202/233/27
+f 4217/231/27 4191/237/27 4190/238/27
+f 4190/238/27 4218/236/27 4217/231/27
+f 4225/243/148 4226/246/148 4227/245/148
+f 4227/245/148 4228/244/148 4225/243/148
+f 4225/247/7 4229/250/7 4230/249/7
+f 4230/249/7 4226/248/7 4225/247/7
+f 4226/246/149 4230/252/149 4231/251/149
+f 4231/251/149 4227/245/149 4226/246/149
+f 4227/248/1 4231/249/1 4232/250/1
+f 4232/250/1 4228/247/1 4227/248/1
+f 4233/243/187 4234/246/187 4235/245/187
+f 4235/245/187 4236/244/187 4233/243/187
+f 4233/247/161 4237/250/161 4238/249/161
+f 4238/249/161 4234/248/161 4233/247/161
+f 4234/246/188 4238/252/188 4239/251/188
+f 4239/251/188 4235/245/188 4234/246/188
+f 4235/248/163 4239/249/163 4240/250/163
+f 4240/250/163 4236/247/163 4235/248/163
+f 4241/243/154 4242/246/154 4243/245/154
+f 4243/245/154 4244/244/154 4241/243/154
+f 4241/247/1 4245/250/1 4246/249/1
+f 4246/249/1 4242/248/1 4241/247/1
+f 4242/246/155 4246/252/155 4247/251/155
+f 4247/251/155 4243/245/155 4242/246/155
+f 4243/248/7 4247/249/7 4248/250/7
+f 4248/250/7 4244/247/7 4243/248/7
+f 4249/243/439 4250/246/439 4251/245/439
+f 4251/245/439 4252/244/439 4249/243/439
+f 4249/247/440 4253/250/440 4254/249/440
+f 4254/249/440 4250/248/440 4249/247/440
+f 4250/246/441 4254/252/441 4255/251/441
+f 4255/251/441 4251/245/441 4250/246/441
+f 4251/248/442 4255/249/442 4256/250/442
+f 4256/250/442 4252/247/442 4251/248/442
+f 4257/243/180 4258/246/180 4259/245/180
+f 4259/245/180 4260/244/180 4257/243/180
+f 4257/247/151 4261/250/151 4262/249/151
+f 4262/249/151 4258/248/151 4257/247/151
+f 4258/246/181 4262/252/181 4263/251/181
+f 4263/251/181 4259/245/181 4258/246/181
+f 4259/248/153 4263/249/153 4264/250/153
+f 4264/250/153 4260/247/153 4259/248/153
+f 4265/195/387 4266/198/387 4267/197/387
+f 4267/197/387 4268/196/387 4265/195/387
+f 4269/199/388 4270/202/388 4271/201/388
+f 4271/201/388 4272/200/388 4269/199/388
+f 4273/203/389 4274/206/389 4275/205/389
+f 4275/205/389 4276/204/389 4273/203/389
+f 4277/202/390 4278/199/390 4279/200/390
+f 4279/200/390 4280/201/390 4277/202/390
+f 4281/207/391 4282/209/391 4283/208/391
+f 4283/208/391 4284/207/391 4281/207/391
+f 4285/209/392 4286/211/392 4287/210/392
+f 4276/212/393 4275/214/393 4288/213/393
+f 4288/213/393 4289/196/393 4276/212/393
+f 4290/210/394 4291/211/394 4292/209/394
+f 4293/215/395 4292/209/395 4291/211/395
+f 4291/211/395 4294/216/395 4293/215/395
+f 4295/217/396 4268/196/486 4267/197/486
+f 4267/197/486 4296/218/396 4295/217/396
+f 4297/219/397 4273/203/397 4276/204/397
+f 4276/204/397 4298/220/397 4297/219/397
+f 4299/209/398 4281/207/398 4284/207/398
+f 4284/207/398 4300/208/398 4299/209/398
+f 4276/212/399 4289/196/399 4301/213/399
+f 4301/213/399 4298/214/399 4276/212/399
+f 4293/215/400 4294/216/400 4286/211/400
+f 4286/211/400 4285/209/400 4293/215/400
+f 4302/221/390 4266/221/390 4265/222/390
+f 4265/222/390 4288/222/390 4302/221/390
+f 4288/222/401 4265/222/401 4268/203/401
+f 4268/203/401 4289/203/401 4288/222/401
+f 4289/203/402 4268/203/402 4295/206/402
+f 4295/206/402 4301/206/402 4289/203/402
+f 4301/206/388 4295/206/388 4296/223/388
+f 4296/223/388 4303/223/388 4301/206/388
+f 4303/224/403 4296/224/403 4267/226/403
+f 4267/226/403 4304/225/403 4303/224/403
+f 4304/225/404 4267/226/404 4266/224/404
+f 4266/224/404 4302/224/404 4304/225/404
+f 4298/214/394 4301/213/394 4303/228/394
+f 4303/228/394 4305/227/394 4298/214/394
+f 4305/229/390 4306/221/390 4297/219/390
+f 4297/219/390 4298/220/390 4305/229/390
+f 4274/206/388 4307/223/388 4308/230/388
+f 4308/230/388 4275/205/388 4274/206/388
+f 4308/227/392 4302/228/392 4288/213/392
+f 4288/213/392 4275/214/392 4308/227/392
+f 4271/201/388 4309/202/388 4310/199/388
+f 4310/199/388 4272/200/388 4271/201/388
+f 4308/231/405 4287/233/405 4286/232/405
+f 4286/232/405 4302/224/405 4308/231/405
+f 4302/224/404 4286/232/404 4294/234/404
+f 4294/234/404 4304/225/404 4302/224/404
+f 4304/225/403 4294/234/403 4291/232/403
+f 4291/232/403 4303/224/403 4304/225/403
+f 4303/224/407 4291/232/407 4290/233/407
+f 4290/233/407 4305/231/407 4303/224/407
+f 4279/200/390 4311/199/390 4312/202/390
+f 4312/202/390 4280/201/390 4279/200/390
+f 4283/208/391 4292/236/391 4293/235/391
+f 4293/235/391 4284/207/391 4283/208/391
+f 4284/207/398 4293/235/398 4285/236/398
+f 4285/236/398 4300/208/398 4284/207/398
+f 4307/236/27 4269/238/27 4272/237/27
+f 4272/237/27 4308/231/27 4307/236/27
+f 4308/231/27 4272/237/27 4310/239/27
+f 4310/239/27 4287/233/27 4308/231/27
+f 4287/210/409 4310/241/409 4309/240/409
+f 4309/240/409 4285/209/409 4287/210/409
+f 4285/236/26 4309/238/26 4271/242/26
+f 4271/242/26 4300/208/26 4285/236/26
+f 4300/208/26 4271/242/26 4270/240/26
+f 4270/240/26 4299/209/26 4300/208/26
+f 4282/209/26 4277/240/26 4280/242/26
+f 4280/242/26 4283/208/26 4282/209/26
+f 4283/208/26 4280/242/26 4312/238/26
+f 4312/238/26 4292/236/26 4283/208/26
+f 4292/209/410 4312/240/410 4311/241/410
+f 4311/241/410 4290/210/410 4292/209/410
+f 4290/233/27 4311/239/27 4279/237/27
+f 4279/237/27 4305/231/27 4290/233/27
+f 4305/231/27 4279/237/27 4278/238/27
+f 4278/238/27 4306/236/27 4305/231/27
+f 4313/195/436 4314/198/436 4315/197/411
+f 4315/197/411 4316/196/411 4313/195/436
+f 4317/199/437 4318/202/437 4319/201/437
+f 4319/201/437 4320/200/437 4317/199/437
+f 4321/203/414 4322/206/414 4323/205/414
+f 4323/205/414 4324/204/414 4321/203/414
+f 4325/202/465 4326/199/465 4327/200/465
+f 4327/200/465 4328/201/465 4325/202/465
+f 4329/207/417 4330/209/417 4331/208/417
+f 4331/208/417 4332/207/417 4329/207/417
+f 4333/209/171 4334/211/171 4335/210/171
+f 4324/212/418 4323/214/418 4336/213/418
+f 4336/213/418 4337/196/418 4324/212/418
+f 4338/210/419 4339/211/419 4340/209/419
+f 4341/215/420 4340/209/420 4339/211/420
+f 4339/211/420 4342/216/420 4341/215/420
+f 4343/217/167 4316/196/167 4315/197/167
+f 4315/197/167 4344/218/167 4343/217/167
+f 4345/219/438 4321/203/421 4324/204/421
+f 4324/204/421 4346/220/421 4345/219/438
+f 4347/209/422 4329/207/422 4332/207/422
+f 4332/207/422 4348/208/422 4347/209/422
+f 4324/212/423 4337/196/423 4349/213/423
+f 4349/213/423 4346/214/423 4324/212/423
+f 4341/215/424 4342/216/424 4334/211/424
+f 4334/211/424 4333/209/424 4341/215/424
+f 4350/221/465 4314/221/465 4313/222/465
+f 4313/222/465 4336/222/465 4350/221/465
+f 4336/222/425 4313/222/425 4316/203/425
+f 4316/203/425 4337/203/425 4336/222/425
+f 4337/203/426 4316/203/426 4343/206/426
+f 4343/206/426 4349/206/426 4337/203/426
+f 4349/206/437 4343/206/437 4344/223/437
+f 4344/223/437 4351/223/437 4349/206/437
+f 4351/224/427 4344/224/427 4315/226/427
+f 4315/226/427 4352/225/427 4351/224/427
+f 4352/225/428 4315/226/428 4314/224/428
+f 4314/224/428 4350/224/428 4352/225/428
+f 4346/214/419 4349/213/419 4351/228/419
+f 4351/228/419 4353/227/419 4346/214/419
+f 4353/229/465 4354/221/465 4345/219/465
+f 4345/219/465 4346/220/465 4353/229/465
+f 4322/206/437 4355/223/437 4356/230/437
+f 4356/230/437 4323/205/437 4322/206/437
+f 4356/227/171 4350/228/171 4336/213/171
+f 4336/213/171 4323/214/171 4356/227/171
+f 4319/201/437 4357/202/437 4358/199/437
+f 4358/199/437 4320/200/437 4319/201/437
+f 4356/231/487 4335/233/487 4334/232/487
+f 4334/232/487 4350/224/487 4356/231/487
+f 4350/224/428 4334/232/428 4342/234/428
+f 4342/234/428 4352/225/428 4350/224/428
+f 4352/225/427 4342/234/427 4339/232/427
+f 4339/232/427 4351/224/427 4352/225/427
+f 4351/224/430 4339/232/430 4338/233/430
+f 4338/233/430 4353/231/430 4351/224/430
+f 4327/200/465 4359/199/465 4360/202/465
+f 4360/202/465 4328/201/465 4327/200/465
+f 4331/208/417 4340/236/417 4341/235/417
+f 4341/235/417 4332/207/417 4331/208/417
+f 4332/207/422 4341/235/422 4333/236/422
+f 4333/236/422 4348/208/422 4332/207/422
+f 4355/236/27 4317/238/27 4320/237/27
+f 4320/237/27 4356/231/27 4355/236/27
+f 4356/231/27 4320/237/27 4358/239/27
+f 4358/239/27 4335/233/27 4356/231/27
+f 4335/210/191 4358/241/191 4357/240/191
+f 4357/240/191 4333/209/191 4335/210/191
+f 4333/236/26 4357/238/26 4319/242/26
+f 4319/242/26 4348/208/26 4333/236/26
+f 4348/208/26 4319/242/26 4318/240/26
+f 4318/240/26 4347/209/26 4348/208/26
+f 4330/209/26 4325/240/26 4328/242/26
+f 4328/242/26 4331/208/26 4330/209/26
+f 4331/208/26 4328/242/26 4360/238/26
+f 4360/238/26 4340/236/26 4331/208/26
+f 4340/209/431 4360/240/431 4359/241/431
+f 4359/241/431 4338/210/431 4340/209/431
+f 4338/233/27 4359/239/27 4327/237/27
+f 4327/237/27 4353/231/27 4338/233/27
+f 4353/231/27 4327/237/27 4326/238/27
+f 4326/238/27 4354/236/27 4353/231/27
+f 4361/243/160 4362/246/160 4363/245/160
+f 4363/245/160 4364/244/160 4361/243/160
+f 4361/247/163 4365/250/163 4366/249/163
+f 4366/249/163 4362/248/163 4361/247/163
+f 4362/246/162 4366/252/162 4367/251/162
+f 4367/251/162 4363/245/162 4362/246/162
+f 4363/248/161 4367/249/161 4368/250/161
+f 4368/250/161 4364/247/161 4363/248/161
+f 4369/195/411 4370/198/411 4371/197/436
+f 4371/197/436 4372/196/436 4369/195/411
+f 4373/199/437 4374/202/437 4375/201/437
+f 4375/201/437 4376/200/437 4373/199/437
+f 4377/203/414 4378/206/414 4379/205/414
+f 4379/205/414 4380/204/414 4377/203/414
+f 4381/202/465 4382/199/465 4383/200/465
+f 4383/200/465 4384/201/465 4381/202/465
+f 4385/207/417 4386/209/417 4387/208/417
+f 4387/208/417 4388/207/417 4385/207/417
+f 4389/209/171 4390/211/171 4391/210/171
+f 4380/212/418 4379/214/418 4392/213/418
+f 4392/213/418 4393/196/418 4380/212/418
+f 4394/210/419 4395/211/419 4396/209/419
+f 4397/215/420 4396/209/420 4395/211/420
+f 4395/211/420 4398/216/420 4397/215/420
+f 4399/217/167 4372/196/167 4371/197/167
+f 4371/197/167 4400/218/167 4399/217/167
+f 4401/219/421 4377/203/421 4380/204/438
+f 4380/204/438 4402/220/421 4401/219/421
+f 4403/209/422 4385/207/422 4388/207/422
+f 4388/207/422 4404/208/422 4403/209/422
+f 4380/212/423 4393/196/423 4405/213/423
+f 4405/213/423 4402/214/423 4380/212/423
+f 4397/215/424 4398/216/424 4390/211/424
+f 4390/211/424 4389/209/424 4397/215/424
+f 4406/221/465 4370/221/465 4369/222/465
+f 4369/222/465 4392/222/465 4406/221/465
+f 4392/222/425 4369/222/425 4372/203/425
+f 4372/203/425 4393/203/425 4392/222/425
+f 4393/203/426 4372/203/426 4399/206/426
+f 4399/206/426 4405/206/426 4393/203/426
+f 4405/206/437 4399/206/437 4400/223/437
+f 4400/223/437 4407/223/437 4405/206/437
+f 4407/224/427 4400/224/427 4371/226/427
+f 4371/226/427 4408/225/427 4407/224/427
+f 4408/225/428 4371/226/428 4370/224/428
+f 4370/224/428 4406/224/428 4408/225/428
+f 4402/214/419 4405/213/419 4407/228/419
+f 4407/228/419 4409/227/419 4402/214/419
+f 4409/229/465 4410/221/465 4401/219/465
+f 4401/219/465 4402/220/465 4409/229/465
+f 4378/206/437 4411/223/437 4412/230/437
+f 4412/230/437 4379/205/437 4378/206/437
+f 4412/227/171 4406/228/171 4392/213/171
+f 4392/213/171 4379/214/171 4412/227/171
+f 4375/201/437 4413/202/437 4414/199/437
+f 4414/199/437 4376/200/437 4375/201/437
+f 4412/231/487 4391/233/487 4390/232/487
+f 4390/232/487 4406/224/487 4412/231/487
+f 4406/224/428 4390/232/428 4398/234/428
+f 4398/234/428 4408/225/428 4406/224/428
+f 4408/225/427 4398/234/427 4395/232/427
+f 4395/232/427 4407/224/427 4408/225/427
+f 4407/224/430 4395/232/430 4394/233/430
+f 4394/233/430 4409/231/430 4407/224/430
+f 4383/200/465 4415/199/465 4416/202/465
+f 4416/202/465 4384/201/465 4383/200/465
+f 4387/208/417 4396/236/417 4397/235/417
+f 4397/235/417 4388/207/417 4387/208/417
+f 4388/207/422 4397/235/422 4389/236/422
+f 4389/236/422 4404/208/422 4388/207/422
+f 4411/236/27 4373/238/27 4376/237/27
+f 4376/237/27 4412/231/27 4411/236/27
+f 4412/231/27 4376/237/27 4414/239/27
+f 4414/239/27 4391/233/27 4412/231/27
+f 4391/210/191 4414/241/191 4413/240/191
+f 4413/240/191 4389/209/191 4391/210/191
+f 4389/236/26 4413/238/26 4375/242/26
+f 4375/242/26 4404/208/26 4389/236/26
+f 4404/208/26 4375/242/26 4374/240/26
+f 4374/240/26 4403/209/26 4404/208/26
+f 4386/209/26 4381/240/26 4384/242/26
+f 4384/242/26 4387/208/26 4386/209/26
+f 4387/208/26 4384/242/26 4416/238/26
+f 4416/238/26 4396/236/26 4387/208/26
+f 4396/209/431 4416/240/431 4415/241/431
+f 4415/241/431 4394/210/431 4396/209/431
+f 4394/233/27 4415/239/27 4383/237/27
+f 4383/237/27 4409/231/27 4394/233/27
+f 4409/231/27 4383/237/27 4382/238/27
+f 4382/238/27 4410/236/27 4409/231/27
+f 4417/243/432 4418/246/432 4419/245/432
+f 4419/245/432 4420/244/432 4417/243/432
+f 4417/247/433 4421/250/433 4422/249/433
+f 4422/249/433 4418/248/433 4417/247/433
+f 4418/246/434 4422/252/434 4423/251/434
+f 4423/251/434 4419/245/434 4418/246/434
+f 4419/248/435 4423/249/435 4424/250/435
+f 4424/250/435 4420/247/435 4419/248/435
+f 4425/195/443 4426/198/443 4427/197/443
+f 4427/197/443 4428/196/443 4425/195/443
+f 4429/199/390 4430/202/390 4431/201/390
+f 4431/201/390 4432/200/390 4429/199/390
+f 4433/203/444 4434/206/444 4435/205/444
+f 4435/205/444 4436/204/444 4433/203/444
+f 4437/202/388 4438/199/388 4439/200/388
+f 4439/200/388 4440/201/388 4437/202/388
+f 4441/207/398 4442/209/398 4443/208/398
+f 4443/208/398 4444/207/398 4441/207/398
+f 4445/209/445 4446/211/445 4447/210/445
+f 4436/212/446 4435/214/446 4448/213/446
+f 4448/213/446 4449/196/446 4436/212/446
+f 4450/210/447 4451/211/447 4452/209/447
+f 4453/215/448 4452/209/448 4451/211/448
+f 4451/211/448 4454/216/448 4453/215/448
+f 4455/217/449 4428/196/449 4427/197/449
+f 4427/197/449 4456/218/449 4455/217/449
+f 4457/219/451 4433/203/451 4436/204/451
+f 4436/204/451 4458/220/451 4457/219/451
+f 4459/209/391 4441/207/391 4444/207/391
+f 4444/207/391 4460/208/391 4459/209/391
+f 4436/212/452 4449/196/452 4461/213/452
+f 4461/213/452 4458/214/452 4436/212/452
+f 4453/215/453 4454/216/453 4446/211/453
+f 4446/211/453 4445/209/453 4453/215/453
+f 4462/221/388 4426/221/388 4425/222/388
+f 4425/222/388 4448/222/388 4462/221/388
+f 4448/222/402 4425/222/402 4428/203/402
+f 4428/203/402 4449/203/402 4448/222/402
+f 4449/203/401 4428/203/401 4455/206/401
+f 4455/206/401 4461/206/401 4449/203/401
+f 4461/206/390 4455/206/390 4456/223/390
+f 4456/223/390 4463/223/390 4461/206/390
+f 4463/224/454 4456/224/454 4427/226/454
+f 4427/226/454 4464/225/454 4463/224/454
+f 4464/225/455 4427/226/455 4426/224/455
+f 4426/224/455 4462/224/455 4464/225/455
+f 4458/214/447 4461/213/447 4463/228/447
+f 4463/228/447 4465/227/447 4458/214/447
+f 4465/229/388 4466/221/388 4457/219/388
+f 4457/219/388 4458/220/388 4465/229/388
+f 4434/206/390 4467/223/390 4468/230/390
+f 4468/230/390 4435/205/390 4434/206/390
+f 4468/227/445 4462/228/445 4448/213/445
+f 4448/213/445 4435/214/445 4468/227/445
+f 4431/201/390 4469/202/390 4470/199/390
+f 4470/199/390 4432/200/390 4431/201/390
+f 4468/231/456 4447/233/456 4446/232/456
+f 4446/232/456 4462/224/456 4468/231/456
+f 4462/224/455 4446/232/455 4454/234/455
+f 4454/234/455 4464/225/455 4462/224/455
+f 4464/225/454 4454/234/454 4451/232/454
+f 4451/232/454 4463/224/454 4464/225/454
+f 4463/224/457 4451/232/457 4450/233/457
+f 4450/233/457 4465/231/457 4463/224/457
+f 4439/200/388 4471/199/388 4472/202/388
+f 4472/202/388 4440/201/388 4439/200/388
+f 4443/208/398 4452/236/398 4453/235/398
+f 4453/235/398 4444/207/398 4443/208/398
+f 4444/207/391 4453/235/391 4445/236/391
+f 4445/236/391 4460/208/391 4444/207/391
+f 4467/236/27 4429/238/27 4432/237/27
+f 4432/237/27 4468/231/27 4467/236/27
+f 4468/231/27 4432/237/27 4470/239/27
+f 4470/239/27 4447/233/27 4468/231/27
+f 4447/210/484 4470/241/484 4469/240/484
+f 4469/240/484 4445/209/484 4447/210/484
+f 4445/236/26 4469/238/26 4431/242/26
+f 4431/242/26 4460/208/26 4445/236/26
+f 4460/208/26 4431/242/26 4430/240/26
+f 4430/240/26 4459/209/26 4460/208/26
+f 4442/209/26 4437/240/26 4440/242/26
+f 4440/242/26 4443/208/26 4442/209/26
+f 4443/208/26 4440/242/26 4472/238/26
+f 4472/238/26 4452/236/26 4443/208/26
+f 4452/209/459 4472/240/459 4471/241/459
+f 4471/241/459 4450/210/459 4452/209/459
+f 4450/233/27 4471/239/27 4439/237/27
+f 4439/237/27 4465/231/27 4450/233/27
+f 4465/231/27 4439/237/27 4438/238/27
+f 4438/238/27 4466/236/27 4465/231/27
+f 4473/243/150 4474/246/150 4475/245/150
+f 4475/245/150 4476/244/150 4473/243/150
+f 4473/247/153 4477/250/153 4478/249/153
+f 4478/249/153 4474/248/153 4473/247/153
+f 4474/246/152 4478/252/152 4479/251/152
+f 4479/251/152 4475/245/152 4474/246/152
+f 4475/248/151 4479/249/151 4480/250/151
+f 4480/250/151 4476/247/151 4475/248/151
+f 4481/253/18 4482/256/18 4483/255/18
+f 4483/255/18 4484/254/18 4481/253/18
+f 4485/257/17 4486/258/17 4482/256/17
+f 4482/256/17 4481/253/17 4485/257/17
+f 4487/259/16 4488/260/16 4486/258/16
+f 4486/258/16 4485/257/16 4487/259/16
+f 4489/261/15 4490/264/15 4488/263/15
+f 4488/263/15 4487/262/118 4489/261/15
+f 4491/265/14 4492/266/14 4490/264/14
+f 4490/264/14 4489/261/14 4491/265/14
+f 4493/267/13 4494/268/13 4492/266/13
+f 4492/266/13 4491/265/13 4493/267/13
+f 4495/269/25 4496/270/25 4494/268/24
+f 4494/268/24 4493/267/24 4495/269/25
+f 4497/271/23 4498/272/23 4496/270/23
+f 4496/270/23 4495/269/23 4497/271/23
+f 4499/273/191 4500/274/22 4498/272/22
+f 4498/272/22 4497/271/22 4499/273/191
+f 4501/275/21 4502/276/21 4500/274/21
+f 4500/274/21 4499/273/21 4501/275/21
+f 4503/277/20 4504/278/20 4502/276/20
+f 4502/276/20 4501/275/20 4503/277/20
+f 4484/254/19 4483/255/19 4504/278/190
+f 4504/278/190 4503/277/190 4484/254/19
+f 4482/279/27 4505/282/27 4506/281/27
+f 4506/281/27 4483/280/27 4482/279/27
+f 4507/283/27 4508/284/27 4509/282/27
+f 4509/282/27 4510/279/27 4507/283/27
+f 4488/285/27 4511/285/27 4512/284/27
+f 4512/284/27 4486/283/27 4488/285/27
+f 4513/286/27 4514/287/27 4515/285/27
+f 4515/285/27 4516/285/27 4513/286/27
+f 4492/288/27 4517/289/27 4518/287/27
+f 4518/287/27 4490/286/27 4492/288/27
+f 4519/290/27 4520/291/27 4521/289/27
+f 4521/289/27 4522/288/27 4519/290/27
+f 4496/292/27 4523/293/27 4524/291/27
+f 4524/291/27 4494/290/27 4496/292/27
+f 4525/294/27 4526/295/27 4527/293/27
+f 4527/293/27 4528/292/27 4525/294/27
+f 4500/296/27 4529/297/27 4530/295/27
+f 4530/295/27 4498/294/27 4500/296/27
+f 4531/298/27 4532/299/27 4533/297/27
+f 4533/297/27 4534/296/27 4531/298/27
+f 4504/300/27 4535/300/27 4536/299/27
+f 4536/299/27 4502/298/27 4504/300/27
+f 4537/280/27 4538/281/27 4539/300/27
+f 4539/300/27 4540/300/27 4537/280/27
+f 4505/301/24 4541/304/24 4542/303/24
+f 4542/303/24 4506/302/24 4505/301/24
+f 4512/305/23 4543/306/23 4541/304/23
+f 4541/304/23 4505/301/23 4512/305/23
+f 4511/307/22 4544/308/22 4543/306/22
+f 4543/306/22 4512/305/191 4511/307/22
+f 4518/309/21 4545/310/21 4544/308/21
+f 4544/308/21 4511/307/21 4518/309/21
+f 4517/311/20 4546/312/20 4545/310/20
+f 4545/310/20 4518/309/20 4517/311/20
+f 4524/313/19 4547/314/19 4546/312/19
+f 4546/312/19 4517/311/19 4524/313/19
+f 4523/315/194 4548/316/194 4547/314/18
+f 4547/314/18 4524/313/18 4523/315/194
+f 4530/317/17 4549/318/17 4548/316/17
+f 4548/316/17 4523/315/17 4530/317/17
+f 4529/319/16 4550/320/16 4549/318/16
+f 4549/318/16 4530/317/16 4529/319/16
+f 4536/321/118 4551/324/15 4550/323/15
+f 4550/323/15 4529/322/15 4536/321/118
+f 4535/325/14 4552/326/14 4551/324/14
+f 4551/324/14 4536/321/14 4535/325/14
+f 4506/302/13 4542/303/13 4552/326/192
+f 4552/326/192 4535/325/192 4506/302/13
+f 4541/327/27 4553/329/27 4542/328/27
+f 4543/330/27 4553/329/27 4541/327/27
+f 4544/331/27 4553/329/27 4543/330/27
+f 4545/332/27 4553/329/27 4544/331/27
+f 4546/333/27 4553/329/27 4545/332/27
+f 4547/334/27 4553/329/27 4546/333/27
+f 4548/335/27 4553/329/27 4547/334/27
+f 4549/336/27 4553/329/27 4548/335/27
+f 4550/337/27 4553/329/27 4549/336/27
+f 4551/338/27 4553/329/27 4550/337/27
+f 4552/339/27 4553/329/27 4551/338/27
+f 4542/328/27 4553/329/27 4552/339/27
+f 4486/258/17 4507/341/17 4510/340/17
+f 4510/340/17 4482/256/17 4486/258/17
+f 4482/279/151 4510/279/151 4509/282/151
+f 4509/282/151 4505/282/151 4482/279/151
+f 4505/301/23 4509/343/23 4508/342/23
+f 4508/342/23 4512/305/23 4505/301/23
+f 4512/284/198 4508/284/198 4507/283/198
+f 4507/283/198 4486/283/198 4512/284/198
+f 4490/264/15 4513/345/15 4516/344/15
+f 4516/344/15 4488/263/15 4490/264/15
+f 4488/285/7 4516/285/7 4515/285/7
+f 4515/285/7 4511/285/7 4488/285/7
+f 4511/307/21 4515/347/21 4514/346/21
+f 4514/346/21 4518/309/21 4511/307/21
+f 4518/287/197 4514/287/197 4513/286/197
+f 4513/286/197 4490/286/197 4518/287/197
+f 4494/268/13 4519/349/13 4522/348/13
+f 4522/348/13 4492/266/13 4494/268/13
+f 4492/288/163 4522/288/163 4521/289/163
+f 4521/289/163 4517/289/163 4492/288/163
+f 4517/311/19 4521/351/19 4520/350/19
+f 4520/350/19 4524/313/19 4517/311/19
+f 4524/291/10 4520/291/10 4519/290/10
+f 4519/290/10 4494/290/10 4524/291/10
+f 4498/272/23 4525/353/23 4528/352/23
+f 4528/352/23 4496/270/23 4498/272/23
+f 4496/292/153 4528/292/153 4527/293/153
+f 4527/293/153 4523/293/153 4496/292/153
+f 4523/315/17 4527/355/17 4526/354/17
+f 4526/354/17 4530/317/17 4523/315/17
+f 4530/295/196 4526/295/196 4525/294/196
+f 4525/294/196 4498/294/196 4530/295/196
+f 4502/276/21 4531/357/21 4534/356/178
+f 4534/356/178 4500/274/21 4502/276/21
+f 4500/296/1 4534/296/1 4533/297/1
+f 4533/297/1 4529/297/1 4500/296/1
+f 4529/322/15 4533/359/15 4532/358/15
+f 4532/358/15 4536/321/118 4529/322/15
+f 4536/299/195 4532/299/195 4531/298/195
+f 4531/298/195 4502/298/195 4536/299/195
+f 4483/255/19 4537/361/19 4540/360/19
+f 4540/360/19 4504/278/190 4483/255/19
+f 4504/300/161 4540/300/161 4539/300/161
+f 4539/300/161 4535/300/161 4504/300/161
+f 4535/325/192 4539/363/192 4538/362/13
+f 4538/362/13 4506/302/13 4535/325/192
+f 4506/281/4 4538/281/4 4537/280/4
+f 4537/280/4 4483/280/4 4506/281/4
+# 7168 faces
+
+�PNG
+ + + # ++#"&#*, ##((0843;: ("
# -&)!.(;"2+;3$#"%&(&(%&((*%#(&(+(&,++-/0.0..010�)&1-,8/-0/020.83.98/333568685689854868<95:;;7?@<>@?@<=AB?GH?HHADEHKLQRXXC$B&E(D)H&N I)L,F0
M1D9V T P,P. [ Z" +_(S3V8X6
Y8Q6U9X6\;I? A>;c&k+`>s,
r-y0x1@?@I@]@LB DA=UJ%]Q(aAdEeHhEhFjHjKpNpPdX,k]0wV n`2wi6~p;BCCCFHEIJIEBHGHMIEJKKFNPLNPFPPMQQNWXNXXQMIPNQVQMRSSTVXUXYZUQXWZ]YTZ[\\^`V``]`aa]X`_dfb\xlD}pFtPbccdfhfhikfahgknicjkkmopnpqrlgxrl}wq�7�o;�s=�zC�|S�~C�|v��L��V��H��W��]��b��{��d��p��i��t��L��T��N��W��g��u��h��m��x��l��y������������������������������������������·�ż���������������� +#BÁ�E �!�B8���@w ܚ1@�"i*�|a����b���0q�*�6��N�X�-X{)?p�߭�\��n���n��G��<�O�tfTr����/�O��9�����9�Bn'�ПD9�J +~��a����$�D����N�q��h(_���XN`8�j���������)x.��g��[ xZ��zx�T�y�gB!?�w�D�|�����V��R���5��F�!O�bڎ����(1�x~)�ZKA1 ��V�JXL�h]�
�Z!�~�d�;�/�����KZ +W��p1\�J�d�VR���ps�3m��A&a8;Z�3 +�\���8X�!K��M�b�.yj]7�,b�>U���s�ɶ�h�\�����bߡ>f�u}-:���7����o#�z�$���o|�덲�(L��ן�,7������{�W���7n�����
�pk}}���ѣ��+#+�����9 +�^kk��i)�~��9��$<{���%���|��~x'��Ok����Ԕ�s�(k~2 + +�јt#���l��s +p:�y�tv��"�FRS�W��`?&�+M���8��lꏮ� +�rc�&��?Qh���r��1�oKX]^~+���cp���������D�6��L�s��O+8����6,-�Ѣ�:�/�xc +����ux�
�.������`"��d�x�� �nx + +����`:��{.h� + +�Fr@�|�m�<�8VF��/�q��`�c"���cco� +�.J�������4�
��`�b +��� +Θ?Q������� x��)��}!�?�� +�:����a:@�}���1 + +���U��2 +p0����@�6gP7{��/�8���(`� +�T�_/��H +�>�& +��= +�J�`(`�H@� ��58�����6,)�9PC<��� +0��c��< +�O����h�0t��Z' ;k���cz�)��9�dG:Z�0�ggu��v�=U�(b��r^��L����%��~����� +s���ԫ�ٚJ�̒�ǥ����\�s(����f�Tp��,3gs�}\���(�����+9P��)b*M��b�LY,�{��+��,9>��﵄�^@� Ӛ��;@����/� +�H + +��V������|}N�)��Ϸ��O�O�I٢�'[O�'�o�7�^-=�m�i
�W��<X�onm�����?y�ٓ'l]�|�䇅 |�)�E�~��:��,B�S�q�����O� +�i�{8o%�.< +Kl3�g@�w��k���OW�ȫ����C"]���04���y*��0�#��L���o�F��F'��m|�I�F�ӑ�ᰆ��a&���8���p� ��gɭ��� +�����Q( +����4`@*�����@��< +L��&�f���M�Զ�;@� � ��CJ�](φn�Ϭ�=���6��!��~�
~X��X +A���j���w +��A����4R;��-] +��0؞�����i����"�Q������~��<ڧ3Ԗ���? ��]�`M}�pZ��1� + � +8��K/}�R��[��P�x�1��w�N�8?I:����cq(������M�c���<�B䏧�/�x�r%�8CL���N��b~���M�u�� +@o�x�a��H)�*
� |2�vE�l�����+� ���7����� +AL�8�=�\ + +��]�7&'�2�։預�b��=��� 3a0M۞�z�㬉WK�Rq�֧/bY,�`^Y^�� ��JF�<r�'��`W��Y�m��7��z0�+=�T��qh!G���/�5�?�!��쾺��l���.< +��vB��q + +�j��䂝:~>(f^�ٖ`���/������%��'�Ǒ~rF�����o���'�Ώ��K��� +����f�|G�^8_`��<nq� +�DžfPy��AL� +�l��2�2�o��� +��Շm~P��1܂/A ���%�Z�,*o�
��%���/}� +�%�d�um���S���b�`�V���� �y{����f��h@�'6{ + �E�~���- +� +���t�@��"�@�� +$e6��Z�\�Uìx�g 8B� +���� +��/��?���
�N���ؘ ���'��1�%6R8"�< +�������*��<&���!@�M�Sp��hp�lz�:���8n��A�A�u��BtC8�r/N���:9r,?� ��T�qO�
�w���G��z��W�
$���A�1 +5��5�u$$ +�rJ38��XHy +$��lB�y��Р�4��"�O�i�{��"C֖) +���`n疍���eF�s��:�`,M*'���_�?y�����l`�~6hն{VRP> +�?�&�~�3Ϭ +��M@[ ���� + +*eq|� +�.�{�{a����cdFe�[PMN�$�vn���J�= +�� + + +`h��1�(�����"rY�^����� &�eJ�m�߳�c=� +�a�'���^[]^]�n] +v�m$8}�ۖփّO��<��EbW�Lv�i�{����]b + +�
{f`��I�y�r5������! G + +�s��+/��Pf���y�JԀm�pJA�}}8Ǒ?�|�ex�-��=_x%�u���b�#��|� /g^��_�C�
�~Ye����@�\�� S�<�祙, ��2q�yg�ć,������8�>�<�����,�+z�9C��:�nen*��Q��m*pp��� +Pܟ�+�+�����N�8J�g�B�����Y��˧#�0`�L�:�ZaK���v��=��D+��B0������}M\� +q/��5��/O@m���� +�9�&`��_���4`~�zzz^�%قn{_A"+�p.��<I�@_�|;����} +�6�% H0����+C�,���FQV��� +�!wꕞ�obv����گ�ltOB�H��_ +�� +����������]a
oa9A�
�AX�=��V� |�U{����\k[O�ÙV X8�A�R��K�r�m��B�.Q�4�/\(L��|�8[G�p��c>/��gP>�tȾ`q�A1���_l���l�@����ѿ��t0��a��._�ֶ동٢��k[[(BXP��ķXr|�0�n�-�XP �Ӏ���˵OÀ�������K�m��������G����N���Z���(���m�n\{���X1���0�䃃�~��?�#���Q +��.P� +�Cx��P�g +x�G�� +��3�E�61����Ǡ�@��O�W +8����*�c1�g-�;�C�+ܚ�'e(�$�;��� +��/�Gx +���3�-?���U#����o1 +�?��"8�. +z� +����j���e5Η���ݷn��O��s +���UK��tF%�O��?����M|#n�3p]@ۏ<�zM��H��@�r��R{D�Z�<L�T�@�d�h!��6�_�
0:�Bʂ�9�/�躦$�v��Hy +ٮ�)D�����pq�"Yi�R!��0?3'5f�<9)s~�<6�j"���@�`V#�b)0�g*�;7T|�Mq�D����� 0
�!^�z% +\�C�7�����H�� +k�E���-/�X�@
�nS���*$V˰��|{B ��ρ�M +"�l�2��Μ#W����3�srh��������ڹL4�M@'��z�k5��M��$fN� +�+����|�8�}@I�BZ�@ոt!���ȫ��A0�6����6P(\�"�� +��a8�;��Inw|#�������������� +�� +?g�??g�u��?j8M +�?�G�H
��^Ց�+���$�Թ�� �������V + ��l}���w + + S�F>2d?�~z + +$�泃/���{�F�V'��� +�� W�t��u ����L�0��< +�M�� + +� +���»�4y +C*����b��A���c �QZq�j�W���{) +���V"D[�ۆ. +T2t����]}my�@gb!P@���H +��b+$�F�Kú�C������S +t���RB���|P����P�.ԶjsΛ��I�, +�g��]S +y�l�],�t����ijO�����@�&T< +��h�fR�"�'�ȋ@p.�M7�����&���q��ص�hߡ��遅�h��ޘ26�:!?�d���3���b[�0�ˉ�S���B�KN�Q����!��7��=*�0
�Q@W?�lx �>)�+��\Wp^mF���x�0��R�U��!ڿ�.; +����1���Q[�*��S +��)���v���� nv�Z�� +��Gw�W����^��<���K�g�:q/��G��A��& +���}7ٝɢ��ܙ�X�x��ѩ��J���j��Y�S�^h���� +���-����u� +�z��= +���22{ +�����r>�~o +y +�F���& + +��9���Ft������`����-�E���@x&S���6}�����c]Dj���s벞i��=bZt k�I}��f-�٪��s�&h?�{<J2��i�s��� �&�^,S�K�H8�-̙n�v�gE�J�w�= +�*������M +�{�����0T$�8�_��^8�q +����2�b����5���b�XZ�t&��ih� Sӣ��mKҺ0��x��� += +\���j�Ur�(���=����+��o��D&Yr`��`B�x�ȟ�}��`؇ +r4-wP���*k�����P}���������$�N�F��Qg!2>��a���@��a��' ���.��3��
��CPѰ��n�q�Lp�o�'@��1C +��7ys�C��q�
6��j {'[�F�f$�ߵ�AЄ�����Ŋ�s?x*18 +���KSHn �<�PD��2�����oB]�Á�G�F�B���C��/8��K�Q����v�gN42P�o�fu}��4�d�K,9?K���١��Y|���P�F����.(��-ͨh(��7�A\��s,y��%����/�9t�e/)����͡o��7RtbM�w{��a�뢻�� +��]é�5< +0��m1�|��s*��0�" +��n��ָ�Ȫ�1��@�0*�(S*A��͒���{= +���~����h- +��c�CL�I�G��[� z�~vf�c�+ +���f(3���s��.IC�3�2�P�^8��z)��*��W��=H�K��o"GB&��Lt1��ԯu|(|"�U3XZ���4����O�]�U�Ƞ0�M���K(��̯��������2��"��Ts��9�%A�lÕv(B����Įͩ۞�.g�o�F����*!�o +����:V7B +�X@I@�-3��Hx +'��)�N8�7�Gs����H�Cڭ��B��+m��Hg8��,D���,o��>��?�~ +`��'ɘ�~�Ɋli��1�o6���X�Q�|���`������O복m��ן�7�v.�R�G��M�
~�0�e�4��թB�W��.��˜�/ͳs3�|�\,Qb|��x�N��ß��T�.A����(��gV�,��S d�x��ɒ���o���~��v�>%�S��%Ǜ�(�0�L�-��QJ +E�k��0���pAc,勥�B�z��_7t�K���� ����$;�<�E���w�݁�^�J!y�V��2�]�n'�
`����[_1���mE���Hz +���_�^r�`�##c7�>��#���ӏ�X +�;� + +��t�D7=;s%��q +� +�I�6۾r��Q�*�����P?��ّ� +�θ����
L��u�=$ +����R +�3s[�?�IΉ��;Ԗ*=�#����.|���m�s#zo�v�Dz�m�T���nx +�|q��s�����l!�³T�R
�k@ +�!�����L4�8��}ԕյ���2q��xVZG����XA:�WQ���P�Ց�� �Յj67��&�e�-����)�0�F���M +`�N +�+d��$K��� +fT�'*1��[��U�ړ�_��M���W���^�Y�!�Wd�.L�.�?j8��2�\�s�,+��\K4�R� ��ۓ���{��ĩ�U"���l�^��9
o;� �s +��=� +P +`�b��z�t��px���B/�F'��] ��q)(=�2y0걾<� +=����?�P@ +��}�E/��8MK?�G�a1��a�}o�1� N�D?e�����c�A��P�ȟ/�/�8��7� +S�d�+/ /�����\��0�L��������B����j���k�|� + +R.���Mef9l-��$�:�|y��Ca�^��t`9���<��̹��jyu���#�3 u�2��x+��kkK���@2<�.~��`m
�a�u��_�?��c~>'^��� + +"$@���?^]�� +-g! +���0�6�w +�h'�NԶBב +�s��W�٠0�59ɵ��=<��;�F�>� K��i>��c ����n'��W�b`�?�rʎܠ +�~uy2��0�و_]�V�F������P�h���V�xCu�T9T���@`8���]��: +PD ��;���;��] +k�����M + +oZN!'㿶plOd�}����O��ZH�R��j�����t>�J[xu��`��w�`w@>X +@c����hJ� +�� 0 + + +Bc&�n���̎�S�y%.�(t�P��Q� +��@M +��m��&-����:��o>��lyf˝��ʷ��{�َ�@ +�F巚[+?X�x������GY����}�[�p��k����GW�a-�������)kL`v� +o�P��lsw�����F=�nj���� +�< +�J +`�6:41[b�=K��9�P +fh�(Y�m7��Oy +,_�Z%��� � +���Y��D1��̐J�3�a\g�P��c�gf8v��`t�����7D�lJ�IbI���?���� +�����U����ß`�ŋ8ٳ/�E��S�F3o����)�{W.,SP�@����ڛ��n+�wðJ8
��D�#�O��� +V� +�J_�r���ڃ�~ +�)�i��'��= + ��L4zTl<��GHJ�jt~���N�#P{�V�,WײU˫��`',��@m�a5WaO=6�c��<�Ώ>� +����).����K�B�[�y{�q�q�V�t+�moն�YͲ���Pa>S +ob�3d\����'���8����z��-�2���m�������T���v}n��x �O�j(y��k������C��uqvtj��f���&�J��!DK��b�a�?�q����A쩁0�#���ϟ8����D)d*,�� + + +��P�C_���LTɑ�TXz���%�9q %�(�����~��R���1%A`%���S�?���KV��Y�| +I+*9*��`_��މ�����s�K���s�L���垣/g���3��KȂ� +�#�a��`�Y�P��k����W*��*�_�~�����^}����?�h3��k������a�����B5��AW��K�4𗖯�J}P^{kyUL�ŷ�BT�k�)XYZ�ӅaݰEuqu��;A�=β�ٜz�{����������O��?� +k��e;!�` +��J�w�hq.��N�6���F���%2��Ŷ�EH��j'����l����F +��P +<�Y�[� +3~�ܜ fxU�'&��6�6��;�N �)���� Sk����^ +����M���j�#l�c�_�}�7�� �M +(:?@[ +@b(�������>Bb�V�`G����[�Sh�3:��M��w���4<��p�o��9s��q +aW=@��%X��*�� ��PQr�͠3h��4�����@��~GO +�&�+<x��'��r��jx�� +E�^ +�l�I���j +T���B�?�@�ju]��>sS + +� +��/� �3�
��K��< +�*j��Ym�Ϋ�j����3�f�����mW������:�JM4 +�~�D@X]5X�[�6�_m�;/Ne��-܇�������%�\o�vH�M^ {9h
�� +�W +@�G5�^����%��+ +�u�� +
����j���Zi7�P)�Q�q��Z�)갫�j�� �����Ϻ +@�p�"p��� +p��O&9э���i�Y�ҋ.��}�>�U�-��XZ3��'O.�4�Bn�5�>�O����N4`�V�T�Rϡ����)������U�G��h�k5�w�X +����O������` +�c,�S�>��q +@�f�� +��X���� +�o)%9�ū�<e�i��,A�͇�üoO�� + +� +�rA� +����E���� +� +�����Ɗ>�`H +F��C�?��eD�����0$#���AA}�}�4���?h����i��?�ω��|~q�óǭs�ɓp9�(��G'�<�O +��t$s4y��-M-1 +��Z +�>� � +��$ +��&�� +�JS�U~\�G���]�0�jS + +������h��@Aw���������+�ݹ\�� +� + +�>*��}���16:���pqB�1j��H`6*�O���?y��_.�f��I�7���R�l�_�����{*�{n{2�T�A�� +���v +�' +z�&n�������")��z���fF�
�����i��<���Y0-���G'f[�m�;�) +�� �� Z�`(�$�iX) +ie� +@`�x@ + +�Ub�8C{ +��hRE�Mu����G`;jJ����?�� ���}�����D���.<��ŧ�H~1�V-��?\�6�@ 4�9$'t��O[ +��~l�HvXb�%f��f����:�C��1=�%=4&�K�s@p�^!���[F ���+ +�S + +@��vӰ +G������G?�L߇��G����q�r�b7?r��g�BQ�tC�|�t�h +�b�[����+;�KQwmnNh��)�ka~�H�����Z�܍��L�FG��� +˖�>���] +�O���gi@J w��e��A��! + +�P=�W + �8A��!k��4���?��$ԉP��+3 ��dZ% +0E�R!�͊�f�����h������G[��JB�*��y�<�v���[�1N�P +���Ne��G�oA YvL�"������%�.�%���i@ԏ h� ++��ך� +�����:V��)x�MYьA��
�e��l��+�7V4����>��ۺ~�,4"�7'#`ttf@84oH:�?6� +�yk�M���:���x������0���POH�"P[\|Ě +ة�ӫ�VE + +��x�PD!���8$�Ѡ +@���> +�.
�9�Sߓ��~ + +�UkU�����Z��}�+�o7ۭ�W:T4�V�~��V� +� +��7hM� +��� +E�͍
!��bY�[��-K/�z�5�ó�
�������d�[�n�P����zk:n�}��6�__{i�J^^�X�^�nh���zo��@�_�CW��]�uo�*y�9����Eos�hLI����Xd-�+]ް����r1lD�T�n�r�wz�#� +�[�B����&6P�����N �B5����ݪ)TP6pr�־ƚ +��������4��_��{������ss� +��9���y�}�Vh1�����c +��J-�E������f�
�����(%��Ha����3��L8�E���+�Ia��26R���BQ%�K˩��|�Du�F�fsʛ�"O�\�@@�i�2f#��2`߬�_� +�( +U��Tb3�~
��3�����eռd������-{Z3��?^U�꼎��o7�WD + +�eEY��u��D��Π/���5h�cMN�壯Q!L��AQQ)� +nx(�/� +����'��}��<p�Ĥ���L.������ЩS�����9<���3�>3119iG*����6��ؙ�������P��'߯ێ�7��9�u�ʩl39/�?�9���P�J%X=��]�����CZ?������Çgt^�|�^��%��m[d���� +�2��L��U��ڤ�t�p��9h�����kBe{(�o��a�n�p��pۮ +�W�]5��p��ll�����'u +��1 +�jH�|��(� �{��� P�8 +g%�y�۞3Y�Jl��V��U����G���^�P�?����L�l�{*�^��� ��<�qb�V˄�=o�-g��Y ! +�J`�@��d +�R + +��&���M�Ků�e��R��O_,���\����mN{�ʼn�.���ds�}�Y/����_�ӄлl���|�~�_y�/�66�z�mzWǖ��?1r��;�Q�G�_�ק=������#��O��k'�����P�G���n��htYnz�ݘ�m])u}2 B����J�e/YF�t��/w��c(�F��2�� `,].�(��~�\�(]JCnvrv��ˊE +�������� +���" +3����s������� M�3[��=N'X3mA����=���j�� ���!�Ѷ��P;��f���������5�D��8( +�l�Â��Tr�}��/���9D\��t�e�n�p�^���Զ(@���)�WZx���� +xj +�w7?#C +�-�����N�Y�#l �*~����� +�������x�5��q`0�"9k'�ut��PXβ +�e.�c@ @��FR��Ъ +� +Jk� +�ڴ��!� +�Kuy�-����<�v¶�D���EO�<�P@���_ +� wۆ�C��2 +������ΎUT����L�s�7�a`�z{�QZ�u�VB�+Mzg��U�B����w�F +� +�>g ����D +�P ( +�p���A� +�!s��rO0��k�� +���m'J��O�� �慗��`�
2��Q&�\��r���rI'�� N�H�3���x����,__,���|hd����LXn=��Ӈɞ��b"� +��M��|sJ�CY����d��U�gx�*�LB8�\�G�Z���b��TX��S����F��쩧�#is��@� +�֢�| + �� @�J�#�IN� �6��u�>P�`��1u��T$�5VPT� (�fV��C�Ԛ+J�jVU��K���zt���;��PK +?_��O�ĸ��]79!���ͽ_� ��Fߡ^��\�NdF��r����F场���?����N��������~��� +<@ߟ) +Ǖ�"�Tƪ����f������rݍt�o��3" +���k�q�����#G�d(��� +|�g6`��xgm$�,s����;Wp�q��r��@��^�U�s�ߢ�F����ƪ��G�i��24kvڝ�n�&M +@C;��,@�����/`�@f�wU7e�c�sq�*���rSԪ_i?�B^�o�]���t��E�u�,^c*�1�����e���Cܦ]ӝ�m�{O�/���Veօw:"V��h{5s�&� +�LHz� +�I�3��*<�iMyJTD4�f��>{U�G����[�Ѫ.˽jeD�jV' +��0��� ����_Q +@6+�.*_�"����aeSǘ�f��aL)����s�&]x�n �2Ƃ�+�//։�KC7I�G��`.+b�áe��Bf�q�2
������vd�� t� �[�)W:+:��Sڭ��� G:Q +U�+����抍\��n6�r��YzR�\ +�M`��O���flݦ +���� + +QW�c��#2��x�ۢ:�JFq����A8���wt<8
� lњ +G�
r\���q_@ �t�ѝ+����KC��h �+gں�V'A�a��`��&! +�k67�%
�1�ki�1^.��r�����DؙhA7%_��rQ�m�(~��b�{*/��|ޟ-)Q)��Ѐa�N��z�t�C(9}8�L&�yBlca�[�9�F�&�ٓ*�����n�p�N����SF�_�<p����` Кn��ÿ�����x�2 +��@��+ +@͚ +@�F�0;�˃����H��� + +��W����i�l��D�y�������Q-��**�P[�2���~x�U� �D��0�A@��~3������M# +1E�y��Ӷ�} +/NR�ͅ�_�T�EYQ� }O��V���J�R36�����!�[F���@�k� +@-��t>�ii�� +��]+�v��[��m)��uYK����b�olvO�f�u^C]�g�i_�zY%R�~�������> x��\Wi���溎��"t�Ư<�I��ߢ� QV,�L�����J�[�ɹ�e�)�ؼU��l���e���(�K�k�S3����_�?v����W���:@�
7���Z�����ˠ?6 +@�CS@���ZP +�7�n��C + +"���a� +FK�D(�X|d�����K�������` +�N�( + +���J���N�U�I/y(%�K�-� +��\����2'%�cدӨ��Z��Taf�ԩ� +�� +v����ٹ<w����m�ͱ��:����/�z��?2*�?~�\����( +@;( +��fm�n��b�/��-�z\�>�_��g���F糟�q�Z_�Ӏ��;�ಀ_�v��{��/S��*7��E��ު� +�J���& +�aЙ���f}L�������s� + +@��� +@"� +��" +���ʓ�0~Ě +���6% + + +����w6@6� +@5� +t3@�%1 + +3�%� +b��Ke!"q���bt�0��r�8�{�C���4ڨ�2��JL +�MԆ�U*摙��:�H]�L���-���!C�}�U��E��Z����#P[�i���#P� +��<�a + +�r`��B��tC���V�"�)� +@��tJ�V�>n`�) +��R<J��@Q?�^Z�^.�7�@+��:���O*s:�-�������lW�䁭���!`���J[�H��,��[�nq���m�7/�d�FK��ȣ�����V�B>�x�������K������mpss�~�ƃ��$ا�_�O�� + +@X6��@1 +@�1�A�n��g��`) � [��3� zR���ım��DP.F +Fg.�8������=���� +�]@E��^y�~`0�z�M���A�]v\%;x����%��_ wۆ��O��6 +���l�����[
Rm�����f߽�?� +�� + +������ + +�5�� +�&x4�-�<�� +����
E�݂�����(����F�HC�]D�+/�A����̒u�3 l�O0������ǡ + +�;���DW�uof�Z���� +�y`�+� +�� +�1�X����~�@ + + +��_8��R +�n�DІ��\Y9�;C{�>�L�Z� + +���O��=�W({p�#�Y�k�����wG�%̞�� +x'�x�m9`�����3 +�?i�j�u�� �
�%�Zygی�f&G�*��ePG�:�j�'S +�o�� +� +����^H�_�`�_"w:��G�������H +@b��� + +������=&��=��ǎ�������#�1J�O�!�<�(t+�?�J.�^@k�[�ff".��z�����J_�lqqim�*�c�����E +�U��5ڵ�nN%�8!��ܬb�R�[�Ѵz�;���AS +O`!���KۨVڪ�w���Q�2G! +�^��ݻG�=w�s�{e;� + +� +���q�b�'V�'��}��j +�����1!�{��� +@�1+bb����� + +�� +�H�^���B�j�� � +�ω�7�#G�1��������� ���KS*ed�`�>�Ed:ط� + +��' + +� +�]i@�I�T� +�g'G��q 8�x��b{X���fI +ňt��F��Tt�d +�� `����n9���k�.` 5[+�,�['���o�xc/��@>�DabR ��Jh{{�z)`q��)��D��O� +@�̙�F�2lԦ(�@�p + + +�y�}@ +�߇N����7nx��"������@F@�f��ǎ�
�3@ + +���?( +���#X���8�z@�E +���@��?�����A +f�*��n�3m������ +�U����i�����H�@?Q +�' +������J�`n:���:] +����� +@����f�?� +��.� -��'fgG>���W�=�>��f���> Hۅg�/�tyf�z�j�t��0Q�ׁ�0`@�oV�3���ˢ +;;���u;��yq�� +0���{��� + + �g1� + +�x�� +#���m;����e��lujyJ�@t`�R˴*�5T��* + +��.$�F�e��l9��OÂ�?Q +$��*qW�l=���$߮4i�g@9,rf^WǵLF +����v�����D��} +���=��qF/�l( ++�h�ա�n��O��V���ڳwtl����ϝ��� +�K_^��v��y�ߪ�/������|���U�0��G�����.�R��/����P�bab���b�2<��I�E���QfX��ܣ����Z�=�8 +��
�<�gj�a��3�y욲�[����2`ɑ��� +o����s +:���Ģ�M�@#���]ؿ���������w���Q�I<�\Gz��Yk�!�⢳���~�����T��)�×��|;���3ߩ�yJ>W(��P�����UN�5y��}��V�B�� +ͨ�ʡ2���-��P�{� +��W��`� +%ڢ + +sBo��|ӑ�kn��)!�lަSZΝ���B�t?�L�
�A�8!�m��Bi��gr�Z���B�Ia���_%�e�s�� +�9�� +@����6z2�ԍc���1 +���ȏ���R�����j��9� +���~��RBl:��Yi�,b +�&�~�p�c���F + +@�`$ +V��ư?1���w��a��-Y�:IoaS�٘��)��-�T���S��� +t����Rr]��*F7.�D�70l*�a +�ҳ<@`8�9B/ + +P��[�:�� �OO��٢ +��Dh� +��! +��?�)��8��� + +���,�0�ٲ��$@T��ڳ +�+�
P�)����� ��/@��[P +ˇ+ +���� +��W�=+ +l6��_M#t��[o}n
�=,m[��ڜs�A�` +�=0�&&��/wg��� +�
���ܘ�,ty�\eF���0�Tr���_*G��L~�#=�+��������ϗvjGE{�J��IY,�:��q_��쉓��|q����lpA��P��i)�f~"����c��Oۗ��K��@B��z���#�p3�h�E�8I�>E�'� +i5#�Vn + + + +�g#(���T��䖵���D� +�/�d(@��0 +�w�p��o���+ +�� + +`ϲ?��`��
���M�4g�~S���h^�i��"����g�b$4s->� +����Hd��4����u�6���@H@%+�X 0���ܑ���������dU��wJ S�b +���8�� +�'c�{Q�=05������̜����}P�4EB�q�dg������rT�2 �'yP�=���qŋ/����-��-YxX<��U�DwN��6y�2��Sr����0 +~����+�a�� +�3��i����Dpq�"�O�`�� +�llt�<�[0RE�kQ~.M��� +�
4�Ȟh~&Z�q�� +�?@�pY +@f0���� + +������)1 +��O8����*c�1�; ��}V��̸��� �f��$�^��w�㍁8҇��2�r8�����f���W +��P��EA<B�b)������� +�c�a&D
`��4��4�� +��1 +3�e֍ +����N +*��T`F/(<엷f� +.�����q��]�; +�J��#�w�n���`���` +�& +������,�����#A +@X�sPЫO +��qQ +���mX#�=A&d���A_�]z��©G7zף�ro�ܽ�T.�J-�O���FW�Pt+�,��mn}��q +$ V +���x��w2:�K + +�� ���{����}]�����>J/ +���b飛:o�X:]�Q�B��Q�K���@ѩ�쳒?\��T*��1U�!�r?�P��|���Vz���B(��e�m��F�#WE~�U*�f����E�|���>���< +��.�]��$����[n(�P
Xk=�����V�c=Iӟ�)�_�K� +n�����?��`�� +�ff��r����/��zON�Rc: DžL��J��1/99���� +N�&XR>V��?71��V`���������җdǒЦ +���P�oa�?}��U��i�`�l�~�q����C +�� +3�B^^>6'0��/w�q���+?'�W����c����b:H��퓗\�p��ҩ����|1�LH7�+s��\��?g�ϝBc(ݟӡde��|I.=�0?���b��h{q�~T +���;r��'��/�`� +��fJ��娫���~�f����o���n�z7667#�-*Ua#*u7zt�뮭�m��m-���앻������K7��Sʕ6���^�S����zo����)
��ig�n�P��=-��θQ<u��?��=��v�_�AZ�����`�v����Z�N�J�]�u���o77����+��_y�����^(yA����Z�U`���i����F����P�nY�^����?���D���|c���m��Jn!X�/�zђ����F�s��ƍ��h!��{���{�����7U�`�n�p6��C�!�_�+ +��
� + +��ڵ�Y +�;$QlR�N4�d[`� D +�Th�Q�a^A*
ԐR4�a�`� +? ��~x��6�3��ғ]��q%����+��/��;&c���x�51s�G�xk��Of�Pԇ����ϓ'OfU�Z{�}N�M�7����v?��\�\#�=o�[A$L�{�!��X��ԏÊ�q�Uy�+?���ZKP���]����e�VC�s+��u�f-q;.4/~:Q8��������zS� +8�m�9����[��L��U�2o`�V +�M�4���zz�!^��{���c'���N��d߾w��{�ֱ�B8d��㇏2&��)�Ivv[Wd� +��)�x�B +�ʾ�CL�bl'~7�1�q*
\�D����x�R��rAxD���4k +�10�ӳ{wOO?�468<hw���ɷ$\����"V��u��!Ͻ +��k�QW!s�4�cǷ���}ȸ� + �� +O��m�)є�[s�-# + +����b�8qc@���<�� +�Y$ + +�¶`��\
�
���fӃV��6��֥F�B;q��R�H�X,-k�m㗵�������/�}q��F � 0p��Q�s�)E�`�'gO����������4٫�� +���Lw�,�(��Vgw�x��oY���� +�T�՜���D���� +ٻ_4F + +`�^� +�w/
s��Cy��Ln +�6c +@�A�ػZ��Y�>����ST)�Y�8J�ik{Sw�4��,�" +�æ��ߡ��U輷��o�
���� + T � +�p���̻�Z;���$�����~ +�c���f��|��^�:��� +k����2���;ܙ*��H�O*�@`�;:-��T�=f��OQ������8�2��: %� +P%HaĎ<����Dab���ɔ�S +�< +�y0��BC +ը<
�;�����͑fW + =��� +T�Tp^�3��w��t + v +�� + �P.7�+�����(�u���ʅ�ɳʲ�sC��88t�7��*G��Tq�< +�tɗQ`�� +�51�(��{�& +��(zj"7���\|u@8�m�9p���"�Aj�'� +�*��� +%(���U� +�W��{�(��G�<�� +�,��� +���@T9 +� +<S�0P�8�~kH���< +�3�={�PˀdX$;?@"M� +�Mȸ��'�L��<=�f**燘e�N��� +�����&�?�
����{J����C}��e� +�{T!�,`�u���x�к +�6�����LC +��o�#'�HƃP?��P�mmL��o�K��Uo\o�`:;t�RY2���0i�Y�;��3S� �e�JQdW����v +�=13� + +p7*6ĨzN�Po�/��`��=����>+�\h> +�E��������~��w0��}��??;�(����_�?��_{�+�������_��kH��� +��O���"�Z@��_�Z��TZ��^�j������o�`U +@|X� +����{��ň�)��+ȍ.�x����yћ��h4�>�?�>yAs��]0Ҍ���<�fʄDY@0�.cX������� �'E�<6$ +�����JT +�Q���*�� +�_�F�r�82=U�W�����*3 <0w���
�ςfWa�W�]���<v%�#��R^_�^Y]_[�6�)�\��|vh,�f
�4��a�J���VZ_E��(=Xy�:�J�����f����Y� +VG�Eg�j��yJ���c�Kё(:�� +�;Z��LQpv>D�����r����T�TM��S�ܡl&��*�YVh%�� +J��U���K�y�0!駦�������` ���b +��
F<F�z� +@@ + Pz��,�B��`*|��ѿ��O��i�����2ͫ���f�?H��* +l�y +@|@JP��R +`�1@e�����]��:�w�����@]��,)Yvl�C��KC
��dNf����C�}?��뵡� + ~ �r ����W�0\+ +��q�%�8p$�w�@�ܘ� =ƨ���8 +A���3,�d�5�/R�W���P�xQ��� + +駢rq"�ՙ)�Қ��;N�<�UViӡ_.��y3�&�� +ӗ�n�gT�1z�T*_��X�X[�g��U���t.Ϭ&ih +��I�;� +@�lֺ5�W�j�LxR�ȟ��������E���)�?�3�o�H �� +�y@6�V�-u��X�zѾ�-���0���� +�~��z������t�bO�s�@�˫Ϡ��%(���*9��0@�cC���^�A_p +�2�{�� p :�er|A]��Z)�, + +`�9n����(
����3�\8�r���������s :��6 +�U|n!�MH�8j��_�غ��FF����c�5 +X�kv��\��;���`{���\�����.��s7��`�[�|mM��]���Z�후᜵�� �i�Ih��Dz�߱�jE������a�zP�����Q����Ft���Uro.@{^
Un`� +�].� += +�� � + � �'�o5 +��3oh��f��#�s>��;� +�a* +���G��������u�mlv�OY�����|�
�.��O�/]�-�����O8��`�E��x!��Q +@�m� ��T#YE�^ +�< +�z +��< +aE�����D����O-��g� +j������ Ϲ��<5�'�����%<�x��9J�՝�;C����_��� +��ف�Q��b +쭟�~��&E��������� +wSm + E�oHN_+'F�G����m���lE�ŨT)�Pq)��(����ؐ�(]�����g|y{��$�U1v\����d_�������́�VK��y����X�/QB `�e9�W�����J��``3�����SQi=ʮ�i�ݎ!�=�� + +@�5j����w�0k����U��Y@ y�xp�V�ߓO9��3�0���_/�l������ ���v2�Y���\�g��?I܌��!�����P����?m���q�u�k/��&�(+�A��|�����|�^A��Q�!#��E��a+�T���;������w����)�/�J��*���P��|�#K�H +��� +��oAT� +h�u����~�?�Ô�:p��%�J��<nvV�B�U1�
��[��F��p1�%7��ӹ��s���������9xמ^����|���W.,^��??�w`��el��3c<N�����*�?;ڽw`�8ő�ēd�1�,#v���D�Ug�)8QAx����'�s~��[W�81�� + S,�����4*h���\�FI��� +CQE��P +��uQP_ +@�� + � �Ktvl�L< + +$�:���՝a�uk�b9Z��M�1� 9��i +�,s�� w�r� +����顨�dt�s#�����4�ި�҅��O���]�����C�T���������/`X��0:�Ɍg�:ǻ�GG����� +�%J +s�LJ�NCĮk h.\�%�� +Ok�63����p�ƍ�7���'"o�5,w�8}����U��|��8PR��惗�'�pM(��d�Bt�7 ��O���,1�^���:$���= RX v-�C���i��j;�BV�裙l���LD(� +K8�ma��������x +�������3�i + +P4�B"��jG�����R�|=��OE��B +ߘ�+���r������� /�Ao��!���߿xe��~bv��WN������ٜ^����xn`�nH +���퇸�����ض?�
e�m/v����F���CC��
����Y�0~p�Ay2�>d���x�|�_���쿜�~�w�0���s��C�*0����>'���A>�GF��?1d%Gɼ�H���>��!$�9>ȳB +bH�,�~\/_��K�����vDF�z8u���P�o�m�ewe�l�G�C�㶰��i������b�K����İ@�4pS|i���g�=�z +�I��b +�" +@���G�o� +�l�+��7�e��W+�n\_��~u���j�ʯ_/����+����:�����k��Q9�.W����֮]��s��ZY+���H4
JŞe�~y�:����o\�� +v�����o���o`�&+^�3l�`��7��r�)E����Q���+���8 +�rq[��b�������VY�^�A�+7*(�u+���P`%/��(��Ze=U��!(l��~�c�Im������ +Q����JV�������|��~�� (ۥK�r(C)�$�� +#x��h���R�R9��8�ma�#�>� m��AI�_�sQ�����(N������)@�
p�_o +`�����cG��1 +���.����,�L�szJ``��ݧ +Cٵ�_/'F3]�3���q��j�"��:h��v�m��
�-�������j��4`t���٣�t6o��0�U?�X�4�`�9�R9�WE�0�$���ɉ��#�mk��P_���*� + %P6K@�R�r�\��P���r!O�c����C�*8K^���fŶ"[�����퇡�@���*P�OB<���d��E�Ɠ���3c�Q��`� +��o���V% +����F��u + +p�����?�� +����w2�eR�-Y�:�*h�뫫��C�ئn�|�dxr��?���J�-��l���SyP +&L +_�������|]*���x��*�F2�]�;�l����+Q�'�o ����&�� +�< +�]�]l0¾ +|S1f%(��������� +�� +�V@�"h4O�?���G� ���c�J����}$:0��x���Z�ߙQ)�c�e�~��KC��8>�%g2���*�%/�E��( +�� +ğп� +#�Vn��%����e����.��?��
l(��I�&�>C�vo߾������o߭�]A�Ѥ � s �[� +r2�m�"��a� +��Ν�` +@ +����Q���ݡDU_�f8������
/\���mS +A��t�}W;?�* +���m������[�`�O�����t�� +��ws���� ~6čv����-9!{���
+��Q��Y�x�< +����Ygo^�WT��1��٥^�z�`E�e*�:�K�4���4�� +UW3 +��� +�H�4..�Tϳ?$Z�������l��~Y������#����ܩlp�7���<�4���:��� +�;��⬻JD�D�� ���g�� +�Wj����\= +�>j�O��f�7l��qd_~6� + +i�+����[ c����o�u�\+. +�?7�[��+ +�!tS +g�-l�PMP���O��]��{;���< +`x� /� +�ٟ'>��#p� +��� ��H5i��Ŵ���f?[�6Ld�4=���6���ɸ +j�+S%@i�L�an�J�B��㒫i�RZ�g�R��+#rc� +�Df�������'@�?� ��,�?�ɪc��DT����ӔW�l�g�-l�PMP����`��[��O� +;�0�7x9��A�i W�#� +�| +��?����� +�� `��������_�����/���b���C��@���0��O��u>�9��GNU|P�x�����%��b��XT�8op� +�OZ0��x��>E�n\[]5�ǘ"O{�\.B:����Q��&Qr�Bo��Y\c�B��J�* +��?y�E + + +��?��ȝ +�����P*� + +�`���3���vzP��_�&��d���0@971Z(Ou�BW� +c��:�Nk��`�s� �m�N�.���h��p� +�3 +���ƀI@@���sl�/�O< +� +��?>ǽ!`-�#/�Ь��渐( +�� +P1 +�b +託 +U +�mj +�)l�YL���K� +����'���8�����io =� +�l۹�]�,��`$]Z���+��M��J���x��=~�~ +�Y�k��56p0Q +��< +c��v�{������`�� + +H +@ � +x��_2$ ���?�M��x�*� +��%�Q}@q�Z�=?8������= + +��P��? +�(ƭ +�O��6 +��EupC� fN +�´Y +�n +`��ӽU`Q��H�v +h�H���(����q�>�x��CO�jz +��y�{�w�����N� +�* +�= + +�e@z +�b +�^��Y\����q + +L�O� +�;x@�l~�� +���%E��F�
b + +��}]�}}}T���H���� +�q̵ +M�mM��~j����K1�+ T�{ +@ +�DH[G +@�N�'��,Fr +r�� +` +�Q����g��/!�� @��/�$ +�_����%���9���/��)H����) +�G��0 + +@�M< +�� +�,��o�>(n��M?��/���I���.Va�k�w�, +�4� +@ 4��F�!�'��5�# +4��<9�b +�6�Ȝ;��{+ +T`0C��z�b {N� �=�iO��|x�R��d��ĩ� +��\� +��?{�f�`1b +@Z +��#���_n���S + +�F +����(�x)Pu�wF�����hg����?5�篂5�ܔP�?���e��t@�n����{��� +���\ +��V�����(�-kUg�.θT�9�QN�� +v|���?Z�S�h +X-Ge +���}�d|��� +$�� +�D�)���u��C +�[R +ʂe}�+��kW�!+k
��Gjd���D�g��tY؟����sG�ǂ��" +|J(�=Ir3%o"��fFw1��'
�[��'�"h�N +��?��0�j� +�� +`d�� +;X� +q�<-�$��v��t&>3� +��# +�P + +��P +��f�:v�LD�h�0�渁�_]�/��Xd�� +�H� �X����c�O�#$� +��A�HW�&��-Pu����1�s + +�U���8� +ʼn��Q6��LD����H��\���~�����_3\�4�����N) +�
�*cz +CS���B��"�yW�8���@� +`v����AK!x +�<���$@�:�1����}�$ +˚8�Y\���������c +��ⲭe+�c �9� +�� +-��Ĵ%@��$"��Q��@�7qp,t�� +@+)^<]|��t��#�N�N��[|;��� ++�q��)��U������)N1E�]�����9`���| +������J�``7!@L� +i�? ��`8� +�Йܸ�p���^z�>�U��Y�f��҉q�'���E�12:��:��_17ޗ�F! �$W��Q�ヿ��! +BJV��>��qp|ɂ���<���0�ȁ��+��,"�T;tF����& +�����[�vH�����`�X��r��<����|˞5,�&���g�3���A��|�5����c�B�?��������H�����@5� + +�_���[��y��(�����������i �[ +�� +�OW3e��vT����6���P`@.�rd��eʋ�XP<&���*��mx��"P^�����W��Q\�A��J}PDVrm� J�!XX�J�@� *G}�u��D �Wh��My +�ҥK��� +aB� + +sr��z��| +���D}��+�k@$+�= + +�p��0����s��� +�M��} + �z +��X��o}�����`���㉀�~=����6�@�m* +�|����Ni +G<��8V +��I�M +��]6��`�l��L���h�$�=��J�6����ށRyXH.�?'���ޞ�B�N�;G{'H�s�X.v:;yD����-w˂|YQ݃�������:.�����T��e�%.����ӝ���zz��KÒ��0�ɛEP�*G��9Q,V�{]�b�`R3���n�E� +݊����ct��ٱ��X����K���6��MZG)U�����5ѻ�����H�����/��t�>ÿ�̌4 +@+E%�ōdWW(vPFSP3�1� + +�i�v�D7o +Y��P +@hM��5������Q +�4z�k�k�LD�ވ�!���Wz��&)�x�}��c�z٩3��k���;X*?+����̕�\& +2�Ɋ�v���J��;��>��H����F/�e����� )����9���2e�kd�0�t7��E7yX��eլZ,V��j +=���x��� +��<�SG��Ֆ���=������{��H*��A�{H��������x4 +G_'٣4:�=�]E1��ts�� +w�7�zTk��ˋK��ĵ�FWQf��)9D���]nWG�8���T@��Ѭ�9�������&D��*H;N��-�|
�z
@qKa,�} +w�}�6�����@��'>���8HS��qQxyueq~~v��Ŷp?!�\�{�9Y"�"�H7�0�����W)6��!�/)���@���8U��;��b7Du�ߨ[I��\(��vU��aw%"�O���& +�� +�N�6Q��%��s@������:
V7T�2ԇ�& + + xx_9y�} +po�ʌ�B%��q +���0TzF+}�D�0�+5cH94���s@{? +B�"���-M +1��g'NpDˀ'"��w�f�HQ��]YY^��]X^Qrq�Kdې(��|�:R!��x8�(���s�_�Bt���zh.������$�M�,C�(I��/ѿj��v�$E�ph|�/�Bt���o��qL��<��'>���Zb�-Z7= +��ʒ�s +Yc�XC@���d���T��@� ��c!�(����d,�j�= +I��`-��
=�Aw�CSY[^Y]Y\X�_XX���Sྒrn +�D!��v��I�]����찈�V�HٲF@�p�hAp�F���Ԅtmlsq�����A�m ����P +�7�d<c�ɳ�
�#X�q�h��<.��}�������� +���o�H'����O��&�����ɳ
�keB�n��֢Ti��\�� N����r�R��D�� + +�S��H�`��]��/�����>�;����/F�w� +�~���.�y6�/��>㉀���,������& +>J���7��mn����c�+�����VC����J��`��0�#�h
]���ݯ�w�� +� �Χ���ϤJQ W[Y��;
(Z� +�ʣ��O���#%��#��!y�9௨hVk+K�-/J�O@`r+!�$�/�);�\
���+�U:g(�/��*�v|^�i��Q�M\G�[���r�/f�NHZ�Tn�Q?��Q +�[ +-�d�T���|,���2M�FF��*���կ�0^#���������?�����fG_� +�����R�(-���D"�ɔ�A�_ +��"� +�+Țv�bud�>]��ξQ�i�b=�{��2y�c�^���.�P��q�t�(Sչ ~�)�VNGt,dQ��������7_��.���T�Rwit�Ҋ�պ�jQ�����>'-�.S\�v:�:ҧ��11�Ԯ0a�X63w �^IϡNRA��j�w8�s��Õ���i�!^z�� +����ٳR +] +x���[����_��ed�KH/h���_�܋�ߎ�����?� +���N���'oE +�L�S]y����0Rw�BtNzM��A +��Q����'!]�T(2A���3ȳ!�O���
3?��KiO��E��I�}�Za�,_���r4ՃN�i�Ɖ��ĵ*@����DWܵi��$f� �������f��WW��{���6�".Z.�( �^��Q+����q�C�[�=�;TOQ� +�&ď� +��G�w���l����?� +�1e�O��o�oh +h? + +����t����Y}��'��h�r���R->89y0���]�6��� + +
vb���^���%�{@��NjH> +�0�P�Zr�:�%2� ����G����JN��`~q��u�%3��W��^�p�#r%�Ψ`�i�'J��sXS9V�I�� ��E�Z[\����:��e[ +@����>? +Iף,���V���q�@݂�Q�V��h*`L�(q���JaЁ��F�@yNS���ˌz���� +� +����G?�����v%A>���ޚu�c3=fJ�^��>�2�b +�r)�@�W� +>�{y +�/��������?����G:g \ +^����L9�l|$�I�#i)T���e��(�6hP:����K=X^^]^@ɒε���҂��$�ߪl�f��#�*"S �<��곔U�ȯ��J:�j��`�p����~.ɓ�����)�K��o:\XX������}��s�p&u?u�V~�k� +��?�{ +_�^}���2D����~i���4 +�����}[��%\�%����� +y ���p�\��{ +`��F���K�Ct�h�>p� + +��0!�{mݴxg��"���3b��o�l�}J�آ8 +���BM����ɻ��k��Ѭ��]�}�P� x���WQ����z�(����(���%�DLY� +M +|�Q�3F��] +p��� +l�?]T0�V�˳�xA��yGO��6-↮���0+��Ss�PTy��QNt���/ �^��#��|$SU;���uʩ�=�^�;?���H�N85����1|���E�4�:�ĥA +���ʔW]2"�ТLy]@ +�4�P��N$�t��P֝$�=�[+�Sf�0�>��M���$5CP +�yR +���� +���rw�T,~U��o�n��\Y�p�R��J���02*���j]&�Z�g֙����L�#�D����*H�*R�ޛ�k�^��F٪=����N� �������F��CX�C*"�J_�(���?�S̆�J�J= y^����X�������u�ax���q�3�`/ +:{zte�l� ���o* +�. +��!Ӡ�k��ir +]~�xA�7��R�^���?42&�<C����^�@� +�P���!�����D +AϿ��oA: +�� + +A4��Z]�9��� +3 +%�pH�fE;�I�� +7���jY���V��:PtR# +� +�{�W� !���4� +�K��1�3.v"ޕm����GL�6,�� +2��K?�Y��p�$FT2Bm& S!��%�������A0 +�zx7/��F*�H�(���Ͽ0&ڗJ3P �������� ^�����U +�*���8�� +�G+��.O�@�=� +S|W� +A�t� +���J�n�J�T��K#� +��]���W�ܓ�C�����CЮk��(s04) +�"FĚ;d`nf3��=2R7Ί9|�o�Cq�$:B������`@�u� +@3��t'��1�{()��> +���s� +pLG����� +�T +�J��|����ԣ �UZNUWYE���m�E��M����\M +��
�|� ��<��e���6�{�z�B�Q��O�K�%�F��m�`
��x@�D��mh�aY`�q=S�-eu����} o�q##�yON5�险�����
�ͼ2X�����v�@� �ׄ#%r�V������`rT�֖@���.+�ټSJ���DPA�T�S�s�q�2�b�tJ'u��G)�ы0��? �d9*i����_/�g<���?ʘm�u�Qh� ��@7��V� +� +�H=�Ü�< OE��¯V +�_��d��0������ 뵘��Ϟ��`����O.��O�V� +`���_X˼�7c��V���ln��_�93?pAOe�UN�]}=����78��Vd��S2���&�y�� +�9�T�_��H� +�3*�u��D��f@��c�>Y}f*V�+*w�u���r6}�Bi�w�3�*o~��+�p+P��ppV����z��.v}��ٟוK��$��BZ�
c�4��(�B6�l� ��@��h�e�VGtc�1�I����~A���+tu� +����C��ѿ�v�3Z�?��� o`�w��Z + +w�"�.��Ү��9�Wt �JF��c.�i�V;5�N�c�b(�P\�-X�Z� L���M: ��"���3wT��Y씦�����<@5� +/�( +���:�?��{�б�'i��P���'��������h��Y��� +U�LU*� +��8���S���O�>�ܡ�lO;�4��oS +<����ȋH��g�5)�B�$�9�G����a�x�.��QGRm(�ZM�� \Ui���wM��"< �w�;��ؤ_t�;9�uAQ}��6����I�P%�k�y-��ׄ�*�啑�uy�7.������)"���?+�_Ң(u�UR�NS���D��)bE��q�I�"��d�s�;��pa'��*BI���A�bO��������j_�6�{�z/@����'�����K��W�]x���^����8�l����+�K����}x +v���R +���?�� <=9~��7��8��9e���i���B#"��'��=�,�j> +.��]�s? +�^�*ӝ�Ѝ��c�N�+TVseН9.7樉��M�'ID��k;�F�Sv�����¤�XZ�-}���K.]�l
�Օ\�=�`^S3k,�Ep=�rt� +��S"h���X����;i����|6��U�pO�*����!.���q��Ŧ���/����ߎ���.���O +�D�Aa��{h�;r9(�sm�l��Z����R3\#tO�^y�EFy��{ ���
��4��m�pR^ + +@�v�=6$���ر�a�K}��Y�cV +B�-{�����Iɗ�띊E�w�������I9M�O�dE�9jDGQ!�y�LK@�q�Fi@+�pm�&U �l�Tؼ�h�E�Z�AN� + +��!���� +��=I�C2�D8#�SIȬem/tT*���B��ή��_�MZ����;�Յu��U(u��F���ՒѡxO���3��)*NO����x�]��G��Wz�2�z:�^�L�+dW���c)����ST�����X7��P�/��\�{)ѐ�Ls ���ԫ���}n>�)L�������i8R�g9G���|6�<o�A�� +�><���MI�=���+��Pc�M��Ird��zC�e3 Ҏ<ᚹ�i!W��o��KFZ9m���1 �����,�*�*�ʄ +X���pR��W��NiKlP�J�K|�cF��u{�1A|yeyQ�\^Y[I��C�^���e7�Q&�@���5ߢ���T�B��!6r��"mWWc(�NDG��ܴ���q�?�V�0�"p~Q���K��?3%�����W��~�6 +��:_��/�Z{ЇY�����B��"0���V���W�b��ʥLv1y�[�.彃�ڿ��Gdk#���o�I@9�S�e�w/�sjpPZ�t +n���+� +1Pb�����JW +6����x�c# +i�4��_<�b�<��!m����
+J�Sѝ0 +C|����$�+�~ �\Smo.��N�p�GA�5 +�Dc��(���|���\m9�W��n�7�� +�R�|�CU:K���~Gi@�Q K�����յ�s�.]��J}���<���H�]�A����Q�9�0^����x�u%�(����"�:�I/����ٴ�sj� +��z�C6<�W��#��݉���ΊD�:9����!F��� +�(%��d�������!@tSb* +�q-' +���Qq$�je�_p/���� +����Eg +IfH�� +4�W3��*��������R����+���Џ2X�Fe�3-�n�VW��͕/�ԩ�l��ͨF�Br��" +3p��'y^�(s� +`�bW���T������~&��p� � +��l� 'L}� +=�zz�9����#��@@�@o@v�\�V*y\���ٹKy+�=N����N��S�I:{���|��Z)�ӅG:�\\�;ҕ���S,��K���A�< +`~^��O��4�&[\8R\�Uza�!IV�@��wWee�a��c�0guħ�z�^.2��9���"\��W�]�p��p���-\�����]t +�`�;�FKs���F*;Z��`J�S�n��x_E9���?T= 7�:�Pft�?gH�T���C���Pޜ�S9�s��-�B��� +����qN +^!�8�ʚ2i�[��������o�Ў�X���6�[T����x�p�BT
��I�� +O� +���p*� +ڨ$�7���7I ) +�ɭ#x�+o����fe�_���W�\W��q}�9��\M�2W��nh�8?�0�_��b��i�$ +�&��
X�H&�9��ZL"��ȶ\%���s�u��)>A">�M)N�;*dW:/���qg7�X���)��%�*���0z��o� ��B�lu��ի�+d�zӝ +�<��{GG�G�GU6U���$�����p���$�� +)��J�EA���N�tK�cPV�/������ +�Uq��-�nb������Y�`��M�@��8�����ߔ��O�x����< +�������m���7���c���N���h +���;�w<��0�{��]����;�삷����e��]�w��tU:;�;=���.���ǵƌ�������b���g���(t����®ݻvw��+�w�� +.F������C��g��G>���W�P1�^�+�Vgj�FT��9Q�Gu��5}�������c��
��bK6����[fЇ�##�`�CҴ�� +8��I�q�f>��r��8H���Nh{G�C���/ �E\�[�"�ql��>��1���]��Ăr��v�� QX�� *
���L�k+V8��/�
,�[/mI���� +@����-��� ῍��[���:�;?ma��}���5a^9�d�ǹ�൵�k�Kh +���~������]��}f��tJRbj�VVb�T����\~J������مp�Sܸ�K����\\\�a���`�ܹKTK�p���ԤK#M�ua��Fp�Z�ق�z�R��� QFշ�-e'H����T
]�Ft>t%��~�+8������o�!$F�|д��|�uA�& +�x���wEo��{ +;JC�}�e���ܵ��?=w�v֖p��ۥ��^��t)��1�;C����0�����M�E?�B��,�7�=̨�J66V�]����7�z]�W��fu��&6����8}q��ۻ�w߾}{{{v��tww�6L����zX��� +����j�K���������|�u���%< +���{ +;_�.��:y{`il����L�����O�0�M?��W�4Ki�����BO�7��)v��w��g�P�uo|� +��O/���uj�RBg�C
���O��x +�E���� /�:SK���^��ڜ�N���� + +��Ȼ�
��?0de�-�p�9���d42��t��ӥ� ����F)��3RL2a�/jϏ�=[� �=�Y��>DA"�M�$�9�]4�M�tǮ�g{�L���9)�m&��^�-�Ʌ��b�]�{{� V + +����n��5d�*6��9G�W�t`̷=P�B| ���/��¥Rޜg�<Am��#ݳ��"��p����y:Q,/2Fߙ�B�8)�U���]-S�7:��ȻkIȝ +�����O1 ������ +��3( + ���m���(�˽= +1^_x +����˛�x� +���h��w��+ +`�l-z���,-�����&��/�Y>k�嗯]�tm~����q�`�h���k�D�==(@Z�"@�s�k�S�Y�JIG�� +E�6S�x5 +��~�"4 +��s���U��"]��v�^0�~ +@���+������y]�6۟�2��J�� +���Kn��*��)a:��G�r�:�ʥ&>��nl�\m�@��8*]daa��ԥ˪��+��/AJ�!���< +������*H���j��ߚ+��&�����J�R�d
K� ��DE�;:�J=��˪�����3���Riz���P���w*@PdΝxǟ}|
e/:�@�L�(
�r]�b����@'�'��~ +�x��^;b�Vթ��"�E��oe�t�I�"���0�(��X�r�\�ym� +Y�|yVƯ*�!��:��h9F��Q)y_�З�NU�/�.2�����\�U +��M
��;V�J�i>�(>Y���f�� +���+����Oaa/� +��� +����ϸ���G��q�{W��grB +���M$:r��"�Q%�[Pm�V�fgϟ�4���.��$�����V �o-��L@by�0�� +��̸%y1� +LpR�J���Z����0&%3:� +w�@��ρ�pG�n�,/�_�|���k�����OB���6�3|��)���F�\yY��x�ֹ�v9p(�}������" ؎@��d�� +������8Xʪ՞n��ܕ��╋�N����\#q�Anm�*
���`A*S� �ӟ�����%��\�~�Z{?�F@� +������X����-i +��X�=zt��l^TJ�}T+/�2R�l)8�>����2E�Ft��7�iB�SN��H���-+��-���x�j}��!:�*q=Q~�MČ��0�? +���4�G� +��z�rB iW�t�8'�;4�)�n�z��2Z���A*�H������"?��w��T +{��1�n�^�B-(��J��A���c��MP��y E�rF\O�P�gd�����h�� +��� +�QP�*�
���~"� +m������W����u6Dgu�K��UZpɍ�k秦��/\���R�]+#�(������+P +VI�`Wi�nj�UUl��DkS����_�&� +R
)S����奅����SG���P�)��QJ��Z� ����K�Μ��!��?u`� +��� +�SuY��#��ܮ�V��>w�����~�f�ʑ�Xi��j�w�<������.f�E)�Y-��3+O=+ۊU�3S�z���?}�z]�u���9#��ur�ź� cY���JAh��ys��ͲK�2:ī���_�o���Lg�Ba��-��á� ���i-IT�=�����)VK�l�[-:ǹ7�ߨ��ꪐ�s�f��b�H�T8/�(��R�8���`����^�2�[=/dY+�[v{{�� +�� +��%hQ����Yh +�#i/?�]�<$� j�������.�Y�yD�86o�IF0��tcq�Y��� +��"���^x�߈���`�������wWW�q4�7m�3`tY�V��Z�A[�r4e�X1P�� +�ցʯ@�-��2������-ϛ�,����Eϔ��$�0+>X[�A����GEQsm՝.[�L\ +}|1 + +�=��";vQO`<s=�&/�u�8c(���'�����OC�\n�~�\ U�R)Z3�/ʆ¤= ��E-R8��uTL�2�onuqyi�n`~qe)\�M�Udk +�!�q����Ct�jp�W����E~�J1��>ը%N����u���k���������QO\p/�_���� + +���Ձ����P(=[�L���P�xv�jO�:�y�zEu�����aj���]27���ĔA���Fܑ
@��l�'@��sϩ�S�P�RtM-� +_[�t�fP���1:�j��9�H��о +ȳ���H�ς��lV薷&��_4 ��Lm۾NԤ2���"?��ƚ�E�`��2�Е^4�H!�1�H��C? +�[�K��q{�W�))�'� �/\� +GgiGI��g�2̉ld�-͞?z�����71)��A\VRTU�gu�w�t��?��e �Ge���J ܻ���P��߁�^Y��05E'�H�쵣��\<�����㿗{ +� +�� ��=���@wA��}����d�>�����u>�)�wv�Do>� +������=��`j�o%�0οO� +��ٱk���]LY�k�v���ݻvt�FJ}��wt�W�����c=�&>����F��a��"��DI�5�Y�@H� 0��ӎt�V����4:���v� uТ���#Q�J�>���։1��X���P�u��f=([�/I�o��N��Q +����Ӱ\Qtb/3�#���(�D�%���p墬>������#��WZPJ�qo���ֿ�]� i��K?@I��.��-U����>���m;\��î�H#`�����c�:��Զ��@Z=����\y��oL����YJR' +u!�$X��t�v�/*s`�Vc��dI�g*]��3�n��)����ƶ��쬬(��ls�V;p��*m��"�J1"�w D�a��
&�e2 +����O�s� +F}���������Ka�^�k*��x�/(C�����H����,�I# qA�bg����(0�Q"��G��}2�Mp��G��OR�p��^v��>77w��Ld�P=�Hp�� 4� ��y�������^��iQ��@���~0?�?B��t���>m�͟cV��*U�GU��k��}�K�~��) +��@=_E*���:c� +��$�o*
� + +]³��� +�͛?� �� +W҈ⰶ�`ii�r�0p�*�^/�u��n�[�u����)&b�FTQȩ�8��h� +��a��� +�i +
0�R0Ey/�2m�B��z�C����2/���8�kk� +��&���:5��j*d���
���>k7 �g�Ow��?�^k�M�?��Y?v��#&ם��[�[:�E��`2�����۵�Zeˆ +9�Xs��}�Ã�P +���s�_�A���Ե�g��U���� +�B��< +`p�I +�;v��c���)�H��͒����� +�ox* +�����?��_1� +`��d������OG +p�p�
>�%ĉ�r��n��ql���+pv�ms����S�� +�i}emiin�Z��tBmm7�3�>+�:�D�t�TY�O�ID%�eN4�k��2{X�K�{]�^����y�¾[�� �}ts$�/��(-�5]%��g4J�-�N�.�1�C��?b��HK�����0��?u���a������[��� `7��r�_V�]��z_ :�܀ཧO�VO$ �@zŔ�Iķ�� +���W/[ +��9�v�n3���,�ؽU� +x*!g���/q_W�+���J�H�--̵��WI��t���=,~� +b�@>�� +�(�!�����������U�x��%" +�R +�� �&sIY"2���n/�� +� ��} +�ȡ� �� +��1��]ҍ�iXe�t{q
Y�DI�c���X�Ӏ=��������kK\�E +��*��H������5����o^�`����;2VX�~���*���j�|�v��Z�җ�;6l}��=��Ͻ�c��=��j|�>2�yXF��k���]��Ӄz�����*�gXw� +�B<~u���%��I�>��+kx����e�ƦX&����B�I��[��&���7D�������hE +&��������$ K���ZQD� + ���(���g�Z_aƝ�m���N�����z�Z�U�|�GL�xΐ�f�-ϴ�n�]ȇ2q�7��ܘU�^abAV|�ɧ��BH�^��ays(={��||�� +�����Ϥ +E��\ދ4�_�~�������aU�jmJ�q)�ܲ���A�̝Z���KP����DӤ=�oWT9u�����������P� *�e�ZN+��ϳ�L,�ƙP/N�x���T˓ +��WIxJ_tt�9����D�Ļ&Gz���X�>1J{��38�e�u>!6i�X�k7k��JS�u��4
��������z@��R�ћ�(�5 +W�l���')��*8��K�ӑ��< �N������A嵦�l��K4=H(W�O骞rP�ݲ��%1���l�h&����ރ͍���Y��衑%nO�����x��9D�
�����?�({�ث�N�o:�|oI#��k��}�D�-)��u����l{viգ*��X�ޖ����� �[oH +qC}X������t�O�f�>�������������v�Cq�0nIc�����3a��+E�u(�?pߥ�ŻEQ�^��?�o�{%���A���G?��_��'i>�m +�H +!��UZVUp���a��T|r���KI��]�r��B���m�6��L�v��,.�-/1��L��0��J<��B!��#`��ݏ ����2/�R��C�h D����ܶ ++g�u�t�����C"?[� +�, �(B%��,,���{e�A$Diɇ���K֥�����P��E�e�%F��~w������2-����@��Lw�f3Z���1�ށG���s�N����7U9���ȭ�X@f(�'�c���!ȗ��R6�_7�{�;.Ḵ8�D@� + +a��~���I +��G +� +诅�����_���b�@��~/mڥ�?%������ +a�B�%(ߘ�F + +4 ���F��( +H +�>�W�- +�� +�,�~n W,kmuina�^��5�wd��q�D�����Њ�n�3c�`�r�y�� + +������ݜ/`CpHM@ރ�^�"��;�=:�
6y�8�����%�@rGW�c�$}�+�4t�\���]ܐְ� (������T�D +�+p����ϗVF +���
�)dL� �#��������c�*g��B`(�%��D�����'ج�;����E(+�g� Λ��L�p�\'�S�H��N�`4�Z]N�v2��LL��L��z�#�<s�^�a +d��zSI�?�uћ�w��e]F��1����`��2;���9���n%�#rO �/�5>�iH�Vw������"^Z�� +[Y*�j�Ç�2I���U-�t@�V�b�WT�ŹťE&8�Ʉ �����U�V��lt���T�� +- +l���K�?��˵.ل�s8�ȣ���mlJ +���l��E�53C�53??C(�jMw�(ޥ��%7,-ʣ�l4oN\� +@����L�"ʮ�*貟����Ν��e:����o���~Ż�wBG�<�o*/f�G6q.�G'��II�\�Q�x,3 N�E�hg#mn��D,_���)���V5�� +��Q +��r�t%�G2m@�_"Á����D�BDLc�=���H��B��=�`���8.�� +��F�5�&p?�Y��NW�B�/_����dz������dC%�����33Tݮ��{�����7�U�>i��%�9Y&T�^��}�y�VkwH��(:8��� G.c�+ +z��v0���V�Fk�m��Uf�B_o�F褯>h�)!���B�������6} +��i)U�N9�$�k��}_UБ1{��T +���$��47=M' +Ց;���Ţ}���PEDP�d����۳D4^Q�T���;��4a�����][*}*y�����?�����-�A߆ +���_������� +&g\$��-��l�D�X��
��&"m�������I�\�
���y�溰�a}l�G�<X�ni +�ܷ�-/v<��tA��1�H���{֓�9O��Q�N����nm�c ��S`CYNw���x�U���F_m�&>�l6�6��S�d�L����:�D��B���';��h�.��2��T� +[O���?v���x�/n��3����
��@�d ��Y +��BF0�|x�Q_q�ق�2�;;9V82�(��UC-89!�e���]�8�aB�e�����5�uA��� +���R��~�շ]~D���aQ^7Cwd!o4��U�ڒ��XY�{O +���G�2�[}s}izr�'���}7�m�V�zpn�0P�Q���Euxaz[`�S+ ��4�:H� K*��� +�߮���=�?�x(����l���&�N�|�ZE���1G G��ڲ�0pl@�LEH�|��y�HV���c>+2*;Щ4��黵ÜB)tQ}ڔi=�S3<1�t +� +pK\��Og���<�&Lp��<p��E�3��Ⱈ��8�^X�G�j�mG� �CwC�H��{���-�l�� �W�Ag�� + �� +�gr۶Yr�KÙ��z*`=6���@A�v�Y7�a4�6�.��� +�̸@ +
rU ��0���k�
����PR�T�i�./�,���tiiz�^&�ƷRu�ʁ"�geQ�d�������,�;��W]Y��Ԅ��� +�-LG�h��M�����p���u��Ź���r�XT`OKx��< +�g�4�^ ��. +��+������F +�mS�Y��g�Í�"慨�h��RnU$VU��c�l=��# +�r����t3���Z�J�N��� +�زz9���z8����yw��W�m`��H�vo��{�Pި +���"p����d������6'��ζ�2�|V�M�m���Wǚӳ����� /X��np� +�����ii����X>'���B?wF�#kT��6�������f�v��S�|�o@µl�y +O��9�Bo!��}m� ���G��JUa�KJME��Ѭ�d��߹�����j%�Rڄ'��-�8�-n�����=����)F�h +�r'��'� +�! +��t��O��Ң�}���i���.�ǞmN6���gyN͂(*�� +�'* +� � �O���r����B����y��R�;�*I.�L �Ns���/hu<���s[��<�JC�*�����.��&�y�Qee�"����!�m +�}��L�2�2��Tt����4�A� +��/�nH��q�œ)�� + +�&���^=�o���V�bS��o��2 +`�D6y��{��� +���FVp��h���Z-c�� +�7:�&g���^ +@ &:~��5v�f + +�2�Z�@��
�������^n�D��v`�s �6�t:�fvX[y�]�w�M���i��T��2��@����&n���t���������h�'�_��i���nb�A�X�uu\0Vv
�50p���扡�d�����<�<=%��.9!U�g��{����g�k��ܡc��y�P(�ǘ�"�zfOtGr������e�ls��|O']L/e. +�����ys?��Ϲ +p�~��e���{�U� +"�A +|�7g�n4���QN�(i�s��`��s�['�GG�$ +FRj��#����|W�W���X|��b��-\8
� �������)��}{�j';hЇ. +�����i���%�%/s)�� +��c8?�"������g9���bK���؝��o=�_�r
G��ի�= +�$ +�9n`ੁcO?M�Y�t㳍z�VT2Do�2�s�kc�]�Yư��M���<�I=䇎V�G�����ÕlD�Mo��g�h�~��g˝6�t�ѐjy����!� �1+�$ט� +U�/=Y��t����l�KB�4*�M5G:�`C��m-y��P�a�����+p��'.Mt�&Z���"��6�`����|T�?'��] +`����3�# ����|�������6�@� +��Wj�j#s�3�`Jx�*�x_��lB��.�q��=]�1��9aF�//�"��3>\+:��Y�"Xä"@O��P��3��W$>K'�����)ڇ��V���^� > E���tsl�V�U����aɠ�ZcLrWp' + �B�:m��u��L��j
�a ���y!�zmY�����=b�+T�i]i�܍��8� ۈw +�^(
WX_�ks��R�[�ljצ� +����[�:<p��#�1� +@L%7a����e�>ӳ�$ �UX)0Q�����bW�%g?�垳7�%騤�|�tzHyO�fE�͟g'����X���A�@� �*��Yh��*�@P�K +@�<�����>�+�����YOn�F +} +�v��7�re��r�� +g��#�5����>���N +F���- +H�n�4�Y�v��ZLT�z������-����:������٪������}է�ί��4`�{�ra�c��8 +t�,�������:o��:}�tLЍ��b�Q�@#Suڮ��Oɔ�f]sU�-�6�W�|9 ���Ζ=s���?�pW�J�j�UF]�4�L�Oߤ� +����&L��.x�?�m�FюR��&�|�ߥɹ�]��u%����-I Lt�������x\�6�W?n;��<�Гw��}d�%(��� ɴI����B?�� ��WV��(��(�>{/���[o]�U��U��(�-G +�)vk�N�Zp*�/,(g��ssr�����{6"��[܄��e�Q>��C��kMUF�ň{�J���\��n6U!�i�b$!=@�N�|�ɀ���Z��>�RpN����GV�İ����� ������08���s�Ae*�����*kRW�L�a��ݞ �D +
�Xs;<���/A]��[��-h�����S��9I�h��� +����Vu��E��wq_[�4�]G��F +���'�����Cp:�u� +p�G9:�^� +xr��䬇�����) �ՠ`f��U�l%�q�Y���d�6$�ġ��e�ڒ A +e��T�ؘ�k���:��UV�h�P� +@�5y����<���#���٧;�n��.���p���.�-��] +� + +���*$ԉ�t<��Z�Z��ʃ�� +�B�� +R�ixO���G����RK��ҬG�Pɹ�v�wΒ�Ї\�O��1~y�I�%��Z�R#��������'1�4�8:�m,�1���������lޠ:� +/��� E��<x�"O�"����}¦4/8G�V���$�bctT�}yDԔA�=42T�>+w����#G�?��A���;?2�*Cm�<X}�su�:��;ǞU�����_�;����:�rޅ��m��������O- +���W(�1��s�jѨե�����g�����#$/b�"�rH�t'Wjə +��͗����[Kw��E���H1BE�͵�A�����yHY,���n��Lv��x̀n�n=��?����>� +(��� ����@f
00�I���(ғB}��������������rֿ-@��s�9$�'�oy���� +#4���'�@Z��L�r����ڞr�_ ��tQ�Q<kL��)��ݨ�����U�N���]�Nd/9��
]<ײI��p%�ة���Y^�?��r�˧�o_w�6��v궩&���W�MV5w51��L0��Օ� +~�W�'6�U"�J��r�S�����'��367�K��M��r?�'��4 (P*�> �����F +��x�# +*���>�+�U��!O�ҧ�Y�0��o,�j/����}g���q��}������?,B +Oه\<QW������2Z +`���� f߃jy>6�ur���a�+��mL�o%0rf������|�{O�-�\ MLp`h�"�Q��h���?C�����X���hG��Y+I�7�����.F�N6���a������̌�E��c��x�~����Ν=;?���3�?i�2Jv������� +��9?3:k�� +:Z3���s!�c�J��0֠d��I^�$}24ఉ�8D@ü�Q�j���U�j������ajD���V�\'2nT)���tՂo6�6��ih���ʢ�w�Z��T���j�V�s�(���V����0�董CZ�MW]�P.?p��2R���om�$���k/����D�E����q@C��_+wW7֤!��k
��uП����>@8�o����8� +�����,/3���:)t��;*�^/1�-绿��|��7, +UEc���n��6^��[�-�����F��.^�`�Z +� � +y����%ZG9����7�U� �_{��&��r�u�����������t��J�+�������Z� +��=���8M + +)��M%��=��E���۟ +|�{ўv����م�嵵Uy�2��R�ϗ����A@����#-���h}uqvn�a|+s˄e?G�B��h�Q��3 �1�ܽ�qws�.����y{ie��WJO\����#�v}ˢ��- +J������������. +`�~ +�C���@߿Ag��g�ڔ +���-��> +����DX�iP +|�4��_L�1��wP�i� ��)`dj'(%%ǵDQ(3r
+��=�U�e}���C(�+?� P3� +jXC� +���$�t�H>���� �YM!ۭ��F�J�F����G���� +��o~����R��gR�Ň� +@`����ԝFUD/�A�X'}E�p�pG +�. +�U�i�]7 +]�b�V��w��fRa�p����[��F��t0U$�3��9��� +``G7�-��ͶE +�yZ�.$q�LB����0;�$ALB'(#Wo�B�y�wi +����<����[�(���&���m + �%�'�l7� +��hp:�[)lQׇ" +�����w���㧮F +wb���@L��>��=��T13q�����3��|��w_�� �'�]j�����ґn��Y}b&����ѪLS�y�U�xBS=<�5B�'�i����G˻������E�1�e"2�5?C'����UoQo�Ȼu�N��%M��\ �/�P�
I�&�D���l�J����oY��E�:��� +b�s��_����0�������� +�s�%819�K�H <��ۈ�(1�]w�n��0��յ?
Py9��R\�ƟŞ��^�} +.�t�$��`]y^�w[it��?������.T����A�����������Ց��90ѿ��o�Qz�@<�C + ���Lt���7ח���^�`.TNx�d�`�" +`A�����C~�Gz&�o���u��W�����^!��}�i���������]�I_t�76��Ӧ��<C��4��<��J�����w�����s3�iK� ���v{qMu%�"���C�a�Q�} +���Sb|�����O�ۋ��swD +�9�T�xȺ���R�p�y�U泓>.�e��� �<~�%1~�M/=ɔfўFG�"I����YT�m2�qK�,�@���/B�ޝȻ�!�Kdk��/�[@cZ���Vi�nw��P +@ǭ +�JR����ѯ�������p�ηˇ2�;~���DV�Į +�0_��~|���� +m��>ѹ�����Q +oT�cF��A��R�j5p�$v�rp�ݨ{�TіQ(@�9M0�Ç@қ��'������w�E.R$e;�u���X�k�5���(-~�c�1���:���b��7��u!��<�����j@b +`!��7t�Z����@�(�0����W�ke��ِ� +FI���ÂQ5�T�T�ᡟK��U�Pj� +��=7 �J�V�҅o�,-�"�0
{7u���],� +���J��)^ɇ@��^ +��```E��� <� +�GE��xF�O� +S�- +�"$�]Y�����?k +��+s4D��I���aWh)�wm��/I_��UU�D�2��;��, +��Ļ�t�@���:�DwUF��� + +S@O�9�
!z���G��������X��of��^�m4x!���%��<2|�CҭbS�U�l����{��q��o��w�ۜ_�����������o�?[�����������~�>���ЯS��#�w�Ÿ�H�����r�� +y! +u���` +�w�1��'��<p�Di��jzΖ:^� +�.��Ay�Հ=�\v��� �vJ������]����|t����]��<W�h��n����-W +%�����;��ѐ$��7��.��D��H��V�=�$(� *)h�� +�G�!=�������?�u�"ZSy���Sq��Ȁ�L�ߵ��� +V��ֻi�`�4Q�x(�\)���u!R����l��[�}[ +h�n�O�6�E +��v��`��n��dT�'5� +��J Qa +�D[c%@= . +�߲
@R(,�J�^�v��dIK��g&0��E^�Qbd�F/����q�t�n܃Z�]>�a�9�?2"n��ݾϚ������n����$̊�~�����gw��'�]�G�n���2)�� +��U!V3:��.\v� +����X�!��G���Ĉ:
�rÏ<[ +�.j�� >l7���>n���7$~�!���R��-a���i�d +�Q��g����G��MB +8��A�C��xܕ�/��$�u�k������ί�Dv3�8�a�ծ��7:ݦ2�ųO�xM$�C����*] +�� +�e얾�*c +��uRs��, Qd�녅`9���q$� +%05 +P��DGs����v�H��P��s/�1΄bF{�����w +�K�Mukw��o���k�\*��R�V�4S,/,�����r��s +;B,��+W�~Yq��?z��u*�xQ�� +Zp���e<�J��sC*;���)�X�Q��]Aqu�ѿ�ojy�LM+Wv+�Ru�Z}����fVP��b�#����.����p��;�0�)o�p���{P�l�/�U�5��!
Av*�k��Te%d*6I%j�p��N���v���Xl"!���\~#g +2"��t�P�全l +�;���^���� +������pO`&��n�~$��֛o�����c���Mp�#z +oDz���i�!R� +���oH_^���}&�&�� J�h���q����;n0�8Ҭ���j����aha����4;'��`n���P^��N����;�� +�ج� �:r +�*Cw��JD?����;����-� +��ː��kÀB��V��B�����Z�� ��z�VcO��u4اn��p�`{k�o%x��S���] +��|����r��Y +���w1E����U�d����_h�%��� +S����`��#Pwq��_��x�X^H��x��?P +4I� +�e��C� +@U�|����2�K�j��֥��ؕ�] +����H�ǯ��/ +j13e} +x��z/D��tZ�VLB^���c8{���?,�b�s, +<���Z��jL1$V��\ZUN*?Џ�ڸ�vT��\�b +�b�C!� _���S"Z3�R( FxZ��+d�S���+��~���>/�����1��v��Z� +c iJ"��( +ͣO 2��z +�4Pȏ�3ЄK�.^u�9��o�yL��H +|��b $�`
e���kA!�)�Co���2h�SmE�1�:��`&�L"sP +jz��12�`���]~w� +@��k����r�F����2
�SĖ�����T>��������D�^�c`�$���)&������]����M{���������?|��.I_�~���p���#O���_�ۿ��&���o���?���Rq�= +DOX + �ָ���d`��^T`� t:j��p��QM�%�����=?7]�3��t�YY���i��ARK���ei�a +iY
0, +�(\��J�z6 +�����`�����v�D����+��� +�8�h��7<{�q���d��F J>a��0�]���OO� +�. +�a�S�a�'V��u�y��6��Ί���R�9A�CpT�! �`&���Z̈́��O��<Q� +�. +�)"m�w��u���
��( +��ڏ�.^�t��端��\�y�p�g��B9�� +��pճ�EWʼnff<sѻ?�X(,)_L|��ѷ}�p��p}�4��^�+�|����WހL��@/�X������~zB!"��ӵ�\�}�w�t���u�9��z��n|��B��'��Ò�ƨ[��� ���~� ��(�0��J���|�NB/!����!h +�2���}b����G�:���mhԾV�� +�;8�p´��p9qI��L�i��_h���Xz����Y +@p��� +%�- +}�Z�s?|����d�� |���Lh ���4-������bK���ʴ��4&GvCL�� _l��s�g��d\
�$�?���.�8@d��G]��E����͘j��;O� /��WAٍ��!�,R�[�H��8f����(�J�N�Ԑ��.����- +��o 0 +B��<�<?@N�-�|�y�%���&� +�Ĺ�5n;^4���Xzr���;U�0�I���F� +`S:��{te3V*$Q�P� �u�1�R%p��0��<]I�wN@��Bs%Q=̂��|ǘ|S��_�ʄ\Dێ��i{�C�bU�8�Q +�_�����1��_D<}#�D�|Ej�r*J��{�i�w�W]wJ�y@@��[��݃z����$*�ۺ�dV��_�#�^;�a�큇���n������=�`�)v�7N�a +���y +�ߜӤ��� +(�U�7�>p +��B��4����Mo��AX7��� +�_p�;�A`��ȬB�����P���#�蚤��cuRe6�S�a>:Բ�m��@��<��� ة�Q����hQ�N}����N����"8�_�> +�] +��/��g�b +@��@�6<Zc����ܤ�(��k +�O6���ʚ����\6�_�����0_.�����>���D
������`J,����RU_�-���m1�Ry�R�X�04 +xB��}�x�p���M���G4�M)��&)DUX�]�q���D.?;�I�vR]ǷE��!�\���ͽq�����{�(��1/�oE�0�`o�v�T���i�L��rN5���;���O�vK��j���j�qW� +ş�Rq�'K�]��eqaQL`����W^y���r)����T�� +�R�(�J�p����� q��N���/L�C�!�!C�R�;�Fm�Vo�ɀ��6,ę�6�+;��V�I�,� ����Q"�-��"�����Q�ݖp^�]?���gV��̓fۀ +G���/��[ +%�G��PA��( +�%����L�A���>�������Eν�z�+�����6�f` + + � +AnY���" ���2U�?��@�d��u�5p`0�dww��~y�Ry�R�>d�������ӓP�W��>};�h�}��a +�A�a`�!I��IB�HX�Iv��q�0@�:��� <��i�Y(�# +��o�9u��v�������V�YH�"] +hǸ@��+_���P.=���g +91�L!1� jv� +;"
�z +ڭ���P�{��7v]x�S�j���UJ4UL��4Y�yHՄ=@߆�������¸y]�SJȾn�c���F���_o4��iBu����4}Np�?����I��\�ms��s U����S����;�5t�. +����_"��x�[�~8E���- +�-�+X�� +;�d�׀� � +��D�t�>9>z�� c��q�2!t|���`���U�����p�� � +���G�t��隊��lN�Qy�G�"t��ĉ���G%���R(ν���^|�<�
�vA���<Qr�}kU_�VC%����=(��Q�ʁ��-^t" +�"0e��Amg��h4�[3 ���0}8�����!��s�{DT���~�!|�Pj���m�;� +��.!�_�G�R��pj���ߢ�V�~�_[Y٧[���a�M��<Q�&l� a�`�O�~�F�� + +(�@����� {%�?���D�!J�RSc��P.�Հf����:�*�5, �G� +黍�����z�i7@� +�����U + P��=� +M>O9�Q�|��� @('Y����`�$y|�m�-�v�(�^�����d�����O��x!V��C}�S;Np��hB�Z*0���{a�|@g"���� ��"NB���,�t2����Q������Bl�������"���G�N��Sq�V�(�n���U��V9��_i����0���f��8�>M�Hf����wI��F
�v�W�K�����AX�;\�[FxE�w�����l4�`�g�� +ut�K@m��Am�����&N�{{� + +�5!��N��\6�bC��ci�(��{�.��A4/����G�o����b��2��vvh�@�c�f���αmpE�}\ +~�q� � +% �39i��Y͟$�G���Be_H�b�1�Z��RA��1n|��#d���A\~�< ��2@� �U�1��^�)�2}��@�]1���k%���V�h$q�i՜j�� +\�ƴ�8��)���[�wMl�ȱ�T���)bE6�@�|��|�-. +�<ة��aX��ӊVy(�R�=7 +�M�Gfe�g�~�nW�� +Z�$������Ѐv&p���� g` +���N3Z�<���Q + , +=@�F�߾w��@�mj�A�:X Y +���}z> +pr>���g��@p�WS +z=�"<��;y1��fa~˙w +(�9D�蛎������c�<��$$wE�D�^�?5x��}�2�S%�\V�iDI)u_D�N?\C.����[��f��wB���)����a���L��]��e��@����g�W-�`�P��)ٍ�^m�AV�r���Hx����1��#%��t=�ot��<�[��hog�WU=Py�L�%�'om=�}��Smx�%= +���7�a�ڻ����3d� +�{_��> +V���Y��Khu�f +�����b + � +�ŒBaH� +F�A@ +Y���J�Ҩ�(�bԢo�������h�+4��K�N�/�v+xd��#����7��<����A���= �´�0�N��_����v���MA�Q{@/���{ +�} +T>�����;9�"=H��ţ�+�q࿕j��*2��g +�1��3u*�H=�Jr��n�%�Z���Y/�yOh���^�B�AA����V*��������6�i����'A�!���]��
��ׅ�B|F�)s�~pP��s�Y�o� P�>��W!T +��`������. +3�tr�} +gf��D~!�� +��H +�@�j�h�G:��DK�?gQۨ�߀�ba9�q%�A��jk�{������. +���Q�a MA}S��(�1���p�^v�KπD9l�w� +�T0S+��8�� + +��mf�;{t4���P��h�$�OI ��&��TAS�@ب7��j��v�hԩ ?Y������o�f>��`�0�'�X��N�����g�r�vP�����5�s}�������^������q/@&a��zez����W�, + � A�������H=�~� +�o�h@��v�#;�En������f�z +���$�uxwk�����Al��<"¾O
�$T����3_!O�)u�p爇��Cz��]P���t�8���t�i�Ҫ���k^���n�v��5�j2*�A� + +0����(�� +�:�!'F����; +���fX����{
���Oc�^����l.�[Ti%�n-�L���t��vb`WZŒ*�y�>��� _
7��J��� +*UP&A0�wK(<���U�J�3�IqnWx?�ǻ +Nn��J��G(Z���3� +`�=��Z�^ �z�j��q��l;��_"��#Tw��0��
�j��=�CW�*�� +8��Awi(k߁���Yz�d�
�������ʹ�F�^z�v(=y���u!�w +/�Ԅ��t�Uw�\��>&w��Ʉ�A�
�bthR��M���`�V۩,++8``�� + , +�R��v�J����1�����Z +�{ +��lbUX���p@N�&�M�i����� +V*L
�\Հ���vW*˥��>3��p�'Iz�&��/� �ۇ�e��a��u{~�r`X� +_W?,���w@�Л`�X�9� +1�� s��è��eCŷP���9<�xL<MS�[�i�b)8��\��"'>qG�RJ�4ՠ�����Nf��xBg;l=�,V���L���eQ�r��M���f'y[ h= �*J��w��T��ٳ �kS��|��R�H�X(�X����c�������X^� +�Ŗ�y�l&�l + �6�@u��1� +�Ϻ +qԠ��~6�"�Z�
����6f���vWT�ʾ +�ۿ +��p��T�u +��$}Z!��^,�=P��{�P=�;����y�/�ru�����'�b +�D@cONv��, +�.g +N7��ۍ��Z�lx�x`G�3��8�w����N'@[�m +�F~����G�v�[�u �!N��8�1�[�04꾕sS$��+ +���s4�kO0��z��K٧8JV,L�:�7��#`ڞ��=��܉���Π��[�.�����v�����(�S�+%V]ҐΡ�� 0�; @26�FCڻ4���>��5z��7� +��[ +�2��.�P
�I���ӥ�%�����1���߯,� +��A����:؟,��wm��~V��� +���` +>��hރ +=�� +��n��*>)$T��ou���du�HMX%�s~s�K�f4� ��1�ܲ�V���
s��#�Az�ɴ�ۡ-e��l +�- +dp�� +r�=���M�q�sJ�I�m�j�OP�u�8�� +H݁L�1��Y��nt�p^A9K��!j��%�oﭬ�)p̚wv�w +�{�`��C��Ū�� dR�G�@��-��"@)�^�����2�{0&,j�G�Ex&�F�����4a�>;b+8!�쐘0QOM�{a�RRӸ����,�B∄(��B��\Z��,/\]XZ^./W*�Z^^.-,�Ƚ=:�v�n4|�9�O�Bkh# +���8` ^r����{;9���� +7�vL� +��y��)J1(���d������Յ�reg��+� �h���1 +��G`8]�F��*���@����?� +��6u�6� +̕�x>����r�q�` +`��� i��;�g� +��0��\�UG@4v���\�����c�ޫe��W�Ӳ�R٩T�UQ��� +e�V�j����} +� �, +�9�p�, +�aR�u� @�
vc���)�^]���mm��[��p +@0e����w��� +3�E��5b��s�a �vfn�:@!z::�MS�� +� +k�^[��X�F[�+Ts�6�%����Yߩ*��Q��p{�� ��l*�4f���= +����Wgp�c�;��.�?�6%dn��
�p `�_s�R*�1��,���}�I��F�pl��)�볙��(L.��3 +Yq�����v;,���#�Z�f +e�'v<�d����T�P|=4I��ݴ&Ԧ�^��q��IA(h"䉐9���6�'m/|r* P}@���g]X���i�WR�Wv����Dǀk�2�����+���VJ����b�� �.lW6���(Eiyy�,�^�b�,i��zJ��C�L���ί��x +3�e�ڮ +�ݫ�;0Q��cK���� +�k�~ +��D��fk��?� +���)�M㿿;�S���]�9/ 𮐸�'5^H�T* ��������t�H���_���c�����թ�)i���K����
��^�Y(H��ʿ��nm_�`n��{��I<�*�//��/\�R^�*U��' ��6�@=.s�� +��Z +��oe�| +�sRH�)`��˘�$���d3��Ͼ�S3�\P(�����Ǟ, +%!/�_�)���j���@���6}���]�O]��z3SR��e��K.I!���j������SUI;��x +� +��@��>> +�|���9p�=O���;t� �@�_�dʾ0�?��� +�s��߉wtE�T\�z����pi��T�z��%]�03S(�XX�����kU�p +�T<�Ri���թ�Dt[�O���
�7���S"�F�t��d|���n>��ӭ�8&'�U�M�+�Aj��!�w:�@�= +�)�t� +�
^Q�"K�!{��v&aH��������g�=o�NJ4�v�`��w�i}�w�X + +� h�2�����z�`Ƅ�J�>h2���q�@A�;�Jh��밼�m
�JP�}����L�2(�&�DyEA�mh�ARX�����˕G���e�Ԃ.�� 4]�'MdW���TP�kӁ{.�h��Ó��"�,�x�S�<>�u0����-'�F�>��7�J� ��j뫆: L�g^YY��:������BI��(|�4� �A���� ?y)��Ki��������� �_���J��?��QIU�>� �U
(�K85���WK4Rw�F2Q���K0 +��~��\E��۟N*H�0(�(�:WV���2��PEH���J�⒊*EaSoL��,,-�!��'�,���c ��E`k}~n~uu���nݿ����� +@�h�Q[���۾ +3�Ξ�r���@[x^�8�- +��s�|\ +��������xnj +�pW�pXq�� +f[ۇ��DV�b�(� � +�g��>�[ +}�S�0��Z%��X����j +�r�ըc�F���:�|���"�FTД���0�A:4nA:G� Y����F���p��zE +������q�`yy�!���4t�*��(�1�������h����(@#i�����yT$=!�nۏ��C� +�VG_���N��n��]/ ���������KW������Qw�������(�V���70@_@�ޒ.���?�}A8�̔H�@� +� +`�< +��| +%7��Y�hG�=��! +�TppQ+=}^��.�W"�~���0"���K0�{�� �bʍ�3�X���u�4; +�W��dP +�!����f0�W�S&���������Nǫ���&���\�u�E��nv��<l��v��lvp�� +|wV����XZ��"�/\-�?�C����ٿ8����b�V�I�Gn_� +`{��-, +��} +�� +d�w`�� ���s���1��1��33S3ʧ�^�7, +SU�U�y1I= +� +rL� +����ٷG�V��o0��
x��� +$���(�B`�� + �3��O�b���p��Ķ5 +BTv��lE���A%��lg��3���A{�O�h�� +
�
d" +%�����;��;w�&)��X��_B���vY�F������ww�<c��c:�,!��� +�����xW� +�_�����֝@���(������A�� +z�ǀ�� �W�Sx��9a�Z�/�@���!�* �3��@-`K���|1�>���?0�R���xV�jOE +��kO]B �*y�=��x�\'���Y{J'�Ei��ѕ~��3P��qٮ-�O�&���g���ľ:+�I�!��Ϟ�Q�v:��aR2�P����<�\�G)@�����s�?���w���~��M"�5`�G lz���g��*��,8�=X���@�A�2H����D8Qx��0���y�=$$�rO]�`���ˇ���r�����.�KK�'���ꝅ��~z�b�p +-�����0@! +�x�Q +3�ް�T@�llj%<R%�- X�=�l��7�+=�BBS�?�:��*#�0-1i���;୬����y�Z� + +� +A�[��4@kww'>�<���`�+ + +��y +f7`R ܞ=�}�g�xϿ}���9I��=� +&&���� +h�,���Fs��ĸy���Xz��V*}�t���u�~� +}J��2�?��;Sf~&�A�I���Μ{���Kk��
���3�He�* �O��tƋa���|��x +�JA���$��j������##���l�@� q���Z����d�l� +�����G�g��ab�Ex��^?��*�?Vң����e��gĞ �Xeu*L�i��J)K�Q� +���(L�Xb�#=�e�n�?Y�rm�Uk�����3�`[�@-����{�3��D����?l�J�M�&� +|�-W����IduS�<����C�٢1���aw�W��V.S��&_��BrA�)�ԇ�(� +�9�����H|���N�ކ�P1�IDYP$��܊K�I���9��L}(}�[��4F8y&N��W��Y5<e��"��e0��ё%��WX��A{�;\�
�1�3 0y��w�����IN��$J�2\v�:�70��������訨��]�c:A��IB����,�h� �O��ϟ��LW���;�~��=ԀG�B��O�ʶ&����={����p +�[��X�E!@�؏��p�.������jD����� +�����W��g"K���з0*ߊ8�nol3�R�����x�cy�&L>Y�a;�7��� +�`�3���"�v) s_(�g@�8[�#�F��#�/�PP��-ٓ��y���&�� +۪��$GJ"�!=��9��F���R*�C��Ğ�J.%��Pnρ����I��� +�dkn���w�J�0�)j�X�BMC�.�� +rE���N��Mk� U4�;�P�5�T0Tp�:�)�Ga���i�l�C�fe&�x��\�!��s���� ul�ȁ�@A���¾=W���x��w��9���J��e�CH�*�_��i�[)����y`��@Q
��&]�i���s��l�gϿ����/�����+����;�ͣ] +� ���w������N�S��a��K1R ��4M!I�ݕ>/�u���#}��+./�,%Y�' >���:���?x�l�B<��2UE
<O������d{��'�-[g$�Y�Kh̏8A+!"���n|t����.U�8�2�>�O�����p�7�o�@��0�lw�V��~*�MTAF�ArU$����� +�N�$�1� +�Y���*�2�"[�"7��H>w��.T�R����_h�"_�EE&��{{�� T��j������� ��1C����oe�1�UI����#)>�͓BM�iQ�
�5��YS7K7��J��_9/(���q��;(2v�4�?n]�?�DyyXy:
���]HEH�t���T@W|��I\���/S� ���XT#$�A���#bu��q��SD0��
W�7�v�z �1KV�,W� +$
��6Hj4:�NЩ2
�Q{����f�ܶ��
�;`]���(S��Rp��f�Ns�o=�fg�Zͷ��ֆ +e�~��2��E�H�����}�����������b�6�c�����S�0־���B_,�� +�g�H6�����$B�z�.��A�;� E ˫}� +��f����<e +@o:��yM���'ʓg�E�2\�]��g[�L�� ����w���wϾ�����۸����`�P�%;M�� D~#>��@���B�g�1A��d��l�_�hP�3���u�������SRH)W��E*��4������ ��&b\��i=p��ؐ�14?��?<�V7�� l��y"�WA����Dz�_JҝGA�q��t,q�L����y�s���lL��� +�7��K���8��-'���Jezn�^l��G�?
]�<�.��0Z�� b�D� ,x.�f��) �� +u��bl_�9f��%��J�� ��#����4�c+�9M��>�)����[n�L|�`P��_ +�Ȧ���
��(��ڄ�^�;j�,<#J��_��������6�'��L��ml��VŘ{04@�����i���7�v�]O��GΜc�>Y�����Y��_ +�]�I +x�<.� +|��o)5p +�vg�%B��#�ŚL +vw���<���*!M*K�/�.W�t�����9����<�{�\�9�m ���3"�,�I� v�E v0�r��Q��$Fl#q���E&��d=^�<��'��PE��(����k�9�`ual,f\5�. Y��E�� +qf#b"�M����<vI���H�]���` ��Azz6/�g��Ȗ�l~=A~4���z��#��D9Z��R��K�t���,(��R���3j)?h��{U�Yb�&��2ڇ/���������@���5�i�h����p���+{���[ �+{[x +u;���싄D.�,���<Ƈ`�d+�8T�$�w�����8�����}��M��������,O������jsc�/��i�~&c��[[��'Ov�c� +Q���@6�P�S@���B��� +�q/�K�)%;�'C� ;���E�dN�݄���C*�D! +� Qŀ�.���I�DD"¦�\mx�& x��V�dAE�N8�!̒���֝]Y�[�ye� +���P�BK�) d�+�h/TV�? +R(nEyG|CDZ�a�kgCC��-%�ޢ�2��
qB�ٮ���g��I��(�>-q��{J����"M��+��A���]J��K���w�ҕ@q �>��������������薕w6��������7�u0_�N������a!��I�xt�`�n4.֦�
A���w��<��s[�� +��Z�'x +��b +Y�2Ui]7���lכYCп���fC@��1�7��s��L� +��|n�֯���q�Y�.������� +���q�KB��x^8`�:�j{]���ёȘ|H+!!�&D�se{�p�8Aᵋ@:���U��������;Va�����= +�;�f&�&:O� +�v��L�/Ԍ��4�cJ1��� +=����&�\g����vL=��DO#����lhXQ� ���L�-��N��G��a��\ȴ����������V���q�H�����v�-݃�#$=6r����J�79�Mwrcc�Y���`��&�������v/��s�@��7ܦ�a������N�:x� �ph�:yOe$�QBG���I�I�������� +p��}�����1��,� +J�C�����]���*}���Y�-�'�S���tTJ�>^"��s�R�q��> +�сv뢪w6���9�S +l{��b�>$@?@������@���Pz +��U4��oU��hY�A���:KH3�V��O9w�ѴԠ��������w�o3T��ߜG��ɚ���Ԉz��ƺ�[�*KW&E�!o����M�hԶ�����T�ROwB��ȇ:7��Y���R`Z�6M��s�{���#�+�`eŘ���&���F~j����� $�s�%�Ӄ�`�U(ރ�ݠ������i� +$7�0�p�C:�"�I���?z�Zl��B���=V6�])����S�:�BW��@��/�j��7�)�An����?b�{gg}�Rɚ�`������� +�� �m�8�(�X��s�����KaCۙe��un[<���� �.�� +6&��@�2Q� +��_���~P�Y���ϟOK=�X�B%4��&��XE�� +�뛪�ä�R6�s� +��Z����P.01wė��[�~UE� �pm��@%�@8�ԣ +�4�R�:����6XE%"�.EwFl���
݀|Cytn#7���o��h���a�4`�`<EM�ǜ'S8I�����;�w��>�/B]�7������3Q��#�8�pſ����ʄp�� +���K�=�����8�����c&@����� +)= +�v������Rt�k)@?���-�*&�k/oC\���3�{�O�ٺ�h}�I����&���v���Kд���*�2p����s���*���9 +�o��ҝ%Ϻ��G�++@7���_'���?�K.���I�b M���O��4>�&���`x +�C����f�u��M�j�>s�����p�R�Is7�T��覝(�ۻ} +K i��+��m}����V5������a���`���6��O" +��&����;VH��n�R��%!*��&��N +����4��7���_o湿��7!���4�7��η�B�Ʋ�@%k�&����{Xs�dٰ�2�i��#/���z&���nfx�gu����wRd3���P(�+����� +�<u9���͏S�;��GfT�B +F
� 9��ޥ)̑��J�^X�H�W�^��)g�w�;4J`4����C�a]ri�!V7D���p6���)F�+�)���3���#�R�\=����.���z�l)2�/6"�'" +P�vKK�tԢ���*C�D/��"Ž���>��'����O�ry\� T;$��L@���� +���F�8"tI�" +ڮ��= + ��!E�(�.C��BN�<���'��Tb�N�ё��������j����R��UQ�\SL�7���)bn}K��ѝ�e��ժ�*
���I���= +`�ax +�1����W� +������ߦ�C�r 4�4���-�nŶ�E8 � 9��k4�����;ۉ��~��� +����'=*��K���*G����TM�(G, +�s��ܴ���;�盏��w�eE���@#� +�� +�Q�9�L�4����8�[�o �u�6|���@�<�������Q���\*���֑��|�qL +plauidtra�JzK�OH` +]I`��=[�����7d��e��NE�� ��D +ޮ\�^�[��n�R \B�B�6&j��M
��K��7��d�Ԟm��LS� i�: �Ǚ��8 +0�sM P\/R" +���6�������a8� +�;�C�̀N(!1�P��=\���!��tb��Q
P�ZjR|�H�3Q��$�_��j�!�b����pWF���0���.�_\�s�0zz��< +�r�=���� ��� ����t ��]���e=h�u< +�ĩ]�)���+�s���ÒW.H���=���x�@֨W�! +�p&gL{g�6d�ѱ>˘=`�5;Kd*bc��o|��L����`�م����xv?/�T�c~}�eP�_�z��Ry������ ��N��st ���Nig�R��8�%0�����?���n��롫H��H�U(����c]��{o��Щ�v�f��|���0S!M鮈���/�0�z�{�{�Q*<S]�nݑ��/��NO�� +���\6=gBK@�j`p��FJ��X�ʹ�L�ApE�T"�?�)�+S^@43�0��ɀ�t�SI�����)�"�2� +�uwуH�57�QLTk�䟴b|��=i�8 +4���Q +��Dc���o~�7��q��S�L�9C�_o����㽽v1�hV�b�C�ڏ�.�[b�>�
�9�7��Fq[ T�f� +����X$ ��pd��a�� + �^�)rM2�&�p�&&��jm�Q}�:A��C��ڸ6�h4j7k��a�x�_��٬�
HQ��D$��]�V�٨ެx����� +U���zƇ'�'X]�DcX���W��LJ�.�������\�х���/�@2�l��.(A��}���?�\�0@����jEţ_m"t�q��k�꺮��Za�� +�C�n)�u\T}C�Rd��t!���
��ƕX�]rfD�k�3�y�f�qS���MՇ7�q�Ţ���9��. + +s �M��~q6N���b��?lJE`o���VjJ��ҹ^�����PQ0�,Ṡ��,.[�\����hQ�t��Cj(
e�oB;oT%�֔Y1J~S{��i�W+" +b�΄����b
�7��A"�����o/A�AK�?��U���&�ЋC��=(@ �Du� g;G��ϩ��I�$�9^�e*@3#�V�Э�a�r>��ٴ"�x�i�@��#V��-��1�*��V�(10;�j#��2�^j~��]����T^ء/�'��D]@l�۫ �W?�q.�Y�/Z)[S7`���ѯ���P�RA�V���s�`��t�R���������x� +�����G���b0� +fM`?} +�\>0�/�`�hY�]�������06v'F�q䧝} +g|@� ���_2[�왁���(����ݓ����[:�͊P�H����k腪Ax��m?C����[�ɉ�z]@:���?��z˭��J�Ԁ�TW*�_���n��j"�ӆ�f�� +X�8�����$�7�c�? +@ycA�& +�����}�8J���(�-�� �˥�W
�V�*���8�(���|�L�(�+�
:�* +תD����锊�c����a���9�ATk\��%;�� +w4^���P�@_� ��K +�ס<� +R �g�rEH
�jT)i4'�ojr��@��J���Q�.6����b +F�H�,(�8���KP�ܡ�8�z$%E�=*�� +��D�����O��t�_(1���/��"�����= +2�R"} +�0���<0�q�H����< +�?n�G�Bq'��ǀ�����+@�r��d1�#��־��dHK�M�h0 +�a�У�wN�Ѓ�{ +`la��g& +�} +�����d�S�e���9k��'���WA��i�W���:�.:кY���'�=�?3�l���5U/��<�_�\�y����i(t���������KbZBP~~}"k�n+B� +xPt������x +/�˥�= +X'�[#z28#EC tHi0�أ@K���(��u�b�Qa��7���������p��;�F��o��2�)��dG>����c� + +څ%'�z= +����~$l�/ +C���O,��K�Q*&!Xmm)���b@)0�(��:U��p+��POa +5����N� +�$�{%'KB�C������ȫEk�߬�B�/� +�ٺ"'j_�ܳb���
���P�����&���-�����ϫ��:8a��\Ӄ�0��3�8�� @�sN���_�9 +��%������@�G�\��Q���"D�h��7H�����H�%��ˌ�%.�(�
�b��zs�3|*��Mr��$��4@�������2��Tu����}BE�[{�:ڇ +!����*^�@�$��q_w= +&�l�D�+��^7�Po*���> +uJC45�QDX��_�?L��t @W�B~��,.���Jx�$�V�����W.����ʲ���`� ��� +� +����3�o׳V��7�����ɛ��*c˥��~������G�K.�fu<��<�T��ʹ�5���}��7L��*���ʍ���x���0��m�z�����7�����1��A���z��7"��NJT4�>�i�ͬ�o���o?~���Q������v^U��2���ve�����^Rdx}o�S��:��@M����D���5T&9_/���� Y�HnV9I�4��[ + +��S�p���D��K(�$s`y�{��� +����/�_�Ϋ�X@Ný��\z��v��N� +���_�3Ad��K3��}�(� ���h��#�u��@����1 +�� ���?Ÿ����$�B>��W��%BɮO��c�W�u�� +u� +����Q +�;�� +vPHO���W]��p2��e�D��C} +�]������!'�J?��� +��o�W�^�� +,5ʢ%�{� +�����;��d�� +���˗.��K��u�_?���yo���[�GR{ + +�� +yP�*-hc���"�+�`�\<x��x?6���lj ��)h[y��tV����`�
_�7�b� v? +�X�?��W��*�O'@< +���b1f'�����vx��ohk�?
�x�`^ +�Ԕ��:D���DUqs\�c�҅�� +)aM�X^T������t8A� +/%����n��%������ +���F�-� 4�u + f�~� +`uEo���$zH��yw4�~�����?{�S��L�0$@O�$vЧwJ�6���@�: ��,� 頺����+������@� +9ࠏ�GdW�H1��x +�u+7��n�#Z���㵎]���Fga����R ��[�T��< +�R��ϓ�cm)�̜F�@_�8+Z4M"��uU�C� +|m�N +�}B��TB����Aa������?>�!�?�uƓ�!��� ��z +pW@ +���
����� +�����x����u�w!���@�%���fz�%�i�]BiB@1�� +�vE�*�U�����:��>Q� ��ݵ�H]&Z]a ��������� +�)qo�% +Q{�0t���y +�p��y +(K�p�)� +��0��v +$;=< +�|T�m�HM +�:�u�9�zBE�0e��F��� +�� + +�Ɗ��l\F�sث�uY�T��� ��� +>�����"XY���:� +�)�D�?3+��ߎS�N+!Ԃ��xC��a �y����E@�(����tFH�
���G�����??�(�s"n16���G+A��gO�O��҃�z��܈VZ�57�>~U�c�?* +@?%��)�4�?����ހ��w� +�������ر +��Tvb +j�NLT�uN��E(�,�1w1Q���Y���ӆ�T*<�n�=:,:=��E3�ki�_��Ő�1 d +�C�I��˴G�Jp��� +8� +@��
��� +F��o�V +��`h0`WAj�V��rR09��EWoo�2��\ +��7�����L� k4�a���AY)�~ٝ�x. +P�) +�%i ��������´$��2���^��� +6��]7)B�W +�q-[�@��:� +�H �}Z�X�ϐXv���Z÷�@��e��'�5b@�9��:�� E�@�4�k*un, +��"��?L1@���6>e���!����bt�� + +JYy)�\.�9�6#�2���L�z�(�`O���@�r7 +@�մ +� +�9ҟ:���3�^E�j��� +"�~AV�^]h�<�9_�f��?�� +@���08��4�0h���_��N��}G��* +!�aP +��|A�Ԯ��T`$fx�`>�g��ɶ3�* +���c:����U���@�"r,@}p�#�w) +�q�eNf�A�1B��@�x��� +�E +�0<J�z����_����Z(W�Q�r�`�V|���M�`����h�{1��~�������s�Q�-�]���cfC?�M:�y� +¦�YK�w�*�1Q�����_)o��Q�#����N"�a�E�߉�V +�K��Y?��'m �,��0� +|c�Ʈ�t���������y/�---�,{��ǖ +K���۫��Ҙ�pU]Tg,���-�]�8GǖU>����b�.���o�VA�uI�_V�U�zi��u�uNU���BA���3*�����e���3~�ss�Ccc�c����EՍ�h떞�ʪ�^�\�� + ���� +�aL��`WF'���2AX�|������� ��ݓ�W�/�O����pe���cz�8p�c�*�@�#�r?����E�����hu0 +|�w���FK�2�|������t`�ʘ���@��A?��+|]+�TZ�r؇�D�}"�p����8�����F����3� �V�g�=J�O^���^�U����t��C���KS�% Q �Q��" +@�0>{vo��xax}��)��&}���N�����Ç����ұ* �?�ЯR +�������� ,���ϯ�e;F��� +�5 f����H + +�N� +@�r;K�"����-p�Φ��zT + +�����ۻ��/�-�� +ю��R +��#m +�� +�. +�=a�4S +�J3��o~�0* +�}z|x���m�lhx}koktx����a��=��Q�A [P + +�H�_躹^@9 +�)�G� + + +��vt) + + +�w� +�u�R���qx�'���"=����7�fs�Y�@��ϵ�^��WH��O�d�LZ�o�T�&�;"�q]@�Fc�'�ҵ��A#��-6 �stC��������y���/O�˟���^9l���[Ϟ������?'<KE@��x��2�[ +@H������d� <(( +�V��X�t + +��/S + + +@���# +��kYL�y&�������3���P�� +R�I5ȳE]fQ�o,>)�Ԧ�#ş�9K��!�B�Z����R]�E��_!��9E���l5�V*%3tyPk�F@�^��&��\�y���?�����c�a" m��O���?����
���+���!R69������������ +��b*/��N�bs�8�]��Q� ���0>�� +�CB�9�V +��n�;@eg�O^� ���pT+��Y'm��6>Жp`�j0�;`��/yo�?'� +�q1 + +�<���[�:�ʋq�b;@��R���U2�����Ls���B��u!`ar�*)���a��?Z��x����8����������~��D�� +��ڂ��~:b�����pP�P�* 4/�~�L<~�Q-QoP}��B벲7h��R���}�8
��t|���K���.V�UJ-pvAdC��Q`Q�M>�.����)�?(�0$ -����{���HmV����Y3*�B���+�Z�*�£R=�V�|�%��)^��T +T�S3���F�o��͉4��裌 D���??�T�R��x�x&Rpؠ]f.l���6���~�ua�F�X|T +��1 + +��ÿc-S +@F +���c +�N�� + + +����c�� +@M �����O�.{�?��c��v�;� i'���Y+��Z�K���Qz닶yW���~o�j�;w�X�`�b +�{���V +��b:�<�;�?3��b +�A� +૬!@��h/�o�}~c~{-0�����ؿ�� +�#�� +�o��V + +ҬOU +�~G */��S���ܹ�* +!�� �?т_}�w�~m���V�c��oӳ����o (� �{c +��'*�ӄ�B���?n.l���<S +WweW���5mo*�$ +��A���8��H +��ܼЩ��c +��g + +@�����/@�l*�)45���듁��_����� +T�T$���~��m�{͌X>wh�\.��{�n�VLbվ�to{s|h����]�#ku`�J�� +@@��_d +@��0 +��\��A +�Ԛ���Fz�T�O���t�B� +��� +>�'�RxN? +�a�'�FT�Q +��=& +�q]�F��1��OW������z�!��V + k� +��R^ybZ{�s����k���W����'�ʷو�X��t�-�n��Q��o$e1 +H���TQ���*9�p��\bid�OP4Q�w�-z;���\k��F��V%9m12�h"��ٹp�j���pZ/�yp=�:# 6̫:�Y�ƅ����m~��u�������O��~?t�`�ؕ�"�dg�� ������L��L�� +ޑW +a˚(�M��Gȗu� +��pշ"�*����Zs�d�Wɧ�b�\���\����$?U�K7�3�����(�o��0:*�VA��:�Qv
�;I܄�u�W.M�p����K�� + +�����(�'�T-l�� +����F��`@f'���=i|�(��Eu^���_��x +��oM�U�A +�aF�/Eh�W +*�~�m�%�"l��[�H+ˣ����X���<D_���Z�,
�~����3���D� 3:��[�����~�;�?k#�`�H+ +@D@+Y? +��|�=!&����7����3�P +����CՁ~d@9�a�hʸ���# + +���K��8d��A�ps +bS�fk6bH�}�9E��풺��T2�������u|����=�
F��-�B:��cm�˜���q� +Ai�<Өܨ���:��8_Xl�'j��.��\x@f���k�H'�������7+�O[��8��`C �I�)�8-�����Ѫ֛s" +�ߵu\��챱)@���_�/��� +�K� +�L�� ��_gs���� +��*�o�����_y�\SI+7*)����,4j��ZH�.�J�7�y"��������-R<I� =����O`6@:�6ߴ��TLU%fw3}�����gi��P))�OlznQ;]�?=�f&�ܸwos���f&p�k��vE���N +YO��� ���1 + +@�b[�wP +�w���p�$�+��) +�@������N�M��3|y����ͫ +`R/��;zé��I�-�'?�x�� �X������G����zeznn���\ezpǦ+o�J�9���i�Ą<�ڵ�kaMvc�4!6�漎O����]�Id2�mϽYNL�g��B�z�^�6"��.������?�+VV,��������ʦst��Ĵ.21�щl۔�����v_s�n\�c���j�N.���Q�p���n�b:;S�+���*��O���K�T��������8�piDOE��{�'#��'ܟ�)M��)�i��N|�����"�Gs3 +���� +�vl�,�:=�WI�]�};I�Q +p4@~�X +�� }�P�,L���'T֕j��J�p��y` +�=>KU�oZi�2����~HU���{�U���~����0=���'����@Od���!j���#<���i�}��>�H +�1@�Z��5V� +���'w�yڢ��� ��8�#/84?�A?,��,�v�5��?�9�d�ل�9�n�M=*>j{��� ?��a�X�.���U�c�~:��V�QK�"N ���FJ;��FO�^y�6,�#��e5��<ZC]�|����^�IU�<��{#�{ +�ӕM�k�ӑ��{#�ӑj�=���*�Ka�m�!���-:��ymK�#HU�D�k���{NP�#H߿�;T���`_9�[�I�f(�J��>*O���D\Z����C��a��&"4�F9�._����_��!�>� + +@@~���^s�Up��]e�q7�#���ء)�Y��84 +�í�����h�g,��P��L��o�%��H��|���G`�W +�ʕ� +@D}��� + +>�ſԕ܌.X�=�w$&%�k4�
� +c � P
rK���c �Xj�o[� +�6� � +�� +�k+ +@D@+1 +��a���� +`�#��h�n��-�v����Qk=��.�P�E�
ѵ�4�&���@�ũ"����
ŞU+�b���.g��%��lr�E�j���3����O�� +05�ʩ�^�@�2��D��V���r�Ё��҅�{Z�{^����?i��h� +�� + ^�v�F����8[�!'�� + +�{t� +@nK_�]�~"��Y����ȰK�F��8>0 +�Y�D4`m��Z�hJ� *����;s}gi�`N���ʺJ��'#�"���G��s0�Wo-�Od\Y�L*�Q�o@w? +�4� +��( +�,�gX��!S +,Ӣ^��r�[��U�!"�M +��e`C��I#�� +@�w���#��h�(�Ϛ�j3�k +���^y�8;5���t����9 +�"��#��ug/Tw� +� � V��gN�� +���b�hk��Uʬ��l�1: +���c2�' *ꡈ�'
HŮx"��o�]�?�{����}&���9������oo���o!PpO?� +�c�?=��* +@�-�h�o�"�M�c����8��+kkk+k�W� +Pq�����@�3�$!���u!� P���
�//���He�W�#�]����;�`���-mq�؊����K1�9��H :U�>���ʘ2��6t{\W�
� + +A�G;�"�g���ʀ +:�px��IZ*�oT�h�&<�y��n��}���]z�1o�0j?�٠}!@vXyj9@� +�'m@���M!�VC
@0�߆G� +��,�9=jw�Ȝ���a��`�� +�q�u#�����Y|u0���/�7 �PP�O����g_!�f|tHY� ���T����p +}�^��o��`7�I���n���=+ + �TB�եU������l@X;6x}�����C���,g� +Å���������.�}���0�ا� +�q4Z��� +@� +�?n�����@D~����Zd�D8o�o�~��wU0��=f
��}�����#@~�6��kk++kh���! +^��KA>0��$�#a�� +c�L[��=.O�Q/ˌ�C�?m�WB�j:7�&����+�z��[�&���}��i)��T�=�`��W깑r�����S���U~G�ʕk�N�&n��8���+��0�~O��t����k�����W�q�(����Ւ_P�P���"��<��7�0�~��� +�+�o2�#U�7��)?�#Nu�R9�X�����R��~�KT*�(פk��:?_��(�lbbB_W��
+�W�������
|����7hs�m/l�e`� +�[�_YX� +���57Xԯ�
.=&*�M�WWvE + �@�ϙc +�a��ʼ�Ӑ:W�����*o���;��m`pd���#�2�O�� +@8^a2���^�eŴb��ֆ�h�ME5�P� +�'Q +& +X���<zF(�|\`emwwmhhL��땏�vW���Y[���ۿ6�I*5����P��h�2 +:t��E�_7b +@� +�Q +@o +��=c�9R#��wD�� K�`V�=R}�B���c +g������Q����[Z[Zځ�,�����2�
+�ҁ��|Y�z���<�����A�z +��_�O2Q�ߩi�Y@�l +֡ +�ޝO�@; + �~m ��lEH +�* +�{%��#~�� ��ࠈF� {��[�����>L��� +�ww�JPtM��e������*�گ����Wo��I~ +[��X[�h���!��}��K��� + +@H��j)�ݷVS|Ak�_,��ݙ
� +�� +@'@�O���ťS�{�G��'@0��s�� +�ޝ��X�9�+����~ +�T��\����6�+�Z�wss[������+��c�sZ��_p��g`� +T/�oC�1s���.^��� + +@-��lB���H�>����P�/���������C��G�Q `�����J��� +Ư�AL8���2��ӫ���qT�u^�-��6x���aG��ј<�.��ٵ{����Lx�%���΅z�N@OO��������~ +�J�6���H��0R"?] >j!E\�o��&¥�մ�p��5$��b"A��R��цWC-�(,�� +K�ckk�A��{�j ���},7����ݽ-�"�"&�������[��v !2�VEEDO��y�Ԍ�Q +�u +�sb +��fg�.��B66�?�v�O�N�j��X�� + +��
>��� +�� +�|CR��2ߋB�.�� +� ��y�l�������;�\����=���1��q��������V + +�;.�xggmgW�^^r�" + ߧbZR6���撥?��s��G�Xz��8�������%? +@�6{������)1��B��g�}R\�i�&��/
F.� �9�-�� + + +a���l��� ++*,�תr,�aނ�P�c�m��t5��Ŵ����'�\~a? +�aq�o{]6� +� � +�C.� +�v���j���~`FQ��p����,˗�p�V��t�����w���������ܢ��@5)_sw�*.U +��,�*rf�y.p���Y�8�� +P��5.q8��}�;*��?/�!K?w��U&CbP
�c`O�/�ÿ �eM9�D�;�AF���W+�Ƿï��E4����a�\Y_��/Ӑa��}J_��>8t]'覗VW>[ +5���u��x�zi��������A^=�ޓ��� +��(>��P��th����m!�qH��L+�u� +�~��T�.��9h�k~5xT{@~���ݱ]۔�ZtГЯ��na�Fs T i�*��_Xd8�Ԙ*��<#�\������L���ZY�5��� + �ᷢ�U��5�q�*^;���7V��y�ӻ@`�Q#!�-+�r2��J4��ApY=�z��HY�F��xȊ[�*�d:�*hW�����ݙ������4�) +@�9��p����*���:����C���`���s1��v����i�� +�� +���0�|=@H5Lz� �"�
���K��zkI���r]�qP +$ +3@���w
M�Ar6<d�u�c+o��U��3A��aJ���*_��+h�J�j �7A�絤�S�T���C2�T�9�X@L56.��E���t\Is���^�} + +�ބ�J�=���8���7��M3R�!'�W�3 +P�T�����O/0|����P���.�ݠ��@��8�#PB���̈�����ih!������4�k�_�\���J�{�R�#�߶]���f�2���G_���z +������0��;����r/o��8>�3}{�P`�5� +�����-З>UJ@w�)($��q{V�֪���.��U����(�WR;ۺ�P�l +0U\�00s�N�����
c{'j���C�Y��3������G���g�P�)^,_�O��^
�߷��w�����N$�8�M�i����%^$�[�|� +b +�@[��(��O�W_Q�-er?( +��;����;� + vqo1�iޮ��``*�h�J�K�|]�e�3����o#��
���M�S +A�-��6��ט�* +0�(^@�+�?�OG������ +R��r���G:r��O��ӦNWy(HZ�6���o��-e05��E�|֢�r�'�H�ʁ�n����?������w���ԍ?+)��.�h=U�u]�Yk��h�-�K��xH�*wl;h5� +rH~Ii�����=��I�Y��<x�j� �������Y�w �X�wb + +�ح��� A���ޚ+M�J�ifss�ʜ�z�R��LO�'&*:�ML��\+�(���̣jOO�h^ �*o�*�w�k������h��T���ܣ4��K�>O�눲վ��b���.\Q�#�O�:���+� +8Q3+%�(���/��υh�*)殽[*���[�)9�L�+�J���rD>y�tC��]*�4T�S��,�7���ќ��'�<J���'t�4Q��
�8O�F��ǢL���UJo���t��!=,>�7� g���`$ +o[�"0��c`�Y@��p� �'G� +�ɨ�( +�$ +��&�q���:����9�g�eѱ^ٹ�3]f +�O�gn�D $�� ���w�� +�\Q����
��l����H�JM4�����
������
O��� +@� +�I�U[u��:(��U&J�J�Qp��%�'@\�+������N���u�'9ˏ��k��쀺q�����b��y]�8 ��p�:Rԡ4u H�B9�q�d���U��W��Ux��/����������T��"����:R��>�n�Y0�W*< +�e�hN��] +�ж�'�H��ӌ����� +�ז��wW����_^� ��`8A�z�qq���qv+��8�&�n���ss�7�&���t�Py +�yw +��=F�^ݟާ�XW�����a����]gI��\������v�';��3:���� +��� +�^[|4��KB�?� + k����jh/��]���ߧ0�-tPo������u�5ء�@l�� +(�5w�;�0�R����~��8KKZ_^ڡ�A�]�hQ0��hӋ��P�(��?�i��3g� +�W"%o�*̎�8�_%���[�[~���s�(��ڗ��Y���+Y2��� +����ԉ +��z�n3��l]?��O� +@������1 +�6�N��ߍaor�+#۳As��"��7�7����iG���ɗ�*�MX^�Os��� ��5�6'*�:5�
G�U��ʁ@�Y�R$��r���.�`�$��!2��/,�����ԙ#�xn��(@�='�_,^(�S��鎁�gf�:��p+B���l�S�4<.���L�#���o�C��_MF*ՆG�U���1��M'ܻ���3�g��N�m:�p5�h��( + �����s�����'c + +T,���Z +�=��+�[Q;�8sƾ�� �R��M�z�z�K�?�`el��3r��>�þ������1��k��b��:�8��c +� +�߱
�A + +�� c~'p��,N��?$������L�ɬ�~�?P@GЯ\`e�����3y ( +�W������n����j����r�c�| +�V�kՙ�O��h��R��5X�P��U��D�R�jU�O��g�P +퇟nN� +8��Y��q�zT��@lt\E%R�Db�z���
�4�pԥ + +��w�d�#x1�'f����c�IZ�q9���C�p��ooe1 +\�o�_ E#� ��M +@��c#&���Y=��<�;��3������> +��֧�+>�T��t���:�P����>=����1 +��j=?l�S +!��c�����-г 8`L��@�D�� $@��枎��3���
tS̀+R7�;k����ɘy"z0���� +;n�-������T3ր���~������,�G��Z�&_�5� �|��
@[0@8���k{[��
Ҵ�����B|��= `�ן�PA�;'����9�#����p3@�4�� + +�-d� + +�� +��隍w��W{� +����>~� + +�]z����@.`UT��-�N琳���4~��~ +�p+� +@-YH+�!0 + +��Ry��`�WpT +8�Np+f�H���w����'����v �S�:���5�"�� +c�@+�n������ +W}T�����/|5 +�sewmgI�Eױ��S��-A�������m%5�_Ooʱ�"�;tc�;�& +����~�M�����8��+� + +:�Ь��D����
�W² �ݕǼܗV~�0���@�wR +@�U +v�8�#s*�r�ǗV�hV��rݩ����\��ӿ� ���@�ǜ PO����%\�*"_�zW��4���w����+����}�zt��H��w����[�����|�/��{��A�&2�E������ +3�xs��1&t��|��{��,C�C��}�@ +������j��w�J3`�( +�C +�`ar�~ +�2l�6�Ln�7@7<��W�o?~,�5!�G<�����G +Y��̀�9(���f +�L��9�NS��� +@���~5p��^�zI˘��e\��� �q�}��t�ws83�lo�_]�z�0 +�e�[%�dN��j�A0�`���F|��w[�R��*@�n���1��&�=V��%JA/+ +�E����|K�cL3nQ�LQU�U���!զ��'���{�V4���~�*ȚnnG�dyl��-ÿl)z�Z#y����b�b���s� +@֥ +������ۍ$��5�:�$��F��fE�h@�@�9�h�F��DD�O1�cW���augvQ�
�݁F� @w17��y�y���L2���Vx�����2ss{�Zfn��-�'� + +ɀX�zt��T�[ +�����<��9�xl���, +�
8BI^�b�P���1��'��*?�u���&�۾H0Z���J�t����W���׳5�'��%$�ݻm�N�����xK�P�^�I�4��z)�#�];P�e����]�'��j:�n�� +��y�k4��[ +��D +�o�� +u���h���?>&XN����$�o- + +�}�G���T���x+ +�l���,��3� +�G()� ����ɸL/�V�~]�ks-��ٟ?� �7@����;*?uB�~���Q��˽W�7�=?fX���9 +p x�Sa+T���}�}�Mu9�r��ty���wA�� +�g��f>����,�^�Ɏ�'��m[f����j��)��� +pHb~���[ +��s�C��{��5�8��`0AD��W��c�BC 7A��(��`�B�W� + +EW����?���;��G�����B +ㆂN� +8C`r�Wͷr���L*�(�ֲ�ݑ +��{��\�䙱ߌ5�Dl��9 +�c���p�G[$i�٣ϗ`����3Mp�ky� "6@�'��H +�����g����N؎��r������@瀖
�; +�?e8�XTem�MU>�������q�b��١�O�zZe@:G�~J+q=�q���R0F���2�tK�� +��� �D�Yʢ��`�t��,��`��p6#�N +��ybS���,)� $���]��@�i%|HgtC���h +��?}�7Y +i�i��g�w>L�d�=����VD�& +�w���$�o���P� +muyrܺ����\��-�?n@:��� ã@� +������Qƽ;����F���@!�퐗��K��9 +�#�ß ��� �P��<C�{>P�����D�!_�+M�:ܔ + + + +�� +�'�Y�N���SӨw?x�����Ӗ�M�rʝ�q'������v���˅��|�X +��5LEpJ�\� + d��\5/�u� +(�f�l.�#�%��r��A����l�<���H +�p����!�� �9�_���i���ibx,���|̂����;����/� + +cs��)l- +��V
+5#G4Y���e�e�P +����~��:B��k�����?����w�V� +`�)j"�3� + +��6 �mD/^.�,n�ٹX�Km(�s�v�kI�9n�0��|���ni�vFJ��������y5�"���ܹ�r��|� +�A�A�[��\�@�1��Uc?<�k.#:<�BVHI���i�>��͎V�N��C<4d6�RFH5V�l��a� ��u���q�/h���<E� +=����b4]���x0_�����
< +�ē%&n� +���Fs� +wp�ȕu�&,f`L7��w:"yg�(Dj�W1E{�r������9 +�͆�~��=�Nȳ�~Z�����hVe@S廭���\W;�]J�L݃!����x�΅��f�<J_�V��d�F&Xs +�`g`78��D�����[ +��:���X�� x��;�����/(P�f7C�w�&q<� +�:�o��!d&�"�3;��q�u8_Ӎ��� ��eط +/$���>s���KT(����l�:(Vg�iPH!�dH�G�x����@�A`�b\=;�Ȍ�8�]���˝�e.��d�B3�U~����<� +���r>Z�VP짓�|��ٻ\!� +��X8-��.N��h�S�*܌yHyyH�ӫr�.X���+A4�I�T@�`G�9��}���?�y����~� + + D-��3�b +������8�Ava�Z��B�*�*(M`g��8
�����-��[ +�P+���C� �l�j� +�럭�Oc:}�-��q�_��%�6׳�r��P� +Ĉ�����Z��:#2����@����(�}����CX�]�>���U���lg��:B��t�P����g��9����+z!���� +*տ���� + +N���f��<�L��x +Tu� +��Ǚ����@!����mể|��ȶ��������b�R���9��|�J��I� +��Sc5 +�[�Y����, +��$�[�>(��>m���O��,�0��֜�����ۧ�p�����������Ϻ���^���,+���ݹ"�^F_&j���0��橀������p4���ۭ:�:쿲L�xl�N��=1�t%�`q +�xܾ����^ŋ�?�/e�Ny�S��� +t�w�&gO[ +=_�@ @�}�7[ +B\-��z6��5ed��8^����g�K��ݤ� +��Ri4��4$��;@�! +��gv�� +���������4����T��Iŝ +L��"��+>���7r]
s��K�����p�WL��p3j[�4�n�ٗ��@�}?�쿢
�e4^�R��m!�1 rW�`�Z&P[�7� +#�@� + +�������n~����_��l�r�w�V��d�
ޗ�]�V/�dn47+.d��8l4=��9���p:��+4cס��/���|�ik$�JFD��o �x?�.�~@��v�5����R����x���\\���P�&���(�����E�Ͳk���ƃ��CQi���4�)����}�ڔ�5D��{*���/K��m���� +P[�Ϟc� +M<��,tftZ#��D�i��������� +{�G�(�4&a)C���Q�Fv�S����: +"d�=�=�Ă�! +���*��q�K�LJ�����H��i��u�n HA`��Q�N2�x� +�����E���ْV��c�2�����q�d��m.�r]?#)Bt#��$���22�iy)��� +�y� �W~�[H�b�>��� 1��i��5YZ~x��Y�0����������ݻ,&������gx�)���Q�4�����ؾm�;����C= +���u� +���4��<N�U��ф�)��-
���� +��i˵�*��!�/�����BU_`��Gx��, +�V1�]�_�?G���te��i���v�������E� ��y.�͏��sEu��m�` +8cKw�je���Pl��kOi������l�Z|����!��q��#�G +n) y��QM(�]�<��t�b��K�����n4W���U�UdQ%�p*���Rу1�78������d8��& ��.�"tvI��z?%�-��#��Fd� +1Z�����j����M�W��iO +M��@�$��a���+"� \S��"� +������:`eOo�m���y�k�:�D�eF����*Z_&�� J��0Z�a"��!ӥ�F"$�۟��B�#��L"I�G��^��t'S�O&\{��h�T���TPbM��E$jJ�����)em8��"d +G>Eh���˸�A|O��%�7���9UQ�̉�'�rsL8�l�5�P��,�_���⥋(�5�R=��3B* +&�Ͳ(�x� �����yO5�[�I6�XN}�����8 +�4*�e�˙
Xs�����*
�� �+�诂��W�K�]L�s�W�!ϖE�J#���6k�q4?��MI�}T� +
�
Ӎs.j��bO ++��7��.i�J����U�$hE�{a�b���jfW�Ke�Z�q����ր�3(�q�wUAM +`�`�&����!�h��k����j-��&�G�8s�$2[����k���o,F0�C��M� +n�Hͨ�K���N�+�.�ՕX��Ƚ�K��\#��y;\��\�9����)E9l +w��Lr���[L2�>�d��$Ukn�h�@%'4*�E����$`��i�j�Ϧ����a0����5��3���Fs�s�U3DJ�dN��p��N����m�&9���%MѼH��D�I�||�U{��I�FėGj*���B����l�q2�P�s +����(��G��"� +�@tɻ���� ��pc�< +�u�4�� �en���S�T�$���8����S��\�A�E��k��p.h��0��mD���ϹaN������yѤ����V��*����/�dY Z2��e_�C}������",e���J̑T(��� +;�g�d��B�+B��r�Ү�n�ȟ/KP`���ĝ0�q��2A +�@�����D���owb@��� +,��F��4Y��\ti?k/\��c��"��&~�˯瑰p�u!����th��T�Sqߑ��"(r_�ǿDs+b@K?�V����+�R@%��[D�KW\�Jҹ^# +`������A��}&�Q��t87G�Łx�Wif�<>ȩL +upM�xC DX>�Vɑ�o����V:Qf�U V�m8�Hu����l�:�E�]T��a!��1A�m|�m�������Sp�6 B��ƺ��&{�|�wF�j�/�2�?��� +'0\_�7� ��|��q��X�W��ġ|p��X +��� +��ջ���=�+z��'���^�
;e��w�w�N�KWO�=���@�&G@�>�f�&��i���lf��n2v�<��������:�4�;��`j�$K's�l��{�j���/;� +/��M������r�;B(� ��eȜ<�s��a�(��w��^�TaR¦�8�7;�.���F�Ry-j��`��a�6Dv�������7q1�%:��¨�.6�=7m����s��cNS��B����Y���� �ģ*���]04�[�H&�K؊ +Uߒˋ���?�>Z +Id5�k?@�v�p�������F]���3P��I5���I��s>q䓚��B�� +H'̊R�ۭ'�B̀�d��ɩX[iR ���!�!2i�� ��0)svyV�s� �����,�����-�&�n�k�d��Q�4���g�%"Q���,�\51c + +Φ�"U�Y�1�3�3 ��\ȍ���D���m�A��Q5NȀ�l� �9�϶S$����<�YŋI�pIE!�2�an:DN����ܟ���m�6�l�D�wҔ�E�H���Q�jZr�>�Et� +��8���l�;甀��^��?�>�I����T��X + +�sP���4�}�' �b�qId��+k�?R4�� +�={z��3��|`��zn] +IMc>��8��/��[Z +�?�=�w +�UL�%�[%B��qIJ�*��W����U6� +nX�=)@:�?�3!����ΐ�g8b��d��G�����Iϑ+�g� +�{g�B���+2H�m}��$
���0��Բ�j@�F�6M���ߢ�H�O�εj��z�����bE�1���ԅ�hHrϧϨ�/���R��w��^|������QC + +���h�.�V +��r �fk�2R�gb�4��t����,��)5�pJ>d�h +�Ss�QD~�߅%iYC���Y��Q�-��M�'Y�;�NX +�@1��]�+'�m�n�Գo������$d�,%����� +z&؍��7��{��>s$��8R��3�6G:~��$�RmJ�b���z���~�Ӛ19�0��q`�Ϳ(�V��4��7�'�1H��H��#- +�*����J>��bb�f�qkØi�P,���<C@��*#�������u ��F�@0�C� �kɝ]J}Խ�)�=�_�sU�E�q� ����s�J��#���\^D<�~���?pxqu����9 +4��\ +��I�4v��|�$c��C�z�O
�� +����LB�?�|� �@Y���i +x�+���?����7�����0s�r�/�#�_�����ʏe�* +���n�M�Ռ��5�^�v���T�T`;]�h��v�ϰ:�hf��+�����*�G�Ҵ�;�-���AY A��{v^2B�C}{�V����2�lO�#b�hO +v�#�d�A.�2) ����F +��C +�xfgM�Է8 q��H��g_9�72@ +,1�3e9|��o��{���rx�[��PZ<�j� ]���$��OW��� +(��n� }`~� +����5_�FD�c���O��o�h5v�]k$Æ�5k��
��f��C=��~�OiB���y䚼�q:ڷ +��zu���1�� � +7�{W!1��p~��I����ώ��㏷?�~F���F��d̉ +�����O��nj /�����F���o+I�'V7�O���Bv�S��CZ����f����I��d�X���r�b%�\� �K/K�l0��D�k��W��$�����8�.�QM��S�՜R�p)��DN�B$g���
NVc�"v�ϠNX��ˬ=D+7=3�+g�n(�GJ�P�*Ԯ����I��X��e/�I]��Ƈ�G��Vfk
G�k���q#�G+��^<m�9*bnM�ڠ���&d�J�V��93� ��n�S��1<T�p
֒d�܈�Aw�O�Z�u'�J��8r� +КЌ +�ۏ�ߓ�h +|)�� rB�q�_������1�罃�S�7���R�n���'�wcSґ� +�k��Yt���w� + +Vᲅ��D���o^5T��R��)i���� +�g�E�&��|�� �/(�+�p^����Մ����j2�\��7� L��!�#��e�S'1����A
�z�~�^���R�ε��&4G�>,Ւ
�!��C + +� +�7�������Y�=?��s, +�Ux�b��"W�h��3s3ܾ+���1O�mZ�K��-8��@1W�DMtC5d�4au��G�'N�wر�^�,�%'R���ExnSj�%���3��=J� +����]�4�n9;�Z�Fѧ�L*���Y��xW�:�}�uk��0����B�p�j:u�.��^�(��ώA��q�\N&��ǃ�.�P>�#/&�����N�m�1�v�<*᎑J"[��,��5]�
�NZ$�����t�Z����ë�O�� +�ʙ_�`�^�����f�X@5�p=��6_���ݥ&�d�K�cҏ�AJD^ +�����m� +��cy��γ��JK��s���~.$X")ƻ" &���(��L�����R��Tc.d�
��/
U忇�� �nڃ��5^c��ށ"0��9ש�J���f���[�uW_��J�"@��*99m���X�yK��y��nu�VǨ�)�w� +dD�����Pޜ��Ku9�A� +����Sv�3�9�}{%��'��Ur��|��o/F�����H���W+��42͖n����s�N�n��w�_�r�����
�-��$���_���Ɖ�q��M@�i �v9&xd�8�;L����|�ljԪ�7 +�p��߽��\�{�H�����s��/��ˋwZ +�(���`�X��C +֟O�7n� �n�����օ�@�[��O�>��k��B@OX +�X�0��Gf�͵�����Z�` -�N��l<���YIuݨ��\M����Ȁ� + +D&�֕=[RJʉT� +���4(�P�24H�#�B7���P��� +�� ��)*���'j�h<�!$�c��~� +2 +J�T���jO �\_@�m� �T���9 +� +��s�Wp��\��-X��~"��=l�x*;��D�����f�Q[��m�6f������x$4鶼[��c��\ųK˃��[���|&Xz�%@�<T�K"���� RWt +r� �, +�f�QU���d�-6kθ��W�\[*���vDŋ�ٰou(iȵ�,G� +}�3��\x�H��g�N��o]��]�y�K ´q�S��$1*�2��)h���x +�q� +�v(���p� +>N������M]�R`u2�W���42� ipP����o���ďm����� F�{���X�MA�0f�a y�����d
��s�f��z�o��^_s%�*r^_���A��z�-�|�|��@�|<�'1�u�%�� +0@:��~_��L~>O�Kj(����O@X.��p�FX"ly7&2>� 4��* +u���Q�R~f��- +Nk�& + +Of��>)U�j�q=*��- + +�?J��O"��NE.���pX�� +t�#��Ǧ�Phh� +�O��g��e��[�R��k�b�� Q�؊3����c�ńOXM�[�C�7쑢n?�c� �b�Jym�l8tU�N�(�������ZIM��9�/W�%�]q?�|�F%��[ +]�:`/(�*���Or�w����8�u���y"��
$�n{�Ꭶ��- +?�@_]�9��[ +�%��-�`�^��j���k|��M�5���s�ǚ�|J)������!E��kK� ������%��{��x��Bnc��E]N�~� +����6D� +x�#�(�KɷT�|7�u~G�U�q�2��� +�jW�҉����;�W̷ +Y��(kՌ�d�����v�����:q ��y� +B�!���Iso�: +����%)�k�����j*�)�'&N���zʣ�̅Z�y�8���9T +R�r��ؗ�bM+� ��i�icNL�����Q��ڎm ϢBc`�w�- +�8��}k���u�Ȩ�����7n���]������:��,!�˯�P\�o�x( +��iy�uV^�Ή�[���DZGk6����Km�V�;� +hUu-� +7�
����^8&�OB��ewp{��Yg0]��ͪ�~9�Kq�j +�y�˛ȟ�� +�p ����S���!�O�j�8�
�U+���0]�@�N��-9��j}ⓔ����W�w��l]��� +ZQ���@�� ��Y +�� ��� +x^o赍t�����Cd��
��`O!ҏ����t��i��1`Gݕ@����]W� W���T��J�]��S~R]s~��2-�Rl, +�M�hϫs����\���c.�������T��l��#\�~R��_��W�г�&���t���b��(��2�:2_:uA`�pDѕ�C�� ��Y>"���:E��.V.�X��$=rR�\o
�~��D������z���w�Ā|P���O�z� +QPk&O�h.�� ����9 +b�3�*����̓�P@���U�h‿�QE��[�f�#XϪ\ՄF>��l�/�=�']C-���H�G� +���%]7G�F���/���1j�@�9 +o�- +r1[��0�-��}�|�C��.��,}�:��|@ V-r�@tt� +E�.o�V�3a?��<迠 +9��l�*����>�7����Y +��2_t��) + +��]Cl�w?Mѻ���7�ª��9�kX]�O{o�C�\/l�|�� +�/��D��k߰�����Gߖm9���L֡h�d�B +[���n��=J�b�|�+y � + +�� +�/}v +�g�@3�-��+ �v�cRDB����� +($�`���\OY���X���)�.f���3|�B2� +�KP�.�k�> +��, +_�"��R"���s�� �!�K2���M���]���~&���e�F$C>�! +*��{B���"5D +��( +�۷�, +�� +C +��� �pSn�H�uh`!�I�N�����Q�)B@���`�C�� p�] +����&�p5 +z��=ȡ1�� +�s@_@/3��}_� +bw�ގ��# +H�m�i���
�Fݪ����a��:P�$RS�g���1��MT��r�m��߹b�������e��s c����(¥��{�cn��ブ�=jԚ/�?*)��72d MW�<�C��俭HQ�wQ�Z�Z +�z�����}p��� +�|�X�AE|���Ԛp�QN����� +y+��J +��p۟�8��yi���p���rEy%-qo8\S�z6��s�����9�j1X<x0ϋ͘�\��� +F�r�+]vfK��6�j�:>�쭇8D���Δթ���R�������u��Qo"��{�`�(@08F�`��'�W�W����$s@BJ�$ + +�ۓ�Z +�5��Ts�b�_����|M&�w��n��)�2���)̘C썴���c���ʛ�Ň��2G�+��f[�.��)��2{#�ht �L��^� +&$����օ�zv6�1���zП�>�Q�A������(v��uH��;�� +e ��q� ���I �*}o��o- +���h6�
0;^l��)�(��}�/�4��
��n�Q��fɭ��ר�C��c�Dm +<:~x����n#�������\��FHoQ +�o�4����=8\!�v�s��)� +�tU��ʂ�[7s:M�'��u"� +6_&Pt�Pc +B +�V�ɸq� +J߽�t�'~�@*@�8t� + +��b +M��Ќ +B��f4��� +8 ?��[s���Ϋ �W +�[l�j_����)��;ޖ���5!�v��<�J���Rn"��%[���K�A[)Hk'� ����N`%���i���(���R��%���W�`�g0I� +�"��J��l!��P�,Qr�x=����O�1�9��9Aƈ-��r�=x�G�H����{ጿ�X7䑅���F���x_���p��@4\#/L,g�7�a���3�-� �|` +��, + + +{)ٗ��ܷ��7��;x; +}��' +U:�#�g����ս� +R��E�W� +s���L���N�<Qn2��o +oU�7�6��F���cpx�ł�0ƍ��p��z�x0�q=u��*-�VF{ʘ�ZJ.l��}�b2�iM��d��� `����K�2: � �p�HK2�/��9��lZ�@cA��u +.� +��&���ǿ�, +�7� +��e/ +4 ���h��Ħ�f?O�=�).#]��m]�g�� + +�B�\�����&/"�Q%\s����[s�(-
0V��4��4Bi2; +���E��7����Zc�4_�H +�0w� +;? +89=��i�ݧ��OY +�v,.[��qtw�|9��W��<_>_�&��f�p*K�\��Ai�}�zD���b��4�v>��C0�R�O +V�8"�*�M> +@� +�nQt�>rA0�>�iA���, +������f�s��r��`�Y9T�Xn~�� _|:\}�F*x��0�ъM��]�i$<��.F�[M�rH��8з�X�ҕJ��p��p���~��r1���j4���I0W8 +BA�V[Y�; +��, +�[p���=@j/��a[@��Q@}���Z����]$�^k@�G�,�.H�x|rttr��o)����r�:� +p�}���L#�r����? +�?42@��8��?�8ƀz@�W*�+���k��C����Q"�9����俍�-���?����jS��_6 G + +@A"�@e���ϧ��°�^�T@�SRt]�������n�FKT��l���f�nV(��s�q�!>| �N̼��������(�Q�3�D�b�~�M�\��|,+��d�H�z�_���jMN�4����5'cj�F��-�s��R� +9��)�m|v\S�x��r��q��W��/�O��Q0n�s�|[L$�43�Z +|��h�.���<D^�e5����D +x���tp|� +(D�}�>�&R����e���̖��(��!���\o\Zo��h������� +�/3�ε�(t� +� +X��Z]]�Vط + ��f<݀��l:>��P.g�M8v�Z0.磙k����Ӝ���N&9�3zg��o����AI�G��$ �g�bX���!�:�~�iA4L��Y�����!�s�\���xω&J(���u��-2��c�@X�8�W�g<^|�x����E�E��JM��<�� џ" ���<R +��v�l��$��� +��n��P�0w �FL1�@�)��Nc q, +oKIDl|ڻ�O�c7� +�~A*�{G�-;�Յ��'�"k��^dY +/���+|S���7�z]�!���{����/�>"@4a��G.@�=��wP�(^ + +ӑ���>+�1�^���}C�"�"�uX�n��G +gH +�/�ks}3������ + +t� �eCY����F(8� �WS�AR��"�`���\� +�;dA�r� +�ET�q .�n�T�C� +�~@A1#t�@^1(]g�t�-�_�D��l�t��N + '}� +�������"@� + �o��?}^����U� �Շ��V���-�2 +�����5�3@�2�D"�7 �j�\��a�Esgq�A����z�\���LS���xx `Ӛ +-*pr�+��\l�,�!�L��\�;�wI�J.����'�G$>��Ġ@)��Ή��Ӈ�p����8�?<:z�iص��߈ +M��9�����ݩB����� | ʋ��#"D�zrC��哾� +��ifz�s��B\J� +��T�� +qw|w�u[g������N�;������ &9�+���{���| +d�r~5s��`DZ���|g�'�h�@4qZ��4u��/^�f��v" +�j�|���4����OV�>�u�����\�+� +Q�q=TK���7 +?��?��o[�H�0�Z +�q�C���(萳�L4B�FQ|�- ���< +AH +�q��9�=d�[ĝ�H�c +��H3��W��Y!aK>��"f'�i�� +o��G�&Nv����k�%t��{[�_�ߙ +;�x� +n% + n) +y���d��)�U��F{�6@X; ���kM +�_� +!5��da��_ M?GDؠo��/��X�.L.7��+˒B�l�D��<\#�� F�n��U����J4ֻ��<Fs���lD
��"yXD'�)!%��x"�~8�i���s�{4�F!�P,M|U�|��`@y��ָ��������Z�E�%jU"Y�s.x4_雡 + +'P{�],-�����. +rw�� +����د���no���T���9��'��C�i�*����%V��Ⱦ��|�
T��p���^��C3Pw��vN !K'Q~�0[�\�V�� +��n] X��_�n}�nw> +T�r�` +�o� +����J
��&��B���;�8�����[� +��٨?XF���@��o0z���>�%�Z�э5�SD� M�?Z��am���������p�*M�\��+䑥> +�K4��� ��> +���Ȱ�T�H��aٷcSY�A+Օԇ���8/�p!�:���N��B�f
�|�;U�`��ł�zNi�G���r�J�]ǏMR#lp�����]�>�[R<}9�[\����W#����Y +nu +V�+K��p�MV�s��D�~>_s)i�ޑV��ܵ��0����?n� +N�(( +;~x��ٳ�ϓ�\Dd, +/a�S�N����t����,1���j�s��t�p+t��|�Ū���Ǿ�, +Hj���j54=�ˇ��:�Qܩ�L~� +TӜ���x8����d�UöN�P�}��SX� ���O6��J�6�/X8�*ج�Z[䛸�l���c�Hq�i��1R����1d��#� +����������h:~ ��~ڦ#���> ��Vo�������C +������ڔ�w8�h���ݷ�Z�hVh����|2EM�LxR���� +tP@�o���vc�:ng�}�4���Ҟ�:M��8��Z��;c<�yl)+3 +��HWZo�jK�<��+��@A�u�`E]�ff���d���|%�Vx@i��4��UI���lVZ�L��j4 H��̛ν|�Ҕ�8�� ͖NP��xG��&��^��SBQΣ���\Ν�Wx��5�/4Xl�|����L;��"l�B�j�t:|��ե#�7st�� +�jf�{�����8�P@�5�8�A{�^��&�ߔ�I���T�� +�}�D�Q-�zC%��~�EԠ?�j�oULĕ���L���r�I +� +����akG�uԶv�_��.D����=���K�܁ +W.�ˋ��`��璬%u��"�h���E�
�od ���t(8I + +���% ��h� +�@, +�3W�s$�����G.�As���;lrN��6���S +�zcS�|��0 f���Q�5�;�i���}�>5i�H`n���/�-��x0�
H��O=��h����- +��t����=eH +�ɗ��s�}5�F$ �R�v��yN&Q�AiGTė�+�j���F6���EkQZpP_Yd6�Q#R�
�<x'$�weL�u�aֽ՛�x5_?��D>�z��6 +0��p%�-������E�]}wJ��ߒT%�} +�Z +B��{���Vz��w���Z +b��> +&��r- +��V@�w���6m�c�XD��=�pU��
p@;y����(�`�h
L�-� +��ʑ(8t�\�G +�/�#%,r#� ��\��$�Jf�`{�r6q��)ϖNŨָ���4k�j7��s� !��]�X��R�F3N�&���:*@V�bp�Z��u +<r��{ʁ6LڊCF�b�`WY�! +p֑ +�� +)�q�{R�o��L��e�=�)�R��9)��1Np�5K����*2m�=���k@Pݭ`��vO���� +��y�{ܧSѐ +p���-�2.����.Չֹ5����:ݡz��x�B����+����fծI( Xr�jl&����d������;$!#[Y��=�j +��˛�����E+�$nupq�_�xH��� +�@�~OAu� �]�~�c�Q�w@l����y�`A��Hki�.L ��=_N�#4��XO���d�D�V+�X�# .��l��u�c��
t/���&���\T�tq�� +�- +�@��E�'�m?!7]!p[ +�����?"6RhJ�(ՓYl�}&�漸�8�X��:��BA`�E��F:jĸ���]����"�ʜ�I�J)�#O���P������ +������+8�� +���#�ܣf ���*�b��u@@� X:>RM����Ϟ>}�� +�a�?�
��L���4�\��xv�Y?�#�����<,�n�;�N�0��j��������KJQ�9t������}�=�d6qޡ#/�hT.���U�|���t��fӤqH�^�b]���lA�@�L��A.IqA��6Ph���m�G��R) +1D�������H�����.$��%�l��`�Wޘj�~w mA�wۧO� +:g_�H�u�E=�L�hk�s�w�QN��/t��<,�H�d�P�����qܫ�r�����}`�JS�(���҇c RL�&��J�c<_�p� +܀G�JTy�l��� +ur�m�؋�[*2�L�L�/LU�=+��c +l�F�(��Mhx���P�|A��"��F:I�$%5�� *�| ��sU�\�X}�� ����7���w4� +����@�t��|�T��.�`��=�EXR����{e�:ܣ����N�����N������c +NX��G���7��+ᤴhq&P�����ߧ� +�5�N�H�i`�80E�Li�x�h��d��%X#�4J�:q + ���Y +:� ��ρ6�g���;fb�����摺4�����
5���Q�1�I/Ѽ%2���6�=�����G� +���~P�MI,7��)�JA;�<�DD�]��7.����`�Y�H>��)��`���U��y������d��8���cS��VGh�q+�ဲd�!��d��`CfA\�r��HA^�zX���)��`C9��Z\Rx�sP~'i�����<j$��t��H�@$�٪��8�Qc%s-O��r����2�l���ߠ�;�o- +�~�wT/9ҳ�a���ow �|��nc_��u+�Oby��l_������ +���������Xf���V%��L�}$~��������Z5��'�Ɵ �¡/X���Y?����3e���A�SN�|�����t����F�%���^i���pc�D\X�G����ȡP��)Q����:> +���T#�� �Ebau����=��ut5+�(���FoH!D����TM�� +�����@�e��@�����5�{?�:���ӟ�����#��~����b�����<� +�#�7jj����*��+b+�j���䃎N��W0y��$'g��ء��6��)G�����}q�^��
줟SA�"��W�2� +�=�єk��>Z
]�����3.i�,��@k]�Ye}G������_3z,�]����oS����ZE��~Z�+d� +�1P*��g + +Zg�-�o�K����e�[M�ތ����~|����→��e + +O�e���R�p2��Ɇ�G��C{Z�@��֎����h:4�������b�ж�?�>�B�@@P��M�Z +���+���1� +����M@t + +@�tG��Ӓo�%�?$���g��9�gY�?�.^�'��W�\��\,��s��c@t����_� =��w��H�a%� �� ��1�r$�Ny]V�0�˔��T�z��� +F]bS��������R8��M�� (X� +�� +@��1�M�',��U�m�N* +� +�@�9�@���U +�����/��/\�?� +@��p4��3P3�?=
$�m�щ> +�œ���y"�&�v��ϒ��&Sz� � +=�O�*^cyc��G���Yd~���e]�@�6e���V����e�us��J����ת�`�:l��(uP��Ӹ�~�fC6+`�kG]��+���v#���=Yk?�u*��OW��=X��3i=ES��֤M�����|{� + +z��@� +`��uu���WdB3�] +@�M�y���z�0��i* +�O'��0��4} + +�k�����nk���J�sw��X9���3.g`� _)�[�}�3�Q�>|��V� ����6x��u���M�t�ο��io��ʁ����nGzJ�*j���-���H���믚��T��t\����~ڒ}����{�����m�b8�u�T�S�+U6��Ce�{C��w��є�ׁ0� +� +�ғ�ƽ + vf���o��Q + `�* +���@ +@��|b�p���@�| +�]} +�m���י����jڜ��1U + +�� +Ӣ +@� +@�`j +O�U +x<͢�����;�=z���+W����O������g/�|����W/�h��o������� +�ZBP!�p�D�<T�"���B�5M׆{k�E�0��O�d�a��)��Ms<���%�ɷ"��ֆ���?���{�dՀ�}����kO��w4@�wt�.U�Q��:�!����:w_9�X��U��w�܂������Z�@\��Bz X�n���r{u�Q�l��jPu�0Zp�� +@ + +� �� +�6NT +�O=�(.d@�9 + +@ + +VI + + + +��:GS.���2[:������ڝ^��{yۜ��.�:h����5�Dڦ _0+�1��{`0�A�D:�Ь^D��k�*�i�S��7�����Y:��OO��wVuEQ�'��;"5w~��� +���'C���r�j����U���
�C���<�h���! 4�Yh��Ȏ�b|�;Sh����Y�O�)#M� +Ok�aq����� +@5����vT+��@( +�( +r#�?� �S2f���|���s��m� +�~� +`���� +�`���;" +���P�Ա +�R +��O���o�v���P+ + +���HQ'�@Cg�1��F@( +@�� +�� +������(?��͕E�P +�} + +�} +I����} +@+} +��l�� +� +@� @�?���o� +�c�c��ǟ��OD�� s�S�6��a��X�6���R +A��0�[ +���NE�w�8L�� +��&`��A|��i��^{�_� +�����*/�@�����e��* +���;�w\� SvG[�MWx����� +Xߗ��>'�Z��� +��� + +m�P +�� +�#������C �����S� +��o�@O�T�G�c� +�Ç;�� 2�]�3����}-����5�?���+� + +�������(j:Q�i��$ +�c@����;Ⱦ +@_�<|�#�C +m +@�?� +���� +��S�.Ϗ( +@8��� + +�I�x/> +�UB���!Cc��eI�[(� +��?�}!�'� +��ʽ��ޟ��1��g]�U +к������}�ח�i`���X��b]( +�k�3Wr���Ʀ#-�#��'/]�|��7z|���@�+\���� +� +�?�C�1| + + +��� +��@�nt4�Ѕ���s<���*�lл�K�l��8
�����M��/E +�| +��(iq��6j��G> +������{wn~ +@�� +�!�pG@�> + +�{i��� + 3��j������O��N�`�q w��1���J��[YsS4x���� +@��vH+���^D �� |�� +�@t���X�}�ި��� +��HT�a79 +@T��#r0� + `eEȿ����,��й�?���?��5�� `��5 =�<�1����������>��nkye[ou�'@������?�
�Mˇ�\��N%���ߏ4�O/_�r���k�>�' zx����_�E`Z�z% +;qzIx��5B��ހJ`�'0�O��2$ +�MQ +@�@�/� +�G��|�_��׀� +� +�� +�A=��$mS��7% +���l�~ +�� + +��:�T +@�~1%G=�������} +@�� +��� +����LC�T�ٞXp���ٹJ ���YW +@<�@g�@( +��L�l* + + +��^k* +�1�1�G���z�~ +�H����$(���A +`���@C�~ +�} +���Í>�?{�_�?���/����> +���xO� +�H+��@�X��+ +�+@>�ﶫ + + +���R +��H +����/3�}����&�6�ہז���� +�( +@�|�Y +��Q�)�� ��r�w���� + +�~V +�� +��{�d���� + +���| + +��^�[��v�⧗�\�z��5��������勿�Q���u~�f +`��66ZLV +��"�eJ. +@,�C�P +��JPdܦ--�����۩ +��t}�8* +@q<����R +��> + +u�@�>� ����* +�WS����(g�#5���+]�
�� +@1��"���,gO��#*`�~ + + +�n���� i�����:�ďG +���T +���-���x��&� + +�ׇ�� +*�/,��U��0+��NP+ +@a�+��I> +� +�ӥS�FBh�)��f��`)�_�( +���1�y� +�OTY� �~����Q8��*��^X��;��� +X͉{p'�m��� +��?�ߏ��?9s��O?�r�ڵ�7�Q����7>���/t + + + + +�$ +����
�� +W +��?��ٸ��G�>��Y����& +@�I> +�qR�����J�J��pi��/�&���6 �\6ꗙ�%�+��?_�NEk�+�9�������kN4a�#2T g�!> +�{� +@�\A��QG� `���Β���>~�dz���H;s��E��zMFG@�o�
�ӧ�?�+�g̡�x���K�g��3��|(�<���V +@�D{i~Q�?9@k9��g����} +���>D +@��� +gF)�П� +�9 +�{�ZM�|`�@�����^�����H�?���X +@Dm��� +���@�R�p70̶� +(2` +`���ֆ,���0/ +�Q�̴�P-�Vw,P<� + +��^��:���C�|K�NL�������ށ�K��4@�=)Ց�} +@TxO�/��̸/`Y�e���� +��o֫,/?&R�V�+�%n +`�P����y�� +�+�V�J%5�(�0` +�?�����ޠ;�g��Þ��9~��F�4����C�G3�G�� +��`T�?� +�����'( +��p+�}> + +�n;��o�q�J8������[��.6� + +X� +�( +�>���&�{} ����:�8�������T +@���vΥX!�.,� +��� +� +-��f��@�4�L¿���]�y�!�@/@"z
�f������s+A�gf����d�˕���p�s��B~� +@iMf���HM�r�#R�o#e*aM� +�+�s�� o�s0F�J�%�����7�^�+��4�5�ާ +���OyN*6 <ͪF��:��\����4FO��?�r�ڿ]�A����?\����ٳ_~xvC� + �� +�8� +� +�Z��) +? +��> +sI�Gi.�Oat�)��\�* +���������x +�BP +��o�S�o�/o�6Q�1��}q����/��+ �>s��Xz �%! � +�R[&h�� +�� +��H�2E��-��с��'�� +`c�%� +�S�����O�r�0�m* +@��Ia�����1h�TF�MA� +�J���L� +�;0 +����m; +����4����@ +,�ߒ�AY���� + +��)�j��7��]R�<�2ꃓ++$v��?mc��%�3��xF�L��}ͤ+�?�9���l���- +D7�;}Z]\�5���x��YMW��;��[Z���������)� +LF0�k�a���� +����keybNX��( +��䌶jY�t>��BC(vZe�Y��� +�s@��ߏ�3g.]�� +��ШR +�D{�BZ�;Bi�ނݶ���"Zc( +��@���ٳ3zbhD[WkA +��P +'c��Du&NS�P�� +U +���4����#h�s����`��/-eY��c� +p�Ѧ=�O@ +��l�D��Ы-v�P +�mt�N���[�g��Q���i{��-�O�njǎ������~oQDa�;ԭ���l" +�6>2V9 +x@�|+�X7埐"���އ��?��{ζ� +�� + +��i�1N��P�R
J��<�W� +�A����:���lDl���p��"��@{~���9��O��mU�ٛ��]��!8�c���y��^3�`x]�A��d�ߟc+~x:���5BS����@gɻ����@�"JZ���$��M(P���J��;�����Ǻ��v! +�]�|�+zJm�S0�E=� ����F4� +��k��������t�$��o ��������a�.۞�B�J~*�k�����0f�<��C�wڭ(@r +8���tH\ ^蟓)�fS
@?�7�N//&c��~)~�
��fZ7� +�ȯ�r�%���wȑ�"�G��~p���ߑv��'���� �uz�_������/_�r��W� +~ +�uޝő�'�7������_�5�w���/���7�� ��� +�r�� ��v� +�y�?�C_���Ze��T��(����ϋ�[<q +����y�d� +@I��( + +��c��"����0ᯝh��\��Ҟ���} +X�c���\! +����w��8@�%Jj��?U +�ne +@���iU������ +Ju/\Ft?�T�t*�+�j=@h�S�����tsm��[��@�G��iOw�:�
J�-tU��[���Z��9p$=��(t�0�����P��_�������v;C�>dz��-> +�),�b�L8ےĊ�} +�� +Ӣ_ �o��惙������%�]���gQ�۟~��,��^b��|�e�7�m~Dz2[� +@!�=z��>���p�voH넶]�B�D +��܌h���m��*}�W(�� ��t��];��w��@��^�ǻ�)��Ŝa���틁�?� +�e^�lb
+��� �[h +7@��@�V�- Y��?@"�Z��$ gVV +����~pV�^ +��5��j{��WЯ����^wV�v]w����y�Y�������� + +/� ����&?sniE;�,���n�?�: +�(�� +�� +�٧G6�T
���,Bc����@��ՓC�����s(5�%a�[~�' +��B�O\�dz���._���\�v�ʧ��|4�_�r�����-~�e<�=ޫZ<�W�{���P�$c8�0��T���
ݕ�� �Q> +��- + +����� +E~w��m +�� + +���O5�B(EN:���g��&ڇS��8��W�\����k�J�^l@����� \�?���ix��Oo<�(��CU +g�R�sv@ ��矵�R{㫍r��k/�RQ����< ����:�b�����.���C��5x�Q~��D���zDA�$m�yqK���=���~%�I3DN���2��C���B�" +��͑���eB"!�ry +G��> +� +���Ueg��m����vj�E9օ��tӿ���C� Xk��R��N����_��~�&��˴K{؋��������٣���ȋ
D�N*�C +�3�'u��� vf�N����i�YG� +#�iq*�@�@/������g�4*�W��� +�B��I�)�� �i֗Շq_Pvr�t��-g�#Ș)|"�,� +x�O�����d̼�/�QE���ִz���R +���G[����?�k@4�l�G���Z4��r��B���^�x��Ջ�/y����W�_����Wi�O�H���o�׀���)�Y1��d?�W�Ts+S� +� ��@��� +��3�U\��g����5����@�U +�kk���tX��t��n�����È�蔔���@��ɥ����T�k, +��8T��PI<�ǜ� H<pu��Y���9֕�DiD +��� +� @� +$=���Z��R�B�Ǒ��_S��Fr��Y:r@��(�-�K���"��`\zYs�-:P��qd@#�0�k�0�k�E��?���_�_g�F��� +�> +�������oCC��q#�+��T +@����CY=�b��0t�z{�v?� DA�ua�}S���k]�����������@x�i�
�O�NLT�P���� +���El ��k +��ބ�-9@�����6�� +�MGq%�H#c�C���V +�*� ��O̟8qvf�%����|���]r�r����1�U�?�+ +��ޜ�c�tO��G��)��� �����0�y]1#Y�L��� + �` +m1[`:�e��H�/����_$��K���t���\y�L��W�_�~�J�����f�GH�YrHS�Z�T�o��)��4 ��!�e��z�XV���a> +����� + +�k���BbI9�#�"d!6'�??͠��+�l�S�&\IV"
p����� r}���� +@2�� +�:~*�#�i]$�ӳ� 8�Y`�%�?�MLe������G�z��j}���ŊI> +�%bFD;�� +`Ā�$���]�
�D��P��%��Ã��js�`�5 + +��T^k/'�s���ѽo~���_C�O��Om��M�T�U�� �hQA���_��=��ݶ�t�ve`��j����"]hٷIw�����~���Pg� +�m������%�cd���̽6���eI ���
�x08� +�H+ + + + ���� +��R ���jb������핕wX�T,�UH��s*�+��� +˽�seEc�Q5����� +w�GA0���)+��CXrs ��;�>�+���cL����/Y��_���� +�~ +(�6'h��t���h���I�i��L��b�Hsh� �����@a��\�A� +�����Z��7� �}2ʱ ����u�?����܇�2ǂ'�"kbT��V�nЫ�����lw�����/P��� +�qWe� +`�q\���n�b�?�_0���ցu +=�)(+� +���x�� +P( +6�# +@���W'I +�� +g���ATى�NW;��j�V + [,\�[���2U-�n�{ +�����P[�a�o{���%�����~�P�5rT�sk,� +��U� S)C�X)/���K\!Oa�C�~�2�3@��>Р +�@Z`nQ��0�|� +� + +�� +�ŷ + + + +���VV��� +=Q��F���� cv�
0C)��l�Wh�Ϟ8��� +�b
��`�������Gџ@e�~K� +��Dc��9�F�� ����!�Y��&��D�����"5 +�O�`B��A +���~ʼ*�s�����c-�s|07K�8��_l��� +��j�F�Yd��`W,��g�f� �+;uv�J���x�������k��@ӆ���ޭ>�
�
��k����Ha�) +�HhGn +@�;������-���B�_���~������<�^��=�- +s +��j� �|
��HZAػ~ ~�U�r�ƙ8
+�2\�6t�$�}_����|��3��/A��� + +��W� +��x
0�O����ܬ�E���A +�j�B�N8-X����]��(�� + +Ġ� +pw�.�����P +�ìS8 +@a�%�F��}�V8�_CB� +`Wm� + + + +�P�P�/La��U%������%�����>8��;��� +@'��
>����Ϟ>���Ϟ� ��p�����p�ZO��d���F +��M�ް�ͯ�B�FC��|n��`�t��"�A� +" +�_[k((U9��uO'�Ti�R��'p��u��tm�u@|$��,�! +�� +@�����/�/�z�1?� +�<@^������]����b���N����/̡Ř���gn�8�*k0�?B�g� +�A(Z���)2r���UCY��h�Q�ϭ�� +�o* +*�ӣ��� +��AwH�_���ޣ���g]��k��"vlS'��Zg���B┭�>���l���Uz˾�vG��E�fܙ���C��O+�=)$���X������h&�70
�WZ�&�� +@� +��߸~풩_�o����ͭ�7�k<hq3�gş�aƿj(�
9*�Z�d����{D�0P%�鈻wiYO5�Rk䫀|8�~��&� +���" +@T?
�xr`�� �R~0Ԭ�ʎ2C!�����T�;�L� +JASʽ�ڼJ�G;¼�������}C{��ZK�qC��@�y6>~��V�����L�V +-Q��|I +@� + + �s�?z�f�x.���� +����"�@U`7�Y[�)��v���I[nR8��O�r@!=q�Ԕk�. +��T'���� +�`*�w��= +�ڮ�� Vd��w@�~��z�Y���n���0X��מؿ�n�S��p�:1 +� ����`Ju@�vKE�vk��d0��
��[@���7(09Yk��*���t&�h��K 5�]E�1�y���'�@����i���[������98pZ=�@��]��-������)`��*��ΐÏ�2u�����}+ +�'�M�P*k,�Ug�MG���)~�tZ8/�ĩ�?�����������\�q����O�_�D��V�7�4���⫊�n������BG +�;�i����]ثI +6�:Xl���bQ���@ �Ss|� +���7$/�irr+ +�ޫ�:�U;W�Oc����s�=PP��t�ꗯ9mr%@��U�me�b�@8�� +`? +����Qe�^�!Ge>�Vk0 +%� 5��Er��/ + +�����K���o����T|�!��Ha���n��ߺ)�C��{���
4v��_��kPZ<B�yh�h���5����N�C�?z:�u"+\��A�==eO�:���և�P����U�' 57'��
�����}"c��<%����K��:7g�d��3�:҈Bv�lk��y�k�/y�.���w����R +Jy�� +@�ϩ��L�h)�2�M� +@k~���*�p����2�9�Cg��l��]�����oW +�U,�T��x��a{�� +�1��Ț +�̹�8�g����iT�) +��
ڠ(ԁG�wu>| -� ==� +�hw$v��~���f-|�[$ �脂���Y��p�@q��)Ag�E�yJ��ǫs��nQ��_Y�k�]��_��Xy��7~un����W� +�"̇��Oc��?��m����?ō��p���F:���i�߾� �w+ +���`r/ʙ0�D + + +�qkk�2m�:naϮ*mk
��OLh�74d��宻�u����Z��ګ�s�����9�,�� +��u����P�B�A�ggp������-�x�L=��"��������|}�Z��l<����QM���&���ٵ ���g��Qzm��,���x] +�N��].�����m�(��l�\�n��^G�o���jX���/'@��8��X�
�����<��gx +�QJ�������v�O$ەl;0�l�%���eo����](��Z�5^����4�^ޠ�\z +Z��vp�`ƿs�辊�d��G����V^b���{M�����^ϿO���~p�,`�e�K�E��Ksyr�w�����0e�c횴��j�Y1 +t1 +�C?��1|���� +%.�(x�AtK@��h�_��c�����8��g�]�El]�� +�%�o�C��[(]= +��a +'�(�T +i��[ڢ�# �j��;B�;��^?���ٷ��s����v�= +��~ky-��m�)B��< +(��\ +B^>�>���Y�����ۿ��7{7���(8��8�@ +H +K�����k9�)�n���& +�� +*^���_�W��^��� +���α.�A��Z<� +*������mv�V%��UJ܍�0,d�X +0ؽ��,�FGn<��$;Q��a�oN$᰿"�
?�lM3!�d>w�Oo/�1�&^��鄛rx� z8"�Ut�6�j>��):� �rɅ= +���G÷^ +��k�p}v�T��K����c��6 +u +cҏ�s����uC����9�{������>�_�o����&���Ox +T��k��$F�J+5H;�<B�2�< +������< +0��@L[��0�mU$�S��E�3�8�-�9�`�!6nl��y����ںq#�! +Xt![��@�E��< �9��IW��J57��x%��P���l���[神%��d?���4��Ɲ� +_����p&[ +<����� �����m~��'�?~��?�i��j��[㢞Fe�@���ƆW|2 +����tc��J���y +�Y��J��tOz +�#�o�v����`wk�CH��t��!I���A�����B�P<�ܹ�����t``| +0�}9��IX��)�:Z�{�l
�X>ĥ�F��r +G��|F�A:p�$�8��ZpNh�:�|��Q�`8������g�����i;��`��K6
v��֕�^58��v���&�@[��fw
Cz>�K��ր�C���L�L~{�]����e��t�����K@�ɕ���N����#��Kz��^���9&����{��?�F���éW+�0��xh��^�1�N�|��ɜ����4�m�]�[B���3P�{�F��4�1 +�q�V8g� +��< +�������r1v������;��P#0�5Ma5�=�x�A�d��\�������~���^���bE�F�ce��:d^�۠'ɱcy�Ec�v��?L|��0�)& f_���&��k:�� +��{c���U��-���H���H�5�["���JI� + ��r��j*�� +P +�w��N@.손�|�L�V#Q��<N<p5T�>��'����@�.X�ر��N��S���?�\�d�3�� +���ݐ�!�)U Ii9�j��MP�qq�#�_�k��$gɕ�}�+��J<�[u@�uǚ�y�mm���4{FG!i���)�#ؠ +01zl� +>�@>Z�m*q��|�5�*��e�b+��_��q����I6Jl�T�>G[[7E~$�$ +(���;Ȅ�P�z�Q��ZBI�R�`\d������Ab��F �$�ɂ���! +@�n�e��F�ؐDž����T�:4ֿ�z +�]�, +�F��P�,�����7��^s��`�H)�+[} +'��� b2�G)~R��̃�X��㣽�8(\�R�2m#Zɭ +��s�҆e=8z��R��*��y�>��9�����Bݭe�H��>�{xJַr������,�]�������� +���~�T]Z�) + +��Xo +� xq��D +��(l�{2��@�Ζ���d1]�ӡ�w������U~6�2<�{� +p+�g +�ۜ��,�����A{��acjĚx,I�_���}�e�ŗ�^������ +� �Pt�#����a��c�ha��Fu��F?������t���H���0�*�00��33��qO�����P�����q�"�pe8�8�},2G�m�vT![���C���b6���Kћ�`�����o`�Ԯ��X��1�{b�f�*gO`��#8ԫA��2���[ JT���
������W�!���`������\{����S�N��?+��|0'�����rM�I��G�tm�}�D5�� �܀$�:���Qu+��~��<<M���X�vd�K�ۮy���l���p�m.���hNZ����N'��(���c���կe�� +����Q�j|��nYJ��@��V�0���.�j;$�T��
��">�<�u�����hG_���/Opu���l/1*���2�'�5' 3��z��NȓO�=�����������
������ z��J�H�s�l�R�L�B���������Y��k�V +u�2�����b +�/0�U�W�~�$c� ��?@܍ `:���Ȳ i��ID�Dz}��Ή�D + +`%;7�ڀ�b +��AW�i��`i���P�\�KW`�5t�a;��-���[�38� +(YA�dkG`�vMЃo������u�?c����y�&��'�͛�-c +� @ +_m�Zo����w��ĔQ��O������&���+�R��qk�
��9 +1�Yy�P�H����8�m�@��e��J(Š��y���C���n������\��D��4��TZ��Ij!L�?�د�qEl���5?Eͼ��Y쒹�>f�B6I��$���$ȩ�$2��D���P��b��m��g6�Ky�M +`��7��!� +`�|K���S�V��С�x��訁�i�s�=Ij�~mH�F�m�]��q��~ +@��r"�wU����2��a�����KƦ:�:,̀b����\��v�F��k���0a�^be�5%�̵��0��k�HBޖ���c�Զ��M��|�=�%䕂3���{��5r������lt�Nq��
� �����P���4�*�v�%% ��Ǻ �����d��W�\����W�F�iW�a��3��LlJ�� +�|���$�8S���� �2�O���9�"ˍ����ܚH)%��n��d��N�ڞc�H-`�c�:x`�yi���Đ��Ĺ�NFA�P�] +�h��r�+�]��ە%%��������R^+�Fe�$?�9��x +�������w���MM�|��q�4�S����7�pR;xL%R?���.�3��mH��h�֤��-����Yu� +�G +�a +pX@��z��n�-�i�Di�Q4�y +�Ӝ& +?g��ysѡ-6 +&Z4�}< +߯p��k�x�_8�?�п/����Gc�(@Hi�u�|U�����~U!������E�| +@�G`'�x���護�v]J� +�����V�;W턿t��l +�EI�dI�N$Hdiz��wmZɆ]�d�
���g����s����N<K��}q>'1�"H���
��KDR~�y]�����ډ+U�m�e� `7��O��#M�*����o� = +P�I6= +�g��#W���8�����14y/T_S�E�u@���tܑ +P�'ƅq�k�c��������M�uL1k"�R��ޞM��Ԇo�Q�#!�Nڱ7�Ok�0�ѡ�Ѽ�T�$�����������-0�W�� +z����N�����������J��@* +� +�4�3�O� +b%*� +[Db�T��) +f�6h�Ϝ�pg���kޚ�� +�$;�BLB +�t���@.Aי�n1���sR�9G?��զm�o���+�W�\�C���Do|M,J��q\�[�AF-��-&�
b�;�|:���̵����,��`�k$�?��jo������j��+eß/���1jǮڦ�(�oJ��.�����X�������"�%�M�>4Di�N�*��f����mwB�������%%P�p�_I
�F�}�U�v��Ձ�>��Q�j�
�Q�y���� +��]�)��`�\��6�qDn.ٺc�o���6�ֽ����Y������Iy�Dh��3%H���Eϲ!��վ��/�mh +5��Zr�'=����C���t�%�ȴ�"�5�&�w�fW�[ +�'� ?:��p����ł,� + �f�� +����(s��,�%������#9Yz +�� +m)�qA�������;�]$ +M���M�`�o
���cFj��&0� +���T�8Q#.������$���%�������筼�J��~���o���� + +� yv��@>�Dw
�7H�B[,�!G;g0��g�@����m )�8���\��G�����,F"^�W.�s�����n���A������b���(��ޟc�������f�u +P����C��@�{m9��#��!%/�������Єj���Ȑ%�$��Q +�y��( +h +p: +��k�t'E�u� +���Ib +�7��SN������H< +ԍ���d�H@�̢r��$)Nl�M��G6�0z�k���1��C��3��� ��}�e�_~I���!�0���yE0�������;pY�d�5� +����jO ׇ��h���}\&�l���lc����]�q�Ԡ?$���v���}�����.���x��\sO��1��I\Ɲ����;iK��$�v��2��� +m��7j�����`T������5� @�ݪ[�V��;�?�}Pz��8�?��'�Τ +��_)�< +���:����Q�?�@�3�A��0�
���#��� +$�U�� +`o��V�����,�� +�U���QrN +G�^�*��~i�����r�J�y +�^ +�ӛC��d +�+� +�%��V"�(�MiM +��sÞ� +x�M ����|���˯H�z��&�zB O�`/�������������� +�6mJ��h�� +"p�Sq�=r=�7�d�6�����s���M +���:���V7�c�Gcmcsj�u�i���}��������_/�Fa�
z�y����:l���[^���&fT���}�SX�O�
�,�k�� 1��g���8Hi�g%��-@��
�� +��pg2q�����&�䊸%�r7�,�߂�P�o�_����89�kEx,��� +���sl��� ��}���}���� +����I�Hd��0�Ƒ�O�t���r��Q"�&������v��+���3�I��UH�PL��N��C�2{㞽���ȁ��dY����a����BR����v[�=�(N�����;7�DO7BeEN�����_�/��� �����>H^|�k��
��]�� +����[<�m�=|��u@���4�� + ��f�<+` +5�1��@ +P� + jMcY���jps:�E����5a��<1�1pE��?���9���V��3�=� ���z�A ��$[����#��߀<~����J�4��v���ctQ~�Sr-����Ms]j,�^a + @8�d< +�������~����@�; +�N�ogp�z�D|�E�@�@�`���� +u��"����h�O)y�Hc:3%у/6���Ϧ�⏢�ʔ5NL�P4�e)YxK��/���1��\ +�������Xwd,�&�
����i���P� +�Y:02�tZ] �/�� +Ē�c�����O��M@�0�FA�N�<&�+�%7�3�2�G�Qx�]2���L�]�e*�����������P��@�Ѹ2o^A��$��ѓ���ýS�dC=n��/nfiQ0Lz��}Jc{wpx��^�iI��M V
�[x�`���^M�ɵؑL�)ë��1��p��Ԓf� +�A"�#r��K�3�&��5�s.����G���q�q�.�\"c��%^�e�q�P +�&۸�! +��@1M
J����fѮ�X��8���jw��C������0�ջ*�U��,c��D_�vJ��~-/F羚]�j S#�::E����vo@�V�dn�Il�1Q��rv��M�Cgl"5.%�;Vd�! +�F����uYz +��Ur���?�_� +��A啦�ץ����ϯ}��7�]c���;x� �V��Iv��8 +F7< +����< +~���\y +���P��X�G���Z2���8��|�y + +�Ox +s��RT&0��v���)2.m��e�:����@�M�M�ƈh���!��CgaC��"���D�)y��q��Ȗ��Г��ؙ���F��c6%׃錼�b���i��$tΞu��v:C�� +���� +������6�� +)v�&M�?� _�ѧ�Z`d��}�)����z[=�L����d����)���V7Oڲ�Q��{1��3�Z|=u����m
\����zhL)IU +��� j�O)�b +��1x'�N2��H��+��< +C���3�ҡ+y:�#�{ + ����� +��(:���>mh�9J��5l^��~�o2(m�=�%�I*J>L +4��6����D ?������o��6L'ЮH-K`"��tC��u��}G�����֜/���P�0���wQ�G� +���ꀻ�!��%�V^�V�\�:�=�
��6�Ӓ@�Q\@8DG���@`-�oOPk�BH���F +�ɐz;ܣy���'cH�T7 ��?�h��`.��_gG���g�7�ۯ} +��Z.X��{�F�+q{7%���~۽�tΎ�B��%�¤��T��~u+��,d�d[�57ힹ�Քk�d�K�_A��������k;��"U�N��z���?�@.��]��< +�?�Ą��a������������� ���� +l`%� ���6�Qb
�?'< +��!������~g�<A��=�����)�" +���o��;;�cp�q +���n\�R�QnM�!���=�� +��;������n�٥DM�vz�pB?9?�����]���!��u� +��� +�� +$M + ��C�@�^��pcK4�l}k`b5�M��@C�mI{�(R� +s=�C +�" +@�\�;@�~�Q�������qo�"�gj�sc +�^����}�|���_��
���ݑ����;���?��/� ���U�����_�[������ߦ���& +P��������t8�|9�g�_.x�Qca�XA}����F>�N`Fo4�H.P"QxF�� ?U� y��٦>� +�b{�x��}�עQetj�~kw�N֥W��5���j`�PQ���d`Nǚ\�k��\>�y/�K�2`*�ګ��(3�l��oM�قs��R��,���i�_K3�3����XA�?�Y���^ +�̦���`4�V�"������'��Ə��?��� +�dZE}I���,���ѐ��?�$D�x��/|�< +��M|ڋd�S䤤�$+&eU
8?�SO}���Ӆ(d��&�$���!r�Q +�Bhޏ�BW�&-\AĖ�TR�0���QAM�
ٚA3����*;ϲD�
P�]���љNf�/�5��ģ�2e6ö�i���g�@��8��0 +���-RsS�A�$"�n��xޖ:�zTAցH*�&T��+e\ +�/�%�(j4��P�ׅ�Y +)S{���7��" r�zx���a�yk��_���H2���-v�Kβ�?�J�y��`����H�}����������9�䧠�MB��0����;��| +����N�r��U����q�ߛW�� + +R*��9���;
ݶ�����`pgПP���������� +� #�Ȣ�~�DvA�-�R��Č��u��e.-X!)��zWsE�#K<�������4�[
���A3:)qDZ��'�v�[�\ +��o5�1�N���!җ���?�r�����
��� +n�%�)��M�<��JpR�O҂p(M�m�r�B���t$�~�\�(g��_�WRsk'�p&����A�G� �P�3n�y +��&R"g�(%jUȟ����j 39�0�s8�R����+� +<n1���!Q����G��h��9R;U[>|G4�LT�� +��d�6hk�2�W[KU�1�����A�R�g2 + D�,Ѿ�H9t̑�A�^�r��U��a���[�x�<�>��8}��R�u8!xD�P��p�����bZ��&������w����&#A,�'#�ô4�"uG�|�=W�H�6��Լ"��Զz�@l�� +�>!���=�()��)��ЖD���Q|�h��i�ݦhW��A�,�$l�S[��F� +��Q�o]l��Vfg! + !(��TYʼ�2^�˿ 'i�r?j�Z +��A'�JM2,?P���k +p�X +��Toϴ +�'6iK�4������%�ȑn� +$�K�b o>�qK�`��[.�6F��0|I��L���{r&ȋԚ�=�}����l.%�l*�R�ť�K�A�]���� �� +�/ ~�%�C
��- +K�_| +��Q��W�<ۦ�IU�.��R�r�J����╧_N +�����SgMAVRoAY +^F�z!���
S��5
@5i�]��H�Mk��#��f)v���h4]����%�C�F�� +<��dP�L@<�.f��E*��� �,�����f��b�0U�t@H� +����|�����: +�^�(/����%@#�=�����=��� +Y�R ^�: +��I1;D��w�\�k�n�M��_���� +����_)?+"��IA���l�t?5pw�'(�����z}k�B+�ذ�(�:�W��^- +�/��)C + + ���m @�(��h��z�4��~�� +�������D?�,� +� +�L@���Ȋ
���t�Ny�l1��%ٽ�p�Թ�w��|�lt9�M*�,m�M^"|c�}h +����V$�BQ9�H;��D���y�aBmOD��F&��Ǎ�Pډ�"q�����ZE��A�`vx�S% Ay�N�G�*Q|ץq�B���|t�ב'#7��P�ޭT��U��s���� �\�����|��c��m�r>�+��k� ��o��,� ���^�z�, +��SY +C���!�� +�iO����Z�E@�Q���"l�Y_�Q����Ĺ��,�Ge�;r���:D+����X���?���J�θ�lq��2� +@��:7���&��~�~��_- +���)�Z�� +Wq-��F��J�}F4]���;�Ө��{���ʖ�ۺ��q� +R����P�)�a������J��Q*�1x+"��c��2��� �x�rNd�����q'(%p%Kbr�'�=��.q4��$7�x�mk(�^�t�?z���Sy�ҠA�
gc�A�P9()��p�C�9F9�}�9�f6�g����Q)7rOZ�M;��A���e��+4_���N0v�7�`�v�� �y-6��ٹ�� +8r̓s��s���㽍V����07\�8��P +�/,;�P^勃��`~m���v|���%O +�k�pr]� +g����3d�SI$��+!��*ζ�(4�<��iC/Gc4�r��!���c�g�|>@P`h +�q2;x�tZl��N����J<�z�Y�=���R E��[email protected]�����ۉf���Doj���G����&F��r��t�D�5�yֶ��RC�8L�Ay�; +:9XU�4\>�4���%I�h+�
�z:��N����8q�Ƀܛ�-�g��0�o)��]6�-������%<+Z��F�6��4m� +��b�F� =��Sj��4���k �\B��T����H �u���A%Z�������9�@�V�y�gݳ�e��!@����z`eدYړ�h�3��O�y�'�[��*���d֞
�0���Ѹ�$�B�{8��L��k�HiQݵ'��@�u-+(Q{��8�wFO�rr���`W8����"!� +% +�ԋQ�Nr���ca7�&C�?`jf.����{��E�i#A{ @o�mo6��A� �T��HN�mvg<�k��_�v4m� +��eC����Cm��G���=j4�B'���Bl�5xK +�^y���c� +���ZB(�An��R!�5h����;�lX�<t�v1�P�H���MڠF�R$�>��f�a+f
ҫ����tv�;�!���x��?��p?Hw�ē�AA�Z�S^��V�4xCKB��[���םo��h��8�l����Ő�7z]�������� H�@������s��_����+0��Yx�@i�WC��> +����H +�ϋ��~���Rs�J��i!�^l��Z�X �On�����$m8݁ +/�0��hݞ�UjIe��� +��iG�@���X�K��g�& +p +�/��HP��m.����l�D/ +�����`��`kp�&0����d��� ���W��\�h +XjXV����cC�!�=�]z;��R��D��j����0u$ +�<b&j�9���ڣ��ek1'{4rp��|��X" + +6��B' +��S�;�����C�v '̒�7e� +��<&��( +Hy����x/F���(�P=�V�&)'�A�[�U� H3���r��g�i�ў�c�h66���e���%R��&��hB +(��DnO�n�����x,@.J�t�9�i���k�Q�:)O�ڠ��/�PO-X���<��+�j"��?�A�<���-ϴN��.�$;��(q%�S&EbA� -*��L�X@�gQ +�?j���Hfξ��d+�n�3&)3*z{4���h�&�⫒�1����MvIG�6U�Q +yLxy���� W�^u���s +�W�_�f�<� +��'���Z�8VHB�| +����?�< +`�izh���z�tg7P��pֆ��_��[7�eႺ����䋄r?Z,����b� 5Mi�2ԅ���'3 }2Sp]�"5"�F[�Rw�?T#��6�% + +2섁� 7� ���.��5q1��=-��Gz��@
�#�)x��t�sRC�M��@���úl����^�I(�_�b�9�첨@W��K����2f79P�`(��9�&�#����Pw#���;���F�5o�8N3u���:Ҳ�~$�~��U�G��P���LV�#}L4?Ij87��Q��@�CjYr�^#���#m�M���xn�*��X�G�� �t4tŔ� +4�� +`����� +�k�G��Jg������.6>�B�ϮԽ��ڂ�8�����v�^�r�P2�� :i�%�9u:q�)ZEp�)��P�_�����k�.ݟ|;@�>8�};=Pj�t�4����d��pq� 2˦�UKft�Nz&֑;�_�Pc�R�m8w�m�=��tl�
�I�����>g�]��Vӵ�G�Un��lA{��`��>�C��(�b����� t�����y}�ڙ��U#��m��EG�遮��xX��d4�"�LB��i�e=V[�Ɋ"���䙗�pl��A3����T�ώ2Yk��������A�C�����V"��i٠W��;��F��<@FF�[�����H�8$�:5�*�X�2چVnS�hf(�<� +@��1!�@>������1�P��C +FM.��I�y,BWJ^2gN�%� Bf -�@ޑ;��=Z����sOf�RX�럲C�?�pV�,�%��s���u +�߶��M�_��;��ڧ�� +h��! +!Y�2��5�,=�Y.����:�� +�:(.R?,����Tn'Ȣ�����c�_@9P}����D �����sٱ�f Fln9�ܒ���E�t�8�r�(n�)�}Z'���Nz#
-�C��#����Z��^�f��Ҕ�(Փo�
��j� +XX +h�k�Y��� +�ݞrF�I +`�I! +M�B����$���JX(���A`��m� +X� +P?>j������ +�[�� +�a��Q��v��D�A�����M���< +�g�Ma^�I�%kMK���5�"�)�{�z�Z�to�:�p& +��G��@�� +��\����N��z7!�~�YX
���N,�{��S�k�Y��z�"�����?1��4�'UVs�pܫ�� +'� +�ID��������,�v';��v�p��$�`��t@���Ap��U� +�WBf +�A6v�,��-�W�":�MI[D o��8�f%�@A7@�%�]�{ +��s�%��]�/N��{?��&Ӌ�=��lG���JF �c�*W�Í��%OMO�2�_g�P�w�Z +��2,[ +�i��> +��p�����`P5�[��G��C�=G(9�� +`��8���5�[, +��}8�I�pȡhV^�D��ϓ(vn����*i2p�p�3�-�$A�r ��HH�g��CF������Q�E� +��`���� ���FP����T)�W�י +�" +���� +@��, +�*�Bu�ֈj~�Y�+,+(rR�w�� +��K(]g +�����[���|l +������(�q����Q +!��p��:�n�OtVPk�����`�P���s���*�b_�](��PKB���
K$�mU�-A�M7��FB��:塼�el�2ԏ~��k7�4f+Gd?��}�%Q�|�!��DYP�I٦�v�.�]8c/��S�����>���qC�����4BV�m����J��
JO������@�P +��ǝ<�$�r� +J��w�L� �k�� + ��?���b0Tm�RX� + +�z�d� <��$����N���#�)"��;&�4��Ѹ
N�*���j"�E�kx��W����gH`L�6�f
1Yބk�D$�AVҕ"���NiA6%��=q[ + +o�!�1��NC�#��z�����. +��������՚� +�>��x��`����A�y ��;SB� +�ȹr�(��U��@�x�Q +�\@���#3p�y +��P��ʫ�y͋���l:�Y�F">���������O9�����Vb'�b�3DO{�Ձ[L�J��fB���t0�r
��-�!��=�EH���]��*e6��(��PO�%���vؽ +E7�����0���@{��i-}otZ�z�A� �T6��* + +H� +7S+��b:��X"�Kh��x'}����y�6�����$]x/Em=�H��܅-��g�m���$e�4Y�a���O9M�n8�̦�R�H�����l՝��Z�}��MF����)��!����/��B��VRĩ�(U�e�Ǡ���6܉'����W+4
�3�g�aɥKc��zQvP +�?���j���N��H��|P��Kyz�nkЦN�O +���T�w���.�t�ח.��;}]������������8J +?�_ �����v�`C��h�x]��x����F'k��g�@�`@� +FWWm�v�?_�����oO +����. +Gә��p2};��&��I�ui�8tef�����)b�+VK+{�N��g�Dc���4�`B���l�>M����l���;�,` c����PӞ�(@H�66�����,r���T*� +�u�̜w +���N�P-����x��;��n�� ��y +�ٸ��YaΑPt��w��h�\�|���`W�����/> +j��j8��3�r�\���O�I�cn:�"�'+IU�)'IX$ +X��7�- +�ƒ@B������ +@úv��g�W^���Z�X�(�{�ۏ��OTG, +��G +pb�Ov��%<ڴ���� + �4mzr�D +)�XR^ +�ʢ�@�ٔ��|�܍�'��B���;���|����<���~��ڕ����wnf1 +���CU� � 2�|��!x _z��C +"���Fc_��]ŕ^�- +`> + > +�+p�Q +��N@�� +�m�Ѵ +�� +��7���]m�d:(6������*1����W�� �ԛ�P������d� �H��q70U������Z���:̙&J~��S�7� +����|;Z��T +^!ם�[]`Ï�PN����hJ���,� �4K�vC��>-d�� o6ш�Þ����UC
e@��<�h�A�����Mg + �O{VY +N�+��� +��e���t�5G�T������~������-�1r�V��/k��l<�tx�i +i��a� �ϋ��W> +�a���9g +�8�, +�d P:+�婀c8:��Z +��7��-Ny�e- ++�9��n[`��s5�%`Td�e�y +*��g���^! +�������#�!�:�\m� �C� +(�k��!��%�. +��5K�����4
Β@W���4�z����j���`�����ʛ/�I + �hiJ+ +�Kn=���M5ߑ~oQ�e@��L����֯+�8�WÞ3��Gg��^oޙ�*�X՛�U��Q +�-�( +} + + +F�P�� +DeB�6�[���z���Xr<:|�"���
�:�DH�����X�υ��X������[�= f=���˃�e���ߛX�T5��5�m�4
�0�L�O���1D�ň����߾����)���ݾ�d� + "%���V���(�"�4k��+{w(�TKk6aW� +`�'[Y���fw�>I�{��ܬl��a�|P�1i�RP�M��1\8Kղ ?����^��%nr�1���OWF��ר��"M� �!������K�JM�J< +�M��\��i� +��@� +Vz&�'lN +�C +∕li���a5�n�֦�!9b�By��f~� T�Z�Yܛ�p˜�[�C�lu��"p��%2�+���Σ�{�����v�s���G�r���{-F���'�m��\e�-�z�A�ρ�e�MU�����|���Oo����t������/��/��/��;�~�=$��g�=��/k�/ͺ> +�uk��~�X��b.Y� +�Arg T�bH�~�0;,�i�Xα�DJ +fM!oHHh�i�nF]j@�n���Q��Nu0 C��0�0�vR���u��e���n�$8k���d]�k��)���.���O�2�L&}(I.Ħ
IHZs�H�ФѶ� +�`�^�w>uE��wd7�ݼ�����o ����~��?�����w����ӟ�������Y�!���ͽ�H����{>N�[A�j#��7b ��67�b�?���; ���@� +`������,�X$O���ZpWzȎ�%�#h֛������T��Rp +2w��7[����u��9���1C���#rY�43�胶������FO@�@%���vO�z��Zt���QPIL����eg��-a�ORA�����GN���\8� +� 1� +`���U���Q +�� +� H/·�.�/�Wo� +�/_=�, +������Է>> +�� + �ht����\͗0�{����R�� +��
L��fNt�!b@B;�g�I�}�c�}�$a��,��6 +���K̞��_nA��c�u�Gs�I&�Rx�A����q.���?� +�� h��~@a_@�+�jo����PMP����߃��s��/�b��M @�(biݏJ@P�+ +𫟄95p���C�+2^��� +@(��s��Q +��Hնi0^J����4�&�ӺZ +j2�c�<,�0�J+D��1%B������Z���ɉy��z�A�}���n���F���3)��� �_�>�����V�p�o�*��#b�V +Ѓ��o'��DA��� +��C���/CqZ +2u!v�H4
��}@ti@��D���b8u +��@)��\�WP�f�$��0���=1P�f�T��_��V�\�E��֏�*e
eJ�_�[W��u=S��e6�,�:zP��9�m[�C�n�R)1�V!�!lBy�8p�ȣ�hL���Z�Y+�l�,���N�%%2#+�Q#�V�Gd��:��B�v�,������d��C�H8�����(���A��;"&Q-�T�a��b��2S���{ xl���0OWmD� +��@'��@(`�� + �y +�|���N�T�� +�y�NjE�6#�pFK$��yO��>"�:L�����[�����,Aw>�����g����F���X&p�f���O�4t@����n���
B��0Y��' +A���d�du�"(�Q�濜6 +@�җ��+߫����?V$,�?�7� ��D +|�DJ�[x�̩� #��D���ԇ��d'�E�\$Z���~H���5l�g��b���])�l:���L��A5���i��O���[�b�f��&@ ��H�)�G�y�|��~��8q8�YB��~���:��S�P/��W��9��HT +�������~cϿs�_��;����_��]�(��ঌ�Ή��P~��)��r�/T +&�n�ւN�=���t�CL�.ى`�Mu�^��M�v��1��E��U湵y �L ���^d.I��aD�a?9ЛP��@�s�����aJ�H&pMN������]��&E̙���zg�� 2���8@��HVsF�ʠ�����c?h��a�����t�� +����� +��U�D ��� +��?��y +0� +�
�%���@V��/��rH��I`��(syu��/R +�_ �
1D�z���F�?�J�#�r�s��G�4�퐮�2���|�{9D@{�X�x��3�}��������ph�B��^W����� +\�b�CB ����{� + T�~�d���X +XX +(.G- ++��� +I�"�3�9B@8�\�}H4Mb�jj2�&QMR� ~�Q�N�U�j6�o���72ͦ�v��N�?��J��~W1� �zC���$�O���SA=���LNO' +p����xr����@=��/��1��ڼu�:�X�X
���V] +NU> +� +��?N!@*8��]Έ�|���"X��|�wU�� ��^k�����xg�3�m�������� +��m@.����ZIF�F�"1����8>��ȡ&�Z��{ h +�C8M���o��3D�RD�m�{�K#�#(���{JRxIr���fΠ]Gz�y4p��c
GeM%��NmM5����IQ +��o���k߃U��ڈ^���hw�7F���^k��;<�d9l��![p�����#�V������2ڤ�Dv���Z��l�h� +S���j�����Y�c +�{�6D���
�o �aP�}�+(�wt���p�7"� +8����� +���7�GGc�_ +Y��҃l=�m%B�� +bu�P)o�MLjÓ +�����9 ��$kK�b=K8���I� +a +sķuH��
(> +���Вe +R�Z-�y<��]^��@��*
��ɮNO�oM&[�&B�s1ՉoH������b��&Z!�Iǵ��ڑ-�Y!����Rd��q���6K��n�o�����=0U�\ +@�_�u��`>��`8��2 +`@����`� +�B�mQ��T�d'��/@�����Q��N���$�%��F�Q�]�w��$����
����!�NV(!�I�Y�Me鈷��/�z��0u�ZG4�ir�'�����q0t~g��v�aϙpKP��G�f������jH�Z>���HCG_@
����c2U���!)��� ��*i*��Tf46�nS��%u��sej�(GS蓹�\�O��:��0��&���j��0p����L� +����| +��^��!�+��� +� +�WYE8f��_�0E��'ʿ�P��y�- +�����x�cyow�_�9$VA&�<E�^�Aˆ�>[ +`�2Sp-5N�D�Ga79Ijk�q��?���&�=�I�ly&��c�|H&qJ�#k`\oT��|RC�W +�5��D����H4. +�7"�v;��I���� e��#bs��c��~���vO�F�3�2��,2�;��:*����J��jl˲��-ED����q�+�E�b/�����ؒ��/-!_������=cFdd��1v��7"�1��4���x���W�w����}I�I +`�H�4q�
`>�:G��������S�� +L�A�/g�K���|�t�?�% ��р0�.�`���C.�x�q +����_�5~�ȶ��?��-��/��|��'�>��@@���,L�8]��#��J�� +�(oRV{x����+�'�i�x�q +Z�\ݞ�#�1����51%��^l����H؊�d�Dh@P)j�r.%>-7�B�a�i��;�"�&�?w��K=� �R�AZ54��ݧ��ռb$���עP{��3� +��Nΐ�Y���ϗ�����<�����}.�}��ve�*`�����P�����tJ�^O�AM���F��? �����Z +�g±��I��� +��� +B�6k�iԝ�G��
(��wɟ��� +��%;\�zu��+W��a:\Z���KoC +P��.�e^TӞ?��r�4�ț��ӌ���a��O�p��hD=`�Hٌ�I-�id��7���$iLz�QO�{X9��ex�J����t�C����o�����p�F`��(M�MC�g-���� +ٵ +�^
\-M#R���1�PT�)��D���M���U_�lj<���o�
\���N/�ݕɮ\<������uU���9�� ++�]���2Zc�O����}� +�Se��q +�y� +�fʼn
�Ȋ`9��� �Hp)$��`I�.�>�E�)�Aր����x&��M��[���G��% +�DX�C#��!1��r�
J�c��%s1���@֤���2x�j<��z�������U�=&;����.��E�v�XN�} +p�>}��+�_�r��������k���T��~�;�]���;���s�����ߋ�� + +��j�� ��~�p�2�����DOkD��9@ �(MX�4 +/@- +�Z������A�b��v�7��&���={�ǭrl�ovGU��� +��'p�p�۱ +��q�9t.���� +�?�B2"@i�} +�3`��L���^�z��2�?+d�� +�+��� +������q +r5C�%��O�g�1�UϮf/4&i�� �c��)��>T�g���sAΡL4���K�ph����Lѯ�.!���E�ۼ I�f�$ju6���qj�h�E�b��BB%�r�� ���1����Ԡ�8�8�"�48���K���<�*��i�a��/aOO�k�٨�3�,r�,�_������6�j�O� +�&��W�_�1 8,���} +x�@GL{�0�@��l�g�b�/��f$R�;��} +� +T��;7����7�@��U�o�q�mS@���> +�/���#�n�]���p��., ��A�b��� +8H<ru�H���nu꧄y�y9RȐ��V��D:Y��@V���2��*$�������-�;_�u{ V�[b�V�����z�B��,�NN@�� �2�Y�Ulv�ZMj�Vw�]�ß����4t�;� +E +�N6x['�ͲF* + ���Z' F^b +��g�c�wÀ������)�j��l��D��[�T�rF����R� +�X|J��f$�H�0�q> +@~� +k����x)���� +��z�,�2�;lS�Rg +���q��_�s܇��5�.H��l�̭��=y��t���<�h��߰Bv�h(���:P�����r3����#��L?`n��)�"3��o#'�d��'j�S +����,�dK5�2LG�x2�3 +����q�p�~��"�-T~���$Ȃ��m�h�/%�2�Q�x.��Z�<i֛��V����4�L�ͅEB��壹5���T�9q���P��*6�����m!/����a+;�!�&�MT�4����ߥ�N�8�JD��v����b�)�F�����z�^S�� i���j;��[�4��_�6���?�dT�%y̡n[?V���ØS*G(�E�襪i�Z���wVG +lx���/B +�g'���F"I<X�TP��X�'�! +x����(��5X�M����D��U��p�~_�}rNsJ��:ibf��H�X��Vx��a<8��5
y�dG-s���=���� +����˯��[Ge*0�?q"| +b`hlW>+w�4p�MO�<�Xl�7�^�g'��E�@����^]�܂�� +�� +�+y���ͽ6���^�0#��'�����9U�� +���V��������e2�eһ}�#�~yt��� +��z�;pep��
+��������6��}�> +`Ec�a�C�W��R| +�(�4�� +�̖��|9q����k�i�M�P_�kP�y�yvs_j3G��q%��H�4R%��ra�E�2Ƽ\)c���%����?A���H�t� +���8Oֆ�I`��/R�/�充r� +w�k�.,g��hk����hPko����^�9�{�gH4W��'%kvz[MG*�O��Tu��d���E�x�"���©�i�w���0n��9�O/��� +E�*Dm��I�<��-r��!2<��-��{)�azï<��"�D�Q0H�J��uۼܕJ]��k��~M���h��Z &��d��,��Q@���``��g�(sE�V�M�u[�Q��٘P�(sc^����C�Vd���r2��T��r�B�x�҅X +-s�=#����V^�E��Q�o� +( +�����c�����]�Y ���h�$�x@��BtL���,�����q�;;�A1�G��>j�
�D��b `���th˲6b��j*���5�D�5e� K���u���ԠN�L�(�K�~!^ܭ��5�km�"�i9��!|��+bK̡�����E��I +�RS��D����f�X�Qv11bP��xL�8:��V��tЗ�f'�yğ\��9 +�^Zb �7���3����ĵ�;K���
'#�� +�����Ic�� +p�0p��9�tŁ���=Y\,6o2���2��~�E������:m�I� P� }o<j�`�ˇ���_�w0�s�A�$Y@�!�#�<zu[ +����_�����;��`��5 +����mT +bpH���-7[B�/_' +��a;�]�l�.�(g���ާZ{���W +s�-��6�~�6��8� +(�Є���z �z�c�_���"/��;�������¿?����%�/k�O�� +�{9X�J�jY-�c�fw��ѩUZ����B�I�Y@��[��@�|�S�uP��� +��cȰ�A���T�0I���n�\�t.'P���E�꺌Ґ�YL���r�aY ��
�% +���x�z| +�em=$����W�r[+�#����Ʃ��<2�7!oE�l�+�k���7�nŢ�
��Q��\w���X +�����u)��O�/6y�D� +!#����W3� +�k� خ���I�N�Us���-��}oK� �[(��6�vh�� (��|ш����& +ڐ�� +*�Ef�@�qZ�}}eF�Z�+�Z��>�����g�����z�/��a�PX��t�����c�.���,� +�q��M����q��/�� +�AmH�������[�Q��;�w���a�]� +t5��\&#:I�Ld/8�YH=A7દ�vM$�&>e�����H����-xRQ�+@N3T{ +`rc����4cd�(,PI[��<���$�$� +`�v�ΐPs���v�R�Ld������.!%&:I�,SF�*�*�Ox
|!b�>��c������$ZQ���Y���.�_����E�T�L +�`�h��ݽ@Wߖ�R��I� +��c�G�c�$=g�'i!�3��úFmٲ�D����A��s��(|M- +��P1Ϸ��!뚀�v��5l����%=�����n�{ʁ��.�O"$�U�� +��}����c/�����j��Q�hx��1�[.����kk�ʟ�n6h�KiG�~�A��%_U�m1l�6������H�<�n�f�b�Ŋ��F/u{��{/(� �\�hoy'�����:"X��s܊`j
0}�m� +��w*�T +�0 +��u�'&&�*�H�s� +���g�":DE������� - �9�. +ҡ�}��t|�4�� �%���ǀ& D�F}MQ�[�"N��Z��"l��(N��ؓob}���K'����v�- +�p�����P�4� � +�n��|�?T���gkb�#�q{�p4 +�H�T'0�z�UDOP��$�X3{<wP�ˮUr�0V�AED����7��pw
��1_ 8Iz�����$�� {�Ns�E�L�e�<I�f��j��. �����l��W���W��W��+�@��%�����Mh��^ +@��!�,����'+�v��-]�j7{��ϐ��=Zq�
XM�m���/��_�~���VM +#0� +ߤ�؈?P����
�t�u����'�@?�A�>�H�5l/64�#��6��W� +�4IB�!��W���6�v�&�P9L +�5�[���e�$��>ɒOr.���\��h��m�t�ޒ`��iw�F�.��HxuOv�9 �/7���l�_�X�[�Y�y�7fO�������3��G���٣g8�"& +`=R oR����]- +�ޏ#h�4������[�ֶ/�S[�8� +�W�"2��H���'�p� +�\��l� + +ي������Y;7�9 ����9�>
�+��^����R�c���E�,1��� +�!����O, +���
zh�Cۡ� +rJ47�dQ��RH1$����\q�ɖ�v��5���*��&)Ǔ>n$�1 +���Qbm�p��ɕ�հG�5B�ؒ���c��Yl����([�Y��`�b~{�S�zJ3��������NI�Xvs��:�����6o���wN�E{��{�֣�'~i��ƶE)�dH��.��v�^���!�@�O�n���=P6�\��������3@��f��`�+g�\�����2�#}����� @g�����C�דq +�p� ��Dx�SX'.P[ ̠�G�z
ͨ@U� ��.
U�Fǁ�J� +@�/�:���ol(�/�"����,� �����������0� +{��S��"h�
���0��d6�c���W@ƶ�B +����#*�?�$= + /A�QS��'��u��*lG�w���1 �P�$���� +�:z����3�uh�������Ϟ��t`k�����[� +���I$K=IӀs��}�Lja- +���8@��> +t�M���z�ĖB�\҇����c����qH��oRR�c���C=D�!�%gR$��<���dv��zf�}R+T�43 +���z6B�ܾ���(7�`cb��c@� +�
+�!�F�A����T&��aV + + +P����1�#+�z��}DK(䯭����g��0��7>Jn��nz�'Ex�/�ײp� #��&�#��&�.�D�s5�p�ѐ���C�W&Q#)|����h�$�c��N��e����>NT�R���o]�����W�/_���ѷE~��n���O����챹�`yS?���o]|�>��/:��(��'. +<��)(%_�C���o�W�����ۢ��9�b�*�rf��%�LR:b\rվ=h�=E��E0L�1q�������S�
� +�N��O���=Z���\�t���C4�����
�� +B^{m���q��]���,�H!�P�eu������_��W��������� +�Tv��՚P��oT�Wr�AV +�:� +����,���!�S��Ev�D�iY��~��GpfI���U�|�l'� +�c@�z��?����gN��>O+?�WI&<������& +.;�����u�cmkC�~��>U +�?�e +��+���d��3Є +^B0�kǻ�RP����iv�֊�8���%V�6h�o��K �8.1����{�XdAc�������|v�0Nͮ�V~1�a��e�<H�ɳʽ
O�F����O�HKaM�g%.��XZ���S{��U��g2��i p��#�O,�F�Y�.~��ǘ��l���BDZ�f{��
��� G/T�����% +�+�6r�� ��0Ġ6�s@��������Қc6K' +��B��gv��W� ~�4P>�E +�2w����u�؇�����9k)߮�X +g%�����Tv�8]�Z���L3��
���rp�f�k��~w�j�ձ��`���� �Z��.����&�]�Q©p����~p�T��ެي"�gЁd�ЄP� +�WC����iU��6 �u�#~v���� +�V��������/�C���d������oѹ��诔��X +����(>b��� +;��%$�@1Pd�QrW����'��9�w�����ʇ'c� R��J��{��K����mW�ǼN +)��v\���͆%)
�>֬���MF���u܄k0��Dʒ�n5俆���i`/=O�ٰ�扑fa$� [�%hD�k���K�O�2��Q�=�(��k�j$m8��!?���:r B��(j +�":�u���6DPݍ��x�jo�Ђ!A�m��c +p|�9_�~?6����tZz��D�ӿc"ڜ�irX� +0'u�m�F*����>&�2 +��U�-Ypo�r���k1����0 +�3�rjB�º�%9����I����E�R���G-gN�7��K��U��s�=�n +�+s��V������*�����dr�ڝ%�i��A��A��T<��լ�1R�d�x/,Ph�;������ +�Q�9�ֈ� �!��<��N�#"��l 9N�
�J�JHj��@*T�X�J�*|��he�%21��U�j�� +NB.��L�z�������ʂ
��Cʭ~ŗ����
$&�~��Ӡ+ +~5l��a�i�: +6��s�;B�]�Q�;�,�"�N�=SQ�t���Cz��^�T���V��p�~h|�\��<w.`?�����H +�,�ZG���6���w- +C�v��s�_} +�_Z�����_Q�������+���h�Gd +���Wu�@ +P8 +ט����_���S@�yf�S�'Jm� +�T���Q +��8�P�)���\D�W튦Vj���C��Q�Ne��+����[:�d�^�#���mn-֢5���1�[�:�����B!�ܰ��k���w��M�7�Kh)Q���D�&�D����& j�Gzz#��{���:���5���"�$�< 2AP}�R� ċ�TZV���-�nS��B����M$�(Y�������xi>6�-�w��͚4��ӑKUM�D�w�Yx���0k�;6�|�� + +a��X + �P������͝�= +���+�^�s��嫥
�ڇ��7��k)X��������9G>>�L�����*c̮�����t��tQ>��Y����wja��s, +��S��6ਮ2���d�Q�z��{�Ŗ�����m��wG�ϐS�ZY'� +!;�\�ڋCb +����,z�{\I#\ԴFc�I�!�y�^bP*Q�O�M� S� +"�v?Q�xhT��S�� +S�z��[�i��^�RY��-����u���s�ƭ�:8m��+�c����W�����c�Q��J�m��$�7B���_��- +/$8���@@��%4���xk8"-�f���i]�2����#+y����ʌ��KZ���v�� 0�CDL�L*3Ld���V&��G�0�����C +�g��?^��������k�w�������OA, +X&����W���ރ\y������^���� +PQ +\���V�������6�R�E� +$�w�a����LW<���`G�`ϊ���_�,rz7ø�:��!�C�xL*j�L���9� �N�@ȅ"�Z +�y=(Fd������5� �%).���P�� +[gaѶv@Vx����h�C��n����2���!@�Mr�,��:� +�i��ƽ�q�)=-r�B�Px����ͨ!�����6Ջ(��{�|jL���_����\˶
��tq�������f#!=z��ڣ�-k����@ +�����6e�E� @�G+E;]�i����^�06ڃձz}o�w +�67����ͅF�'���N�G[� q�Nm,L�7�)u�0��~n��[C'��4@ڻ�.,Y���zoA�`�4\N�=�F��h��X�N�$�)����9> +k���!����g0�ذ߂ꐵZA ���U�FX�( +��--mO- +ܗ +?�Ђ���u[�����Y��bi��'䅏cOJX�K�7��;��R��#�=��ڥ&!x�(��>y��2�h$k��n�����s�����l�Zٱ>���Ao�cW��;ƖD�L�ذB!��E7qLf�@=jK��\��q+O�,ޤ.�H�=/����m�B����H)LF�i>�>}��k©��H_��T}�b5����o_һ�Rq<=?7z��o��kx��Y���Y�s(��%�0������Y�3��8=@�teb����ހώ +�#�~������~���Ͼ�����ߊ�矧# '9��/��o��
@/��r����������w/W� +�������X +��ܩ' +�|s�-�m_�f�*��i6��@�j(� �)��>@4�L�爁@`���@��;_��r�������bä�ĩE��ڋ�,!���:jȣ9�j��\���4�3{��S���5�
h����Ƣ�4:BU'Z�۰� +�L���%���*S�"�� + K���_ �v{��h��"�������X���EqTk��~8.�3j����J +϶/A��{� +hIc�`D�S�8�З�ˇgg��SI� L������ԯ�]�j�f�D.S���hr +7�<g����e��js-xk�di&��@�e7)���5�L�y������ɽ��'����R��'��"���vǾr΅��qAD�}� +8H�X ++@ߙ}T��|��aR��%�C�RU�:9���X�5�ql&"��L���sz�� GU��AU��-��W�*u}��� �o{�śʾ;5�5����.Tiv! +��_�E<d�&� +(��U�kږ +Ǫ�����G��i�G�)S%�@�@�GD�ߦ�=����,��ROK]�ױ�
���i��ɕ���?���O�A,��+YH�t[�� � �hHB�/�x^�b?�r +�� +P��������� +�����߿��}��� +u*���m�ψ'����08M���~e7@�M��a�\��� +���e�6�F�X
uc`�-ͦҨ$��*��F��0��U�S�ه�k�)���g��@�Fk*f�H�p"�*�?���ɅI���@f4M+��rn�o�!F����D�M��S-[��B�L�� �}��@� +��v3�u��. +.�%p�~�a�H58B���Xj�K�-�vM'@-�i|�F�t��NBP]���t��$��~��S� +��Io�_Nj����M��Q�tgA읆Jou��!�Ǥ�PI$��P��*e"Q)�^j#r��4*� �E�`!��+y5r�$�X +��_g +YƗ��T@r�P���I�@�o{hz�e7Pܵ�,Zx(A��C�}�<�2���zf�&���sN69��@w` Q�T�&�k��:��}@�!�� v8�7�A + x9���������< \ �!+���vY��������^ᖫ ����`�f� +��/��|غ��( +Z$�T-�&�)?l���^��D�fdf;]{O]�=Ф2�1
��.�o��ѵ�N��Q�mڎ�ܹ�4ܚ��6�2\
��ҩʺ�JY�����g�B��w]"*D5�����K���e����6\(@τģb#�wt��<@wh0�}��H�d�(��� + +Ǥ �,P�H�`����F��S�fM���y���Rg=��!fA�kt¤�& +x������n����ĕ�X⓬ܲ, +#"�h�
����c��&��$9������v��>9EAɕo%�(�Rv����ǧi� +� �e�EwG5�}Ǵ%I��[�X���'�c2��u��%��"ɇ�f;�}_ӣ�����}������e� +���3 +'�c�_K'�����������˅ :n��)�� +=��W�g�}��'�� +����W����r���/.���.����'d�Sss��*�8@R����Q���3 <�njP3�� +��� .8��� +P6��uDv- +(�@)U%���Z�J�;X���N���/ƣQ�^ǹ���7��� +���K7|�����ƹB +"����P,6X D[_i�Λ�&Q=��@#WV +�{f�bQ��Y�+� +�E4�ٌ +�0���'�����-�0w +m�T��{��9,[~��H��� +�n�������)�����2��<�@ +���0�+h��?䯼�Z(@|����_�~�ڇ�����L��^PV������3 ����I@� +.�Y_����w/�V� c�����UԸ�UX��R�h/o�8 +&���B��ln�U�V* �5�Z +��B1X�R{�����1];�[ݣ_����*���)�� +�p@�O�*�0�0���� ߬��P�G#�tЗ�W�ָ�����P�S�i�_Y��xu�:�:� +�5��Vo��*S�ݳ�'MTf�uQo�q�W�cG-�`}G*z�I�����XR$ +nܺ}����,�/ +���Zh�ІS+tB��qc��������aW�vk������ؑVP�RtT��q�oԙ�rT��!�i;:_�%��7zߨ;2�u}��������'��؏�n'���m�vWсQU�uW +R ��{_��Nɶ�v�2ش�
��R�ts��x8O����;a��h,����$� �'�rt�"��X��Pn��7�� (�� s�a��
P�W(��9ȍ3x"��� +IX� +�U +��[7'R@�|���������� ���;�\@ +s�|AT!�ۚ��Ōt@�`hΙ+M�[���
0C�&�&��K�$��=d��L5l��|H-�B�t���sT�-�bҶ��u����"I���=��-�^���̓�<#�gB`,���m^0qM=��Wx���?�������A�DV�R�9$G��ULAf7>.�)�K�%N�������n��K�)�� +A��7q��� )
�U�0��� ���XN; +�q@��r�I��?
��A� +)��3�d���t��� +��[,;����U���?f6��/�p'��[�����O +��:��w +\&��hDb �H��8Yu�h�`1q*��#���8E �����D�ݲ�a!O"�����B�䚐Q +�������}�_�?J|��G~x�C��,l��m��˖+�*��!�js�W�h;>��x +<q3�����{�������sL���~�����b�NA���n�P� +��?�)#��l<�4�T����T� +( +6 �T�g^� +6�DXw�^1�F$�� +��|���������$a%|;V��jtG����v��O +�p�������=?�Z�n/@� +@� +��E?�n8�$ք�h[�����ޒ������WNvN���T +ל(��Y�(o%T�!��U�Aeh���� CH�� +�$V�m�x��v\���a�뭮�LÂ��ֺh���ϐUNGV^ �����3�D�*P3�¯��fRl�$]���L����a���u�
W�Oz�\E��
��wZ���Ǐ/ +�?���o~�"�/�~����Г9ҿ���[H� +�*[�4��IB���| ��c%�l=+�A���o�u�6`�~a�j��u�� ���~z7Z��upI�VA�_�t��2�P���F�E�
�_��O�+~��E��xj9��i��x +�/ +�gH��<�=]���_>8R< + �p�o��^��af���k��'3�С���h�t�v�+�_`��q:��7��<����Y��Ç��^��?�s)���(���[p�ԑx�5��ht�\�ä�mq� �H����w7�5�!r57c���zv��-��j �Ft +,��i�ь$$�7����c���8�iƕ]��oy��F�?��f1�aN������E��3�iq���P�F�p,&'Ѝ��^T�#V�M�iw0Q�G�~A��Q��z�4}Ԗi��5�:y��W�.��e�_��
n�#�c�1Qi��N��B
ǚ�Tz.3�W���\J�3d�sX�y T�!��mg�Ѫ¹��,h{��&���� �� 4?St� +QW�>� +�.������Ԇ�j�rG5t֒`"ƴ���:��(��m;-�}W�ʎ����=�6*�'q+Ѩ +�(|u�Օ� +�VXI�/;���|M����'m����p�U +��M��[{{0+5�G} �~�i:� \id܌�X�� ����������BAV����: +9�vR*��{'�q"w�y��/�Ix����N�������v��~�j��!� +��� +@V��=`�N�8Z]�����`���=1�7�@0��ki��В +�f� yb��8/�C$@3�T�^U:#l⩽߳ɬ��(� +�\^����j�Y�+�@ZԹ�ޔ���O�L����TAa�Q���Z��+,SƜ"#���o�E�nC(�G'��ˠwB[��Ҳ)�II�q� +�g-�B] +�;yuQx��I�nJ~�"�ﶴ!~����s���q*u���#{dd��^6�?� � +6rR�}@��7R/���J1�}���}���:`4 +�j���� +Q"2�G�����aX�C�ٰ�����z����?[��T�/�~��4� +1��?Dfװ&�� &+(�P�HH�%>ERڬ(�;)qW��S�/r��b"��At܌�
:�����J��
9w�|�ec)�;���$+;�����)�x����Ƞ> +�?�m �}p�� ����ֿZ�WO�����F���%X����d��]u��._AN�*X� Ŏ��u��vm@g��VMZF�3thy���4��\��?�|��ΔQEY�֨h>)������g
O(��Wj΅]d�9�Մt���/��s�s_�"Vv}\ +}"���a�f�U���<�� +;�و@*6vK�d�u6�F��c�"U�t8.xJijB�#?h[ә��\���@����Ӭx��)��ϟ7�"�W��d�E���?�^�����ͫ��_!�Fxk� �WH�-
ݻ��G* +RS@E��AO�j���j��h#����ص�S��Q�-�ٷ5Sek:��������ӕӬI�,��nյYǗ��2妚̈؉��9���PY(�N�<Q46211(,3����К����FX֭�_�G���s� T�P�/4I�<̩�.�p�!
�m+�/�(y���0T��cu� ��������N����eN������ +`飄�orੳ����������o7@� +��D��/О��d�Q�%F�ȵ�߲̾[��T�?�Q�b�J�#�PgS{{zQ��+�Xa4��0�� +�5���*�j�sM�Uy�g�vi�<5�0WϪ)g�@1pt���kE��Kvޯ�t���^U>�7ؒ�ь�J�J��oǬ�-��� �T9P�&c.�o� ��~V��Ç�B�\tRm�J�;l&��Ѥ�$Ҡ7@0'F��TO>w�r8<��y���Y���*���<���5�Y3�3�&��u�~��ǭҸ**hB�hM�5��h|]��)����_B�����T^f�6rv�I(wL�+ +_����_=ޝ�������7� + +x��pȁKuT'Q*��D[%��edT�_^1�����gO0&����W.^=���YՀ2���X=���@Ξ$��D|��w��nn����ݥ;��a��[キ4��ݬ������k�������*�����W`{@� +�#H��Mv�U +K�R����@Y���u�[��L�.*�,��ic%R+c +�'
6r^����� �M�v3�O�[�*��f�z0\H��؟�h�l5����M��6�3�(�\Iw5x�u��á�G�uȒ] +g��\�@�K����n[�#{Av6%�3��٬�!���(���
�a�;~����6��U���I9R! j.���� m�$���d�����b�!���\�Uw
��y�I��������1�}j@c� +sN{C8�y+����F4\�����j41)ͳ@�֔c��ꤢ�+.R���)�d6b0L"�u�*>9�'�f��� ��$4gR0j"��"�b����9\�s���ۣ+�^�kd`D�^�c�k��N��> +j +�`f*�t5͍x���oƪa�ޣ +�J"i�k�fx�]����˗�l� Ad|gY{�s���zl(����Jc0���pS�
�qȄ�o�&u�=sx��#��8ڃ,ϗh ��ﯥ��"�^���(�Oi>b����}{��+.�3g���g���Ox�ͅ���'�?�}V�/��&����~"����-�. �-�m= + +�� �=���X��� +����52��`qY���h=����PXm�3Z�L(Y��FZ�yP��}Nj��4z��;]�*5 1B��Z�tr���n���x�vx;�� +�S��T��uCI�:�������~V�������jJ��˗l@élN4��̫��=�a���������Y=S�����<��4��v&�z��է��Ŗ��4�f��Ե��Ζ&��XMHH�ڲu +���E��@��C3` ��)�Ɛ�]M�{�LR��I�c��%/-oA�������NA.����_B0o�S +��t�>��V���g(`����] +�P*5�ԃ����>V11X�, ��,뱪�=�!�ɐ�8}�R7�ec��h���^��<n"#�Q��W黰_�`pp�F,^,��@�qs��\H\X��z��(]0ȧ@��a�|�I�c�%٠�9�Yx����Fy�y����!���3EC��ͷ?ۡ��T Z�����-ʴU�=.��^�u���U�+� +��Sy\CgJ�G[�gCx l4#t +]�a+~T}Te���%���H�&'X��\$�+�.��kN#�uh�S�\c�� +�y�n����u���5�Ⱦ
�}��Ba +v�VHΛH��,:s��q�V�Ơ��z��)n;��M��ɯz�N~_�ed�,�"Vr�WLs�uZP���`S�ig$"���'�L$)
έ%���!��t��hi�\�U���H�� �����bVU]_xtDS� +� +�|���_x�.J,�h +�;ѩ�h@Xj�ד���ᩭxıJ�tD����b�M�pM��2���`nm��|�A:i� �h�����7���c-��?H��c�"����0����!2�dd:�jVI�ۋ�Bmi�e���67ӌ��RR����qU6� +u#��Ip�F6�d�:���C�J<��V��~np�}*80R-�u�,S"���FKz�Pn��ӱ�-x_�˓���v���9E���g�r��!J5-V��H[��gߊ��mClIT�x�'���ўƟX|<��U +��E� +!�yܐ��*��Jh�#��= +Y呒��R���I�%z+d�U���1x�l�2�%�m�˝f�@�,�q�ցk`�&k� _{�jy�9*U�EX� a^3���s�5g��ȵ����7���z��\HD"t�nd~ +��(��#�Ҁ��J��@7!D�@��ԅ�&����y�[T]�ض��d�zl�v����c�!����QMf��a����9O�I��C�P��I�ŔDnS���ƒ�2��Tz�I�(����l!���[I�J�K�p +� ++ٗI�@;qy�ʈ8��&�5/ϢUQ�Vyy��C_`M m��d��pb�Zf�S����hc#��3�w8ΤF�(���$L�h�! %k] +O����\�Tɢ
*��[��ѧ�H���[τ��]7(���IU�u +�q8!��{$�@:�� +@�j�j����@�2��� +?�"b��9��o���h�B����8�㦍m�i����Sӝh���U3���j����pp������919�%h�=p�p�,�ǒ���B"� +�3!o��@����u�@��0�/���E@f����B!Ps����i���B��G�SG���Ԉ��z]#�E�r�� +�����Vl�Hc�G�L�k��T��9��۫�� +�X�nvX���˩��ch�Gr �L�Ǔ�)[9�U2U��Ȯe���� �GىO�4��
P��DQ�%@n����/�5(�qX�ӥ.v��
c�:P\����X������Q���R �l^k����}�����m~�Z��(���л�b��
GX�f@-�P�m��=�̝ �ėD� ��O��r��g0�7|ҹ`�m�jȓ}G��^�N��9�^-'2���u��dV�]}<�"��WTZ��O�t��T�PC��A1� + +��5p�s��N��V���e��-��s���A�wA#Xg��FႫ���;���T�)���z��Z��8J ������H�))(�٭{v@�u�1�h������Fh*]��Ȣ�`����M^?3�S)�p��D(����U +D��d&���K�ee<X���Z��kSv����i*k�T~�yBrC~Ȏ�>�y�Q95� � +�a����$��t���%�Q��$P�5���ſ��jO珍�����J��'������?�� +�[��:���q +x����<��QB +eJ���C��N��K'�E�S��.����O4K�{�݊(���V������-�����
�
$����M|��Ӭ���h��jd#U�q�9a�ͺ��&?�Ǽo���<IQ��?��r6�;۟x)nHq�!a{2m�$J�9��'Ӱ�Q� s`@��7I���|N�v1��%;�,6�&��.DuvΆ�MEP"����}�]<>b�`m�!5A��~�� +����+�_��F%�����/�p �H���� +*����S�֖�����V췂Sѻ�KOp���Y:ni��M�E��/!�Ϯ�. + +���h�gG YEҦ�U=_T�-"��(W��)\c��l���F�Y�;(���Gj|{���: +�ކpch�40_��s�%�K�;��Now��}@S@�&h�[�2W +��#~����B�1�Ï�a��!�d�8�G�Ɗ�(H*e6�f9a�"U9���&ud7�_ wC� +��2��P���O���>��h��k�O_�O�>�� ���> +�*��A������Nr@q���� +@�F��3�k�!��0�G�E��XL���$��c�p
r���w��l-b'�s���Fi�F�L���oo:�@
A@�ō�
�?�����eD%����0h&��zگ��9]8UK���C`��c�eur +l8<��w;��k�ߚ�8�.B�5A� R�g�L��36�_���1��-\Sp� +��8�_��,b�@��̷�<��m�+G�3�v����_�WJM-C�9�6�ZΖ��2�Zn�%�
�i+��M�WG��N�>I&`T,�/�Ÿ7."*�}�!�������[��G2�}�)N��P0�+�lQe��. +���J��p�/�˗��/]�z��ܸz������-�������ϟ;{��E +�x��������ɸ���v6cPr�H��^��`ph:2���m���a+��������v#��G����IxS�t��]0V�á~��^� +��s@>�vw��[��O7p�c�^�N��I��S&�����lB#���i>MY�(��Gp� G�'�j֫� +��bS�k
��L�:q(I2��w��`ei�o�P(��T�T��(V"�pհ^���g�ק�K�>���ixl`J �FP6 +��v�EOquT��?����z92��8�G(�����s�T�i��~*�&�����bS�ݳ*x`i� a��P��-D=�"E����U��W���g�A�[�����\�DLw@� +�h/{�r�V�w��T`}���( +@�8�}�� +b'�H�&�����ع�E�����o��@�!@�uJ0O��8*�HCN�&@���E����;ښ���xM6&�>�XSD7ڃ�W����%�W� @���L8w��z6�ȭ�`�$[�no���dԋ.i�p�r4c���m�����K�:[�Y��P�����_��qdf��Pۜ�ς�(k�}���Nя��n�A��������m�9n-i~%�hG4�t�/�JC{;k���lmm�`���#�^^��wu)��C5SO�+�b�!^�&g9
axpU��a�o���)��67K:$�)yS{+�֢���SH�EY^��e�V��}�V5��l�1��(YY��'Q�$��I�AɣJ�A-���_��?K��4)k�Dž�$�C[���ˆ���OQ +@Y`���/p$/*�mНd�e�/�l� +�%����w�역�1��{@>��=� +W1��鬙Lg�#}�h�����+}V��dp�>�\�)�@06�*X�3�q�-=�t�c�K���h;ͪg�dq�H�d�����P��P�z��̋�b��ָ�0�3d^7�ρm�S*N +`(������/�z����?'���C +-�+Ę�,$*�����rO)�4ۀ��t�)jq�+\�J� +_��Eu'�#���U+��j۴���&2Ky�>q�5��I�F�W���w� +�M�����^/�.�*
�X��4/!�Rȳ E����w!,�\[dD�Y��v�s�J�m�Ŗ%V9J�������W�gp?좍X��X��G ��r������\��˝{�䣂Mд4�[N!��<.ɡ��z�F,%)9�p��q�J�x�2����9�~"�F�?��N4m1�أj�&v�b`�#�PK�&�}c�)90�yq�+��ǃ2�Y�E�������}�� +J ����z2�N��BD=�,A�BtJ +�l0�ȳ�2s<"L`�w��tj�مn��zݨ%Qi��4��N�wc+�37�8ij�kaɒ_u�ST�"h��U?�5Y�J���SR"Z�"�g��r����]n@3tҞhn`* +����
@ +�[��c����_f��E���x +[MPA"�y����
��=%�G�IL�N���X �K�0�;��\:da:����|�2v��OA�ʮv<�1\�F�ڗ$ ��G�����x�ˆ(B 5�U3K�*�6��F`ۤǂSYY/��h��%eA ������/?����"%v�P�4}�@qӻ��&v���~�&[�@�F�ؘ�V� +q�7���P�� +;櫀V��U@�� +�_����}�������.\�tI!�2�/�R +����k@Y���!��7@J��:;�t"� + +Uݹ_�$�q�U�2?N�{= ٛi*������V��/!�u�����g�Ǐ��^������ɳϿ������S��9�{P�㻓&���L-����;� +�/< +�8]"�Zu�Zki�j�%5�ŸRs������J�ҨX�0N�b�J� �˩�� +�SrA��6|$,J5 +�dT��ݜ�8,X��4�=�BJ�X����%9�Y�]��#��}?�O�뭽e!�����ȒA"2פ�[���uC$���!�$(e@��+E�.Hg[-�-�S����nL.C,��`������gBT�:`�?}�~N�B�s���>{���ӯ�z� +���͋��{������� +v�s�JiC���ߦ��[�i
���c�I��7� �
�Y~ԥ���I2 +�� �`�~ߦ�%�e�����ʟ �z��� +-y +n`X�S�u����kwe��,(�:'�N�f��Zg +KD�%��qlܙ���"6-���,�"�%�$�Jr�!F��S�������{�kˠ�Ls���\ ��'�ו�59��:�KEQ�Rޤ� 2��tX�¦Y�k!��[A&n�"Q +��I�&{T��Mic\���{��T_A� +`g͂���4Qi +��0n-u`��q��|���:��`�`*:���) +@��sw�O��ld$@���%��A�dP
k� +a��~AB� +Tf|����UA>���>]V +H�K�"� +@V&���8�Jp��3����e����/����_� :�k�����z��_�p���Ͷ�s�ڂ��_����\DƳ�� +���2a�t�"~s�is�L��v@* +pb-��M�HŢ|P�iÅ0(,BP/kkQ��gO��;`c�������<O(/aʖ�K��`v�u��9gM@�`c�p\f� +���,��1 +�*@1�CE,�)B=���)�ٙ`X�2P@B3����#���ߋ�Pr��!7#b�#�4r���_q�%�Eğ��4�Bh�92V��dwU�~��������B8�vk�@�bc����`f���l�/�� _���%"�\���<��q*F�GPVT���$n���ds +���i�x��_�/}Z�["�|� + +.K� +j�'��e\�!�=���#�����Bp +۠���`=�����9m�5�w�\!ɢ9���t4Dt�A�u�[LL��S`fa��TO,
�n�u=b3f�{���� +�����b�M�@��k�d%�p*x@�D+��؎!Av��qo~�����9Լo{CD!M����K�6��1���a(��IR��if���,u +?oa�=�uN�Ob��<�z�oM���q��jV�:���Xl���`�4'�q�lJ��ٔ|9�{ +@���V� +� +YQ9�zf�ӫ �\Q:0.0�v�PV#�p(Dh���������� +bKX�����,�����e �"�����]�PpqT�c~�z�v"���;�iH��_���֤i�˹��K�%u�z��v}�1����y���@%#
��t�d +Ci�T�����?R +�#�*b�;�?eΑUb��E�2�]�%7S��� +Fmq�Ŭ�4�W��gj��R$z���e +���=�E��t�����( +����(��l�Ueg4Ȥ:��hG
) y;��,������ЉC�OP2�u��Q�&Ż+4p3y�)�p]�4��m�zBqqJW5�>�d<�`T�e湪�f1A�on�WJ5�:���L�5g}��A���L�iUkA��Xe�@3?{�!z���-�0���R�R� +���8�]��A?����8�-h�v�agm�jOj|:�I���` + +O2���X'�_��� +�1����2�8�� +U�h��8�*���;FAL��6� ���T�����o�t�j`���^V���f�� + +� [.~�˽< +pY�s��1 +�B<��gN��� +�]��"d��� +J +�Kr��Ns0_lUփ�ػ�(I䊜��3��X)�.�p�ŗb�_n0�r�ڛ/����l��͍�d�g�fI�R?[�Ip�+��o�<g��Ys��_ZL���ϱ�X�� +����[ +�¿ÈÆ�"�L��`H3��X|ӆ�ޚ�չ�*�(�5c���c +��P,Ѧ�O_�Y"�rI�7���c��d +B!��LJ���B�j2�|�(�����2���Aԭ��kxs��P ��fN���'�U=ľtt�<��9�=@�0�J�¥�GM����E�P��m�����È:�3k짪+��Ѭ>ɂ��̾�>Q���˚y\��{�1 + +@��=� +� +@�`�-q����O�ͨ�+ +@�* +�������ҮП_�Aw���� ���q�� + ��l�Q�N�:4<���ƎVb�2olNƘ�vZߛ6 V"F��8�*F8pZ�� +_�W��؈`\�Y&�xRc�`ku�Z,�k����TOon�z��*3A�2|i�S��D\�: +l:g� +�t�7 +�����-��|x�е����v�)�c�� +�8FNU2��ۣ����6�(��:����Z,|�zlOw��^ + +��@���WG@���.��gEx�� +��d�y}�Ԫ + �������nv���S
� +��þ0 +�l-61,��R߿��m�e�h�����d*/�a_�:�d�O�a&�s)�Eh��sK-'�@��4@;2������ɖ��ġ��^0��$s4t�&����
�"8�66��d֧@Os��(ꢑV��p��P��?�j�Nt{1hzN��S��#,˖�)>aYN����\�� +�9�8 + +��K�� ry���9��"�X���`��ؾ��F�H�p��w��O��#�mas4@P��4�j�2V����;�D�R�9ޗLO8t��t]�Nؕ�B���:<x�}R�
@�I������������-�/{ +�����F��I�F�e�r �MR��ҧ���ɠ����S��@ËS*��[�c�
n�����jj6o�ܤ��T����ܶ���?��<~�_�p� +����?m= +!������������@����]`1�1 +�Ș�'H
@��h�����Y'F��x:XC���b��%��&��낕��u�Ό �lM3����y��S�!q:�. +�[( +�I�v�>%F)(�� +�o������[��f_E�U +�؏ċLT �#|���gS���B1�B�F';}�c�h�� �L�( +�Aj)]�M!���t�� +�MF�g�p@��ˠ�_��{}�5��VBL@3��R�+�P�W�. +�\�ѭ�d�C���s +�I�,\Ǯ��>�vBՄF5�9 li�T��km��pDr�:���.�N�� +55}(.��1�4���VB埂���w:^� +�W5���Z�wܻ� �� +���� +@�p�} +�} +@T�Yu�s���#y�ۢ���������;N솬�ᐂP3�we�L�'��LN� +��?b�:\�����n��Ȋ+y�<y�'͠Ǔ�sSeH0�m�.��ќ����=��u +T�֔��|�EZ�;�� ��c +��L�P����!�\(�-,C�\��C�PN�Tk�������~�?��# +T�;�:�;d^�}1�U��CX!��@�Z
`#yˮw�
O��U���'� + +��x� �H��}'��/�S��8�� + +�n�����oG +��� + +@����~dT�Q��]��`$�zL�M;�����tDAM�0i�c��]O�,ע��N�|�����]��"&)�`�� +��e�,��7)Y�j�6��� +��#�A�'��|�X����۫6i� U��Ybī�j���L����cA�'P��[�ؑ�}oa-����`Y�|�\&>�L#N)� +��w��P���/ +����O?��o�~8�ߢd�7�1 + +� q Rp��x�z�� C�D' +
&� +N�_̚�+�M���b�F����� +����T� +��A8� +�fD~�K�+'3�)c����Ld7�x �
�+�щ���>t���%�Ћ�@85A �� V
��}��d:���~
�+��E�*EH���t��|���F�l��t�(�^(-D��-JK�w�%k��}�lIW��Ԩ�-� +�g� �Fɔ*o�?��s��A��u2Jc���#��Y9����� +�^O�3xCӱ,H< �ҍh�zz�e�D� +�v s<�����q�$(&j�E��=�����C�:����L�( �p���\ +�ɯ�����\�� ���uO�j��8����DaC��
Y +|W-Vm� + +�R��{��ed�y�@�� +P< +�o�s@������ +ķ�%�������Ȅ��ӯ��+ +�gY ��Y +5��{�U
b�.��J��) +�����h�>�*���L�_8n��q����D
[���������2�AD*�C�����TJߞ�6)��#@���$��r�Q +ʦ�uH#qN�H��I�`���"�Rݹ��)�V礘��St��I� +
J�)���g��vO{�( +�w���@}�ϥP{�a���:�J���w�=�{�d���P�_ȓ�����Wf�2�\�t\Y�����������*����� +-������6\w:�"nDJ��m���?�"l�!o�`���.� 7�����߸�3����ע"Z�7��\�9�)
B0Pj�,�'�շd*�(�TQU,�����}����m�v�h�3o�-���� +p�8s
� w�?5�ϳ�.V��_��s���������{}�ϳ��v�d�G1�6a�{"�.C��v��>�6WeR�u��Xo'�G�H�Q�v|0r� +u<�<=��e�*��0M�`{Yni��┠j����Vs��K9�>����ꨱgW����zkwڢ֭ +�Z�)l�C���� �U|�9�c�z����`���&��g��! +)���Lφ +���Y6����鷦5ԭ���>})���8���,�g�<*�y���[#d��k�W�`������K�b8oމV��'� +^^H����ϥ�O>�{�v���D�_}�ǯ������ +p��� +��c�k�R@��p����� +��~G�L�����,xU�CΊ����i<&���� ~"N���i͋���S{b�0����D�Hr2A�_a3�*}v����A[��F�ŝ���HgI>�U�Q��h� +G���������#� +�>���I@�x$���4�2 +� +^nj����A���@K��l+�H �����N^����\3� +w���N+�Ph#̔Y�V!�l�K��1����kxd�l�B�W��l ��Y�WV{���`�NbE�@(�E������ϔ7;����$�=�"���,���_�<��}
�� +��lg��ֳv��c��֪��qZ��é�#*���9[Ϗ��h�3q��Z��%�\ ��ۜO +�h�=r�\6T��~�]�l���Ԥ"��Dq)��~����D��Ţ�<jm1�)ăR�pj�ӟ �W�%@4Cȑ~������$6
�������?�lF��x$G�\j�vZ�y?��]�CyK�yC�4D� +λ���ƣa�;j.��9�d�mI������g�)����^�H��N@0 + +
0�9C +���yK}U�ǣ���ArB�|��U� +��G��v�= +�����������T�o�6~��h�X�â��� + ������� + + y +@@ +��^|�H�%<��r�N�<�um"=�gxY|�yͤ
���+�U)�� +qብ�� +�,o5���\K`WGY�� +AU�4��e���YRnHxԺ�.sh
�z+���T@��q��]A�8bˏ!����?rc����K�E�G,�;0�M���7ڛ�#���QY�����gw��k�]}xt�=�*Y�4�8�2��X����s + +������� +fw�_f!ʄ�+�w�w��B��!&�� +v�i����z605!�I�0?��z�68ЫNu&�[}Ρy]ٌ|��t��w$d� cdu�%��٨е +/��(��(p��k�ũ'j.����w +�Q�s�x��Ǐ#P�y;���@�J҇��ˠ(�'�IHL�qܭ�M�]��$}t�U�I�m�yc(
+�6�,�蠻��s���9e���,y�ߛ���w;�l���mw�2)��.�x�s����O\r��d%:����/W��LM;���Ͽ +�6?3�l��D@�f��/��?��A��E?���f�����ć^�V��=�[�9 +�p�Q +�6����Do +��q-%o!�iY�N�<�*Yk/���q�6Nd�a�����Z��W�.]������!`+>*����������5<�G�[���M@?�g�;�w��2Ȁe��n�ß�/�Gx��<Cf� +�B]������{wI�f��YB{ +S=�SS!V�R� +�ҎH��b�6��8����4r@hg�
�4�y�^o�# ��W=���f��i+�k�Ʈ��P +���_�DZ����%�s� +|Ge�H~H�*���)����.�0k���i���썱��]c5� +N� +��:� + ���ٳ��Q$�D�) R���{�@��K�X�ɛ��+'� +�G&� +�e��ء`���N_#YT�d�kL��郳X�R�ؓ���,�Ap�SMn�E'����,��[�� +��/0k�pm8wm���@�=�W���"�`��F83��v�O�l�{SR�X�w����uve dkw���f���� ��+⣊,�3]ބB�ί�
��M���*6b�
�ou���w����ڻ��no~'mu��+��H�o����0���*�#�����d��ӬV +r��8D���3�x�mP�k��ѸO;�:��\`���v�R�JOz=�K�^�B��C{�fW +�}4�ҳ���U2������B +�'��� +�֦��%3�q˓��c���Ƿn���� ��~{f��F�onq&U֜��?�W��+}O�j:��é���� +G���w����h����I��e?�B�8�v��&C����GЪ`�P<Y,��2�#�s����R^�pW� +Nu��]�����A���B�b�|��ڵӄ�n���n�7@}��tv�Ik�>� +��ӡ�5��2��5��4_H��ĚG�Ng���+m�8���Jns�-F[�*j +�������.���H����2Ztw�O�G�z +�'���J+{ +����� +^Q��.�AO^�E<Q���,..�Tk+�
�l�\u.� +� +D��� +rL�@�$�� ����Z�1�>�Þ$\��U��2k[����'�2hs� +���U$D�ڑz>����ϔb-� 4�}�2i�&y�y��)��3��SA+.�O�b���1N�� +��~W�D����Ӕ������`��"���]_���`#<s]�r�>���
� ��C����p�:ɠ`�2m?���Q�<a���de�Tiqn���[���E�����'����;������;w� +(��uv����a��+�h�ޖ��o7V���ή1
������$�>�L[�����7�Y��$�������v�m~��! + �������_���(�e�; � +�zΙ�,�i���I��fNdF�?I�7;��9�/�-IV� +�Y�S�S�_�J1 +���[����ye+ +����'�z�8@ +dl�ٌͅ�=0�N��)�f'�M�~F�r^ˤ�X/���������He���bX���[ͭ�ֲl��[�����U�!eq'��[ҳe�@^��i�T������+�$����acVt +�A�(c��^��
i�#�`��0�dՃ��xP�'�/����ˋ���1a�=� +z�q�5��ZǾq��[��[���|��m��h���v����Z�1�w`�b�}���'�C�X�K#� +ڱ�gTL�B�`Kl6�!2Yh����)l�d����&�p�a(T��5���.h�7~m1I��F�"7):Xu}�2cV��W�/j��J�6�Bsv�ݜ�� ��� �M*�M{�
J�R�'����u1.��Ѳۅ��w�nm�E1ԐP +�hL��i�J���~9likb�_\�qM1���� +��D�^� +��-�@����fp��Ѻ�Gɟ���& +F3I�O&��*g�mo��;��[)�)���6q�v�&��VH����t���儸~zrr��j1N�>3�A(�'�N�N@ +�5�O���3�J��T�_���c��@��I�J�GJC�Y�d�E��=\܍I2�K/�����Z�t^��쎟-����9J
���wMKM�N>3Qzf��@�r��Q�.WL���ᄜ挗7Y�l���,ȉc(?ul&r:�Z�̤�e'@ +�d���灻���1d��s�x@��cM��:��4���O��ť=i�� +����@#�؞Q�$�x +���`�&�{�mp�ls��?3mR���1��e�����2�
jD�("�u%7�O�m#�H���� +K�kN���S��}�'R� +���{�Bz���up���v���E�w� +���+k+�`7�� +a�곶���e���UA&�̨V��u5����o�h�w�A8�����L���J��W�)e9�a�Դ�k���ғ�ɛ� +9ur��m�����h��*~g� +��V/z����� K܈',<L��]�-��j +*�c}bKS�N@��� +&bN��UO< +(Q��I�p�vt�Go���ν��}��� +{����"�NĆx%�����6�N_�l��m������[)t��V��p)n�xC�`���Ԕ�l�.o�P ��lF�f��'*�y�+�`���z��l.D���f��$~7O|h� +-��ZOq��;�+k��l�ށZt� c��<���$�֢_�:j8b�1�.G+9$|"��l���z�I�?\��)+���|BAk�T�h~�<�g"Z�C,�99�)��S<N����C&����B�����6mX
�-l�B�V/ilƭV]��Fy +'R��~�� +XN�{���@S����?�4�ɀ +(E�,Pe���j] ��&���ݲu\�uq�^'@+>�:>:�Z'����h�X�$q��,��/��X��N} +��֨�v�j�@�Ժ�9P��#�֡6���^Lֿ;G�(Bq??_���Ʈ� +02n�M[��U�11�������[fC����� +`@xw��J��� +�F�AA~p~i�^/�M]��t�Dܥ%����?aư� �k�:����ZvTk�+�k�Ӻ����:��Zݛ��0�q��*��.y�z��\i���i���%$G�.-?]�����lR��҉�KVXĜ��Nq*���!���MU/���r¿@V��\89�Z]����#���P���`���Ih/���#���س� +��A�+�����e֕�kk����i���'����{����'{����>�ݯ�IT���cf�0 +�����|! +|7�#8����ֿ !~�G� +�X˽ԥ�bt��i�Fz�� +ۂ^0a-��*ϐ/(�+0k +�j����ΓRmi�Q�۫� +X[�,�_�]d���e8�Ex� �Ϧ���`z +�ٲ70 ������[�������������F�ry��d���Ә� +��չ�s� +Cu��y��sS�������2�Α�q� �b�����j�4u��&'��<6�<�|��5P��dDst��u�z����D)!U��L�R(�ksY��`f�����@��I��nxxfs@<g13��WP������ z +���9�� ��R�HV?��~y"��l�� +���&��?�"H���w�u([BX�:�k��Ë���U +̋���X� +�J�x3��%��ѓ
�7! +���z�yѾh����<v����]�j�s�
��N�17�"Zz̙�r�*rH��ƭ�� wY!� +��5�K�s
�ϝ��� +�$��t.�j��
��gE��Yw�>A��yO�z}��P�d�H��hG+縆�����V=W%)�Vk��wn)������Hj�����${�?�&bߵ�rm��z�K��ƺO��i]�d'kUi�^�������.7�@�X + +K�A�j��ZG�H
9�Z���LW@H���VK~c���.A1Vs�l��u�������Z���to�N'a/�5c�ݶz$9]@�>�d +.�kVA��K�i�di���!K��\������1v�b�{�ª���S�u��4н>5���,�p����3$�C'"�A1��������%�ϞsCzd
�\��P��z�fި��ȐF����/�'�����y�5���������������$���ŋS +c�v�P� +ꮶ��8�4�Mp�҂��uP�t{�`B +e� �Y*�q��� +���'�x��r�� �7 +�.T� +(m��0�Zu��{AJ(�-"����.
�z +�AJg��F痖�Nv&�N��ָ$Ng����UA9���!����K붒���<��y�� +6��!���z���&��]�\ +Qm��samr �Y@�����n�7]�&ڠ����&�I��Ap��� +ཹX=�z��Tۗ�-j= +�W�3=7N�2l#�А�2�
Ȉ@��������<���;�v��! +� +�j��m$���[ +�,mu�8����1��;����n�TZ�V{V��*������R +z!�����vv�O�+�J� +r5[b�Z�+��J�+=,G���\��`�uMTG�6Z��%\2<%p�j��]A�[�p:)�n����-TZ7�����������&W�o<�}��$z��]ɢ�r�#�W��Nk3��H#%���M�]��%)+���0��jnC|쿐�Iu�k��������@��=���� +1��a�~i�V�ٓ�H�\([���]��=�t���� +����ه��Ϧ�^Hf +�iÚ�5��E[>�9���g`d�T���W���:-�.� +v + +��{K~rhX�-,�����sߟ�y9��w�r +���༓�in����rm��� +�<��)śࢁ�@i��P�L�֥��]��U��;�Ŷ1�[�� ���5I���.u���h�Z�����m����4}��z��6I��܄���3�`��Z��;��Z�u�h�a�o� +�R5�{�Y�A[�Iʲe���_�ߊn�]�Z�bR�~���@P�4@Tmimz�$�k�!�P}��:�ZͯQڲ��좖�f�d!�4Z'��=�A�M��� +J����0�Q���)������Ky���Upϖ
h-J�;e�����Q��iM��hn���*5��f�˽~�W�]Z�C� +<ɾ�%[j��?��4j���C���l��d(�� �����?p���`��>p( ��>6��V����,�wU�\���zP7r�Q���������v �1A +D{=?a�T=~��I����(�%�a.ԗQd%*!��� +�-�'�\ +�N ,f���L +b�>h!bh���.�G( +�o�C�9N� c����'n���/�� +fD@p���@�Ni��V�c+�g�;��c��������hү�7��BB���!���:U ��5���Z��������6�s_mw�9�|���$ +�>0>���Ab���)��������r��d9�r"�އ��S��.%�E��ԋLv'��}`�Ǡ�l�j�`��� +4z��υpfp�r)�W�wUڒ����;V����MS�-kJ��&4{-��A�Nk�{Lp�x4�@H���q�0�㾌�ÿ��� +�H`���e�.�S�� +i����~��������4�� +l���LG��J�ܪ���{��s`��P8L� +����Cl:�;�cWR� |/H�Ή�b��܀,4�����b!��
�X���e,��vD`���7�~ +�_��-_ru0@IM�or�L���� +ѩ��Vɩ������* +0Q�c���1�)���`�0R����"���X������l%���W�[M���7R��=�l��n�՝���K��s<����"�]��ζع����+�b��kO>�g��[��$p +g�ש��<BfʛրpK̢����� +`���:�b�P������<==�����j + ����(a�� o�������Un-X�3/D��yu���H]�~�����b�xc�~o�ղA�=���Vi�z�V�c�b�a� J�(O?珯��*n��Gi��נ�:��o[���,������C�Ý#��6Z_m_�w�&�Fu���!�gl'}��N����hm���D�y�˙9�d������zs(tWe��ezZ��X�o'PCϲ�Oh
l���uh��!{��~0���u������g��%$A�ժLW6�~;Y +��\�^�v�*�!�A��u;�f5�A�fhM��m�e +�è���n��ː�p��F�!#�����O�z�����X�M�8��|����q��oo���\m�V��n6�y���o����ٷ���/���7o�ܫ/_^^��I|x�����r���q+Af���������j���\��圠�6|��/y�������_66�n6��9��
(G�֗{�n���dyq�q��_���6z�O����%E6��s˷~��P$�}}�V�K,������
Ҿ���ڥK��{���//Y����j�S�ЀZc��\��������W~��"
@�������@�/Q���n��y���y������!�Hx +�`���B.����eVF�: J� +��$�+/��cS.t +�N�o͖J���-W�k���,�4wyy��u�#��9?���>��@��K>#��� +,B +f��$�q�cN��>"tH�{ + X���;;=sְ +L�f@�ڢ�>���J +@n�u3�f �_2{e��(�%��'�S�Y� +���>U�ҫٶ�c�ۋKm����m�����N ��0����5��fBh=�R^��˘_e!��j�٭�7;q/���~�����y��9�I�+�%q�"��;Vv�usV�F�f��W~�����~v�=��2#�9ЫGi� =�Җ@y�Mڧ���q~$^F�|� +E�66���ެa��
�ٻ���X��N�O����;@�6���եZ�L�Rc�qs�{E��z��ڄ"�Q.���"Xol�<���d����"�q�Q�'ml/ +, +P@�iM� +�:= +��/���K)N?� +��<��>�8�j4E��$wD��*�}�66.z���G�F< + ��8y�t.��m��x&<H�.�a)b +:c= +Ж +b�ޗ� ���[�+�s{��7�{?� + +ęm��w�ܭ��f��������F� +����� +��Ӻ������D�>H@���o���D�Z?�Q\��n>����R��Z�U +E�j+_��d&�,>��ݷ +�E�H>�4�fjN��5�d�� +��� +@����������`�=�f@��c�� + +��R��:��zcon@Cέ"�
�_m��bs��,��]����L��*��W_K� ���� +0N +�}�A�|� �>{ +`��+�c +@ +� +�?�y +@��?V��a@�[�5�� + �̟<�����@IM�NY�p�����b +�:7�������� + �0p�=M>5Tc����P�!@�����b +�o0?Ea�� +0���(�j9< +Q�r�����oݺ�:���p��Ջ?BMrg�Ȝ&ITA��_�ت���")2>��Zח��"��Յ"^�Om�x�n�!�!�b����0⿔8; +�?'�' +@���D +�?V���������]��k��V +�oY�N�� +�4h�\]�N��<U����;����ܻ�5s +�C ��,xya� +��� +�ʚ��f����-/7.������y�B�5x]��$�հ�766��'���k�!,$/ĥ��Zm����g��O�<35u��p�;�7�C�B����O�x�\ + b���Z^K
&�.>ְv�b��6"�Ս75o����F +��K�O�/-�W# +���P�����L�?�;s����B|��m*°z�����3g04&�-���b5+r�8]��Zx +�韅���-��0Nk�̫���φ�!�w8� +`8 y +`NJ��ߨAt�u�˨ K6���O1-< +`$��'6��f�NNLN<3��_x +�}@����8|���)��`%Z +`+�;�o}�ޝ�w�~e/�� +P� +�cd�����*�?��C� +{ +)�2{���u�.�������v�(ρ�̊sX�k�ɷ�1�l`}�G�k������9}l�~ +��I�`��Q��f�ũ�����
� +� +0\���A���"`��x���S@H������>�P�a#��=�H�� +�~�q< + + +�s��:�fx}������|�է�Ĝ�{�l��͑�U��ְ!��)��/��N&�;�f��A�:b +��g]�Hv2`)*�Ri���?$��,�H�ċ/���'����x��r�V +p�u +�
?@��������/�6��6���l`Bl�� ��I�� QQ��$�����'�����'=[����'�
����''��@�pA�1���_������O +�ɲ�Ӣm�P���tu�p�2��,���J���J[!5{mf��}�t_X&�,�a�r�y,S� ��
Yp���8��#���������2����I�u頾{i�����]w���8�e7�2����|y�Qɳv����t?"�Y���ʬ�J Ju*)^\wa��4�|��f��^�͏zt]�CEm���, k��i�Gݧ�A��D>�R�V�����.��:ù�~�Ui�}j�g�:�̅DI��-���Ή��n���^RJ��Y���h�{S�������^�_U���Q6X +��Ƿ +��3�VR�%�ZV_4 �h�!=zvVaTC��X�,+�=@�ט5_��Hs`6���'V&���/$�y�-h&�3��I�i�}���G���Y�@��`����'@p�l+2���Q\���u���Y���t�����������l�^7IWIG����C�a*S3ɠ�ܝz��nL�R�?�3- +�U!d>�KB���++�*T�C�U�S`�U�����)7�����7V77�� +��5��XJ���K +� +���N�2l;#ZH����nDQV8�a�vf���Ƃ��^G�,��-,���� +[{sY�B��6`=\��V�/m/_RN�@DM��M��em]3�J�y�_���� +��f��w����>��� +̣�d� �@���Ȕt�n��{X +�_ +�ɹ>�` +u)���} I��[�2Sm8 K=aE���량N)��D�y����S 6��<$vp�2���d�g�2��D߶ʙ�ω�������r����ML�yB�A����.�n��`�~-E7�ؠ�?[�u���������N�j��8����R!u���
F�!�F�}IZ�c�E=꽔
�;� +wé����A�ʌ��~~iKlCiy{�ҀN��}JB9z�^~.��lM�VV��U��)�suQ��y�a�ƀ�A\�*�RK ���-�^)^�;;�6��kIi +?������� �_O�hb`�/�_����?���7��@�y��%pG@�h�:@4�C&�6������q�8��o��^yC��Z�X����$���`/��{>�@o.�7�R(��4<�S}#37��� +���#| +��KA~��d��8�C��3 ��"0:_W�}0��$�vTu����5��X�i'>烨o/�#],89�EuV7Py챓�|A���68��z�J�̸�a�!��o��I�ݣ�"k~�=�����l�i�2wJx����O� +�I +��?�cB���h�O�{R�iۿ%]��=�{P�_|�# +��\qd�����7��L +@
���y���ש� +w_= �o~鑴�W3P�p�����v��c�i`t^Y��p��Rȋ�h%�g&��u�J�wzN� +��`W���/�> +�K����"��#�ɠ( +�����I:��������"�aM����lۆ�X�������v����x+�s՚��C�E��]Kѝ�dD���MN�d�&%j���i�Azm��������3�K�[��R<s��b_uS5�-KZ������W:/���A{sP����Ҩ�������Kt�F���V@���s��jOk:�y����u�A{[1Ё��m6'�џ`"�5�.����D2�h�(���y�(t�� +��bP +�ȱ +��J��l�����.�p�d���)�-��(��9R�o�L +k6!7�Aj4Yfgg���K`�D�1l +(���"20��+�`g�Aȓ�R��� +�}'�u�1�}�Mx�.�Ϟ{��� +���j*i�Z_�O�������S�)`8i� + �O�'�������t� +v���W~|m7, +E���ޡc���R��������LB��PP,`��l�b��k�,��%e�L *�Ȍf�YMl�����H:0�v� PB'��#==����d� a�Ð�2���I�c.n� ��V�^9Q� +:���� +@� +�����1��|��K�»�6
�J�����X�ך�NO��W
/ԛ +�ܚpD5��4��a- + Y +�_.~�ƕ#, +Q�u*��U�!�t�g�Z:;�t� +Rj��0���!N��(u�'�ri��~��`��ʕ.��l=�4�U^��jT�muZ�~��o�����1H�y�*�0���zY^���Z�5 +����.RΟ��� M�{�3��[��`R������cTgk�@�N���7g��o,m��~��˪y��V���M���==t�S�����۽;��������ڹ���8��҂i�O��Wn.4�Ya��x�k-V�e�IųY]�e������K�` +% �+��m'l +K'��Y�,(&�3��|�~�J�-�;���o�Z�D���)+O;��9�ڇٛ��JR��-.f���9w��l4��� �R����l�s_�V��?�)��xV&�Rx8�ꚞ�0}�k\�Kש��k�E=F����&�}�1��,_����a-4�^�'Izc�������J���x�e��;������K�����П؍u+�+zC�Ŭh����,���f�W�-�Tfc��m}k���(N�ҨԖ�R�5�Y�����^.,���eM5�5f���q$�⇕�"m��@4ZT�YEf�+}�����?�ᮩ�TMj�ї�}�������x�^����k˄�Z +@�?3�Pb���Y�@߱\�� +Т`�S��tO�U%g�Y��O��Jӑ��ѩ�D�>��%��m�=���J�'|�6}�W�`��0��DY���jY��]��1�)R�����*c�fe�����e8Ka�TFя���
ݦJ� +*�1��$� s3�m=E%��q<Yv2����`��qL�H���D?j�Bei�������J?%�Š_���Fjh�Ϸ�����b����k������lEW��?Aƞ�?!�Xr����P�cQ��"G:��KC +T@g���}������1�"�A�f����:�C�.�����-c�]�p��b���n�i�F�� +��k�v/��@e.S��S��������$+��^[���9gD;��Xn��zR[�_J�L*�h�����k�k$kaη�-��l����O�4 �m�+���Ȩ����z־`�ע[h��;G��ɽ��[<�Md�� C�測|] �'�pr_6�����������������Ύ�n{(�~��Ӭw��1?$��E'�@i�/���C I�e�5<ĕxKMk�n8jP+g��+� +�����`%� +b�FE).:P4x��%�-6t,8�h�q�2\�vA�L�fe����@������������;U)�'z�z��~Z�����Z��W���.�Y��"����E��lЬ�s��8~Ip���I��(q�|����DD9 O|_���`z:����ym�rK�{>�9���Ȗ�<�L�Y���C�1��h�!�o}JQ�'�����V4k
�$ސĔ�|c#@�^�'��+� +�u��m�j�.dgl���X�IgF����������뽺]��|��-���������AӾ�h�s +XK�M�k�p�@ +=1�:5��c��rO�l|x�U�VV��ľԣ�_<������@�
&;)|S� +� +��V�S4��+u�lw�e�W��L +!|hJ���������;��������ü�����)��U����ݨSH}sB����õ����e��^���n7jt� ��z��5Ϊ�EWɻ�> �tu�]��&�
R�A�z]R����K���ĩ���ۭ���m�/�"���k�5pW��N����z��*~Q�Dp�����@�*lz�1�$��)���+� +@�o'����{���#y�ڵ�kP#X + +L� +�d)��ݢG� +�m�[��H�qu^J�B���" +�A%r�`��/t/o'�#<b�_yR�I�!����c�%��x�ի�AlR��Rrr�]t �O�"����ɓ���4�����7)Օ����Hۤd +�B��j����r|�&�J�Q7����O4��u +a0�!�c�k+�5\:4���o=݉��M�o�e�YZ9&x���fm�R�u.~ +�#:d}���m��3��G� +��֣Xj��B/i��hn�E)�<2@��7����tz[?��Zyc�#����$�p�d(<�xH^������qӮ +ܮRS>3��y�Qt���4�s�%h�VO8o@9�`����=�dx%��������|-=��7'���xWt�-Lr��j��<�����.� + }|�� +& +�c} +��Veo�������6T:Sp'��P!x� + 5�uN<�Ӳ�' �B^t6�Z��p���Qz:�c�E3���-9Qy)}RG֗��H��-�6� +&�"5��`��N��F����~��t'v���R�]��,�7K��
1�|���R2{��������Dİ/T��?���W��Հ#t�\�{��I癯��r��! +���ͳnw��,�U��O`M���:
q<�Xa��h��7�KD2d��~�G{��`��;���3@��[�:��`|���g�S|�H��wKK@� +x;��pg9�~�â��,>�p�C���f�t�W;Fk��n+#] +}�Z�~�:N�X +|��I:ι�߅p?�VkY~����H�&��t�&>T�<���ڥ�@��sQ(�̛��q/��.�?�հԗ�J<)�3�ʖ2L��qg�Bs1� �Ck��_���+��rxm~��*~1��~,�ϝ��`��+�鶷�to����[1(�{ ��� x��-�,��������,\�|s;k/����E#���~���4!
���.`�tcw�����;Z�w�:GGFع�w?TF����7��3��c.�%�b�9�ɺ��K�>�X�N�#���x��y� +୷0���zU� +cRd�"c�ܯ�V� 1�{� Pf�RJ +]�m�$��(hӵN��VK�87jh�?z.m����A{Yi� +�[km�Ql��g{?ԒV݃�c
�ʎ� +�u��A�Ҫ3�� +m{���v�����n��j7������v�R��T +��rm
�@������w�+dKIg{g�"��,��q���֕7��m��
K��oU\�>l����:�q��.�
�*���� +��N���{� +��t��b��`�����H6�#[�o%xgȔ ��0vEC���� +�J���^��g�V +�����O���UGmЎL稨�0d��\��Ǒ�Dg�J��tz{����x��������ޠ��p�!M�q/�/�E��
��nf$2�k\�������Z�����W���^o��
H&�N^���7��*� +)���눠6�Nz�'���/n���%~�Ϻ���疉�ۗ����K�����ME_�֥K���ĉ�k��f�֘�T�O<Qâ�����su�Js��'J\G��u��h_{��xN�Be䟯�*#��sϱ�����K�����?ko*%���%e��8ۗ�-���g��q +�xդ�y��RYi�@r$������|,�g�VWqg��l�������GFֹ��ȥK����|�@�
I �mJ*��Ԫ�`�x0@����^Iu}{����x�} +�\�����O��,5����(P.�]���5���2t�;�p����_�N +%]������%�O�`��A�y�| +�*Uw�S `�?� +���[������ƼR�/~E�ӭ0;b?O�k +}Ai�Xt�ʳ��dk�)ڂ��������ʲ�<rc�G,4�ե����(RW�\��P���$ʄ�b�Y�x�)ӏ��1$듗+
�ʫ[Dff�-Έ� +{������<��_d���/��9����ϋ����þ����5�9��[T�4����$T����sʗ�?� �7�+ ?c�*���/�B��������(w����'��O�"� ZRO���j���R�LH{A�n��t[ + Y +��v��PcpB����l�-j��%14b]�$�BC�'\
�V +�*���қ�_n�-i��^ig��n�������J��*�q�%d��w+�9����� +�`cU�o� +,.T����L������T�"P�y�*�+ڻP�T���9^<�̓�sr��Zέ��:G�����M���uL�-Y�x&R���nw��$���S�������i!�Hw�^BO��������N����%������a�q �Y����߀.cw��;ew,�"|%[E
��>���{{8��G�\�ٻ�O���_��O.���ݹ�J�W�H�OC�%�*MwŐF�[!���TOK�hУ4&�|��� +*(�X�)zq/�������������vm{}��F����E@��v����d9��R:�·�+���n����ߧg������.4�B +�7��N������������?��O���~�?,~=�3��+!:��I[γ�F��W +�(��ť�����{��=�|2���u�ӣ�:�R����S^ :��m� +�����+�I_��j�P���Z�t��p0�d˝�`����~��t�,h>��ʰ�n�A�2���l��~���D����t�3E3;J�s�=��n!� ���LNtT�N^��r�:�D�U�< +@? +H2� +qg��ыO�--��3@��R�Q��רF�ь������� +(F2hך�5fx�/�X�{V�4}�N�
u�~�>p����4�2��حu�O��S@N� +ܵ^��o���'���0��'�h`�_�5��]R�Ug�m�qd4�͔8.n�3��^���I{(@=��%���=�;{�j㘢���߆�->|�ժX +�O���������0Y�BɘdT�&���6:H +K��t'�-O�p�9i����<� +P2N +"!��5�����.�a���`O4��p�����{�����[���߸��|�`�N@����:f��� + +�Rl�8�2W_�ς�pF\�w�F&��a�pQ"��G����u�"�� +�>��>��c +��[�F�R��������� +@GBҞֆ؈�rO��e�>�P�`W}M�f�ނu{�-\�ӣn^Y�{A!�/6!=K�?��ė$`�����?!��J� + �Y#���!�<=Ĵ�C�� �z�-�с� �ݪ +
-D��Gؒl�@ +��E��}{�ý=Z�b�%a�7*~r߉P`@wg ͺ�[�ѐZ�ؼ���|p���>������ݏ?��c���S: >$�{�2���]�b�:���E ������= � +c{GZ����������ă�8$�D��R09�7V +�S�`�@oV�;���^[j +m���z7\o�FA��B9�����=� +�E�s��|H����;���������p���UI��
+f��d�а +�����:-�%fs��{���/����>����.m��i����Q +���/�w3 +�.�ҹ��#�'~�rL+�����BP�ĘL �=� ++�\׀8BRD��'����PJ�Mt�g� +Ղw,n ��e�B����D�Xi�Ty?)G�x��Э%��
�m��'t��#h��6`�Ϙ�����$yP +)�=Y1�/�HdbXd9^K�����5���E�œ���f�=��W0������W�WVqخ<��鷵�p?�Z/kIǵ���3�N@cY�s��]�Q�Tj:V��t�a�)p]��5!i'��n┮������A�JC'�j�� +nI�iP��V�N�5fk. +�7$�\�&�q�+�X��T���!9��%�vc5 +u�R>t�|J�>� +����`�����?���~�����
?�dx�������w���������EQq����`=߉T��<�F���a�E�� + +�L� +R_=�r�k��T?GXlh?ς�zNM�%:��K�<�����^`^a��%P��^�xx-����'��Fx�!kb��dr��FtѶnI��4�h����'}�_�e�Ύ��p���������/�]I���H-�㿋 +B��.S]��������uB���� ��T +r���`� �Elt��e]OǍ* DN�p�.��b���<�3�M��G$��P�S +�}I�q��.U�W��S`р)�.�K���B��=�t��)��
+���*�J|�)].�K"��2Fb�eS�V�!:/��+�C��B>ء��������e��g�䕁)����:4o��� +J� +��T~�ˢ/�����e�x晧��/k������Ԋ:��
���tm��^ +$ɭ[�s�Ѓ��.Q�l�{� +��ѩw���W:�J�ڥH��sMh��r^�J�^�~68$q .:r�aU��<__^ �D�z�*u��_�l���A���)���9� +00xY�&�ߕ?e$I�b6K��K��& +D�O�> +�^rV��M���S��n--T��T*��^�K�{?�����͟����>��,��WfN�~���l�?_�c� +k~a;.�����e1� +��z +1���Uޢ�\�������\�0� V���zsi�.������d��f^=�h+����� �C�2�ՌD��)Ž�2
����h$�>\�4��a�ؒZ�4�ڰ��x�t@
��o67*�!b�� ����L�����Ѝ%��^N
@�\��>� �y(�0����w(5}�������3�.,4� +�ɟ���l�Զ�&l +�#p�̡��Xx�0 ��3�V�J��KQ����|<��v��� +�����<���y�V�l���N_�Q�s��Π�������]���4��-���`T�]����Bm� +�U���ACz$tʠ��y��fk]Ϡh7H��A<a�)û[�2���z�O�CQ�{�S�tvڵ�^��aDH΅Y�!`�U�a�� i���:���������!��l� +e�̄=������F +m��� +7Vp��Ĵ�������n�������wB&T��� +�L�?ӁR #���, +��gk������!�Sz��9mx}��}ON�o��傺� +$;�Dyke5eP'#�Pe��7$�y>l��V(�Z�|�����zE���(�������"�u�/3:0_�t�y +�M�(ρ��q�X^x慳�����B�g^�����.���u�Kҋ; ��w�"�X'L�� +$@ڿb����Ĥ), +NK��5W<h +�D����j�#����As�-ޔS{���9' �|ߏ��Y<������%������s���1{[y����U ���\(ΰ+t�I�b9=����;���^�ٻ�CG���\��X@���m�r��z�����1 +�/ ��r��ư���HH�J�`��(`�����3��>�2)�;� +�]� �C��& +�S�C��#��uj���+��N�< +D�;w���Ѧbпÿ5o?g*��S?�d0؇�������͠X���}X~d�|�}�&o��A�������j�Yw�d:���:�X]�B)�����v{��X�w�u��*�U�b��'���������r\�s���|���%!�aqaa�_� � +`� +gP����|*)%Af�� +�n������wr�VD���1Y�[�B��'�F����J����t�V�n�����je�Z�ƪn���Q��������ܥ�H��� +1AKI����o�ٻz"����C���c�lV�)����_�0 +@� +�? +�v`���>?7_��� +��C"P~�2m�Xݏ�~YD +�7� +�;�
���fO�z��;������v')�
�g��{i�t��s����z���رW�[�]0���a8���e=]j[7���];� +��Hs/�����@<�أ搈B��s�7�N��cf�z�b�� �9n� ?�X. +p��hx��>�Ɇ +�� +��3 +c +|I����v]� +F��=;p7n +٠ +)�_[��Le&Đ����L +~94�D�Q�N�&����U�6�X��N�h��F��e��͖�7� +���ب�e]D�-g}���AO��>�!hWɮ���`��C����bv�7���;���~w�ΞL ڻ�$��1 +�lw�/�$:t�#����?���*�wX��E%1� +��.>[}, +���-1#cG��&t�0`!�l���D��"^���61?
��f��y�è���Zv3F{��l�ўN��K +�p��'����G�|�ݽ{���?��ӏ�����>f��DyP����@�� �ŨQb�MS���^x�[ +����trP(����(��`�L�u�I�,2O29P�Z�)�<��aݚT�����kG?$K��u΅��?�^{���~��Y�Z��?�fh���XHgW:�s�i"��}c�( +���+�U�!h�O7�ǂ�o}{�W�0'�֝V룏WQ +�����
N� �� +�-P�/@ЋU���kw��VV +�h�$ + +"p6g��Ε��*C\�pw�ff��3��zON��T̐xr��Ym� +X��e��:FzV�\�����BǾ.�������z���� �uNVI;�I��+TOOЬL;َk����Y��{ˌ�����g}e]�4�(� 鎌�~ۿQ��%⎼>G�����^����kN�1���o;s}�8�c�����1`� +��~y� +h�Q + +�Uk��2=㽃_(6:2�G�{g�]m�.W3:��~�gjѵAFnP�̕K�vzH���O^�jm�ǵ�li�����=�fS�&��u�ʄ�Z��PVT�2��B�-S�k������Q~#���ML�f�p�J�t�P�Bl�~!��W�����ɸ�,���sY��4����1��[ �a��#�v�����ݜh�寮����g>��Y���/���+�~}�B��Z��i�V�WW[�CJ�aS?�B��N�;k��M�n��U�����C�cHύ�������*�x�����*�@�Շ�"�?cR�k����ym��%(j��5f��hkUH�����M$_����|.�<�5߮*]6��I��-NG�����@op��͊��H( +�x��a}��Z8��s@�{��:b_1f����v�}��#�eZ�b��bޙ�j�4'���-�����ӽ���<�В����yo�H���G�ҟ���J�.ZX��������d=L��;u�%���Ra�T����������^& nrq˟�b(�_��l4rW�cD�5�w�͐ěW���,SD�g"J@6-��@evcJC=���]ZZ�f-%Ա����Ǎ�ê`��Ek'�Fk�(W7T����^��b�J:Ε�)ɫ]4�Q��r�22�M!�l�^��bX��J%��Q&��z�<�1Q�Hu�ө1����S 맛bF�f����i�4&g^@�(����pZi�?������ +@����������<�����;4Tbx���J���\Ӈ~$ +���?��Oo@2��n J +�U��OX�}��oZ !V�F,�@o�F�� +�},��h-��֢ެV[3��3q�c.L�E`V�IG��ǵ�II�c��x�tQHE=�W�χ5L4N�f����?� :R����d$�4%jd�������.V�7ܬp����v�_r+ +@#~������� �Ġ�����}�0@t�� +����Q���Q\q��/&�� +@�w��gVo��| +��s��U�I=�FyƮ|Ǩ�pI��z�Z��~2�k]���:�
c.���T��=�g�]B�k���כ���w�U!�S���9�-4��6'<7 ����>A +��� +�����D@?u +�'��R8��X�+]���r������j`N��f +'q
�ǎ�L�|�@��=��@^���-�L�ݨ\���� +�(n77F�(��N9��r�Q + ����n������ +�z�I��*��d0���RP�8��^����r��� +��Wo�@I:��]������������W�.�Npu�<y]�|A +���x�O��M
82@��d~�2����,�8PыxRN�Q���� +�o��� + +�hP( +���qH�~0�g]f
� + +@X�Ȥk�
����� +��gH +�������-������ +�xƙ��n���Wϟ�+�.�OS|���?䟀�����~��%���/%TI����v��yI�zz� +��b��-M������4��q9���)g���'K%҅�" +ۅ�����{.�CУ��S�aa���p�tA`��oT�
ԫ[/�)FtK�8���1l�� +�y�I=��9�`D�Q�*B��t�n\�����r��j#Ye���e���C��q�V�� *�'�|��� +2-�1Z� +�"2z�Ruuu�~���`�E
~��B8�5�>&V�� 0�%�422�KO�wgt��?����y���WB��(���\�\�r +�^��$ �<�X��1�@X����ꁮ���� +0�����"��i[�n +� + ��� +��>����d������hF��>�g&!��T��־� +@9�<a��Y:���!:Gg��Vޢp��<e + +�V� +�� + �j&p����@( +��F\���kdsV +������]NV +��s?K�1����@��V +�ϟJ��uY:W��KB~fF�����D���~ + +�7��ۿ�� �!��������m����H�^nF�#����s(@E�� +��Ԛh��Ӫ`?� +��� +���(��,�w����^���9��.�����N�[@����%36�V +���ww���:�С��p�`aA�-.9p3 +8:6b0k�C +@:f}@�
�@q��������@��( +�J����1 +�~_q +����&e����_V + +@���z�F�E����
+���f�V +�r&�.��Ąa�ќh���iX +��˥(Hq�f�m�R}W#��"�Ț������[� +�p˭ +�DK�K�`O@J����3x� +@� +�ڎ��3A��; +��չ!��J����ɱFk�;���B+_m}���OZ�3�4�������[�a����u�Vkn������f�]~�uZ��ٜ.F�F�R�[P��{��LFAf�r��ktNU��ګٝ�������~�,�^��nM{+_��ua +0�1�xku��(���aKK��oy��3b� +�f +�7����b=CG�,p��=(��SH�|�M��@j[�:����~�Fpz%��I��Q��:[�*� +��s�o��9���# +�?r�# +z�Ơmm��(A�Zҋz�Ϻa�;�
�F�������,������+�mf����,[�x��|!�����v&�~���_�����D +�������aF�nۡ + x��q�_�a������ +XT��b���<�n���e��k��:ۆ�.����-�pw�F���F[�tv�|�w� +@' +0z<G? +<�& +P�s��g7�l}�Bq�m��]U +�������8�V +�?���3���5U +����(*+�!���6B�� +�K_|��nW� +<��e<��9l Y�s7�Yy:泫� + +ИߞL�` ��D� +@�Y�����/?�,������s��wW�ն^�~%���{�獊�\o ���D +;��(V�71 +��1��ן�<3�KY��B��0@�L�;ڭ +�������6�bH%n����/M +G�Y0�C�A�j�٥|�}� � +�w��O�䭼Z�+>{'�u� +���C���i�u�ʎ���&�\v +�y:� +t) +�P�u +)}*Eb���K���t=�/@v6rx��%�|Rڥ�?~�E���� +"&���B�zQ�� @#[�ȷi��� ��q��q�������� +�� +�މ�� + +����UXAB !-}բ��ҫ�Ƈ����ɛA�@<� +qi|�������jU�;55;��0|a( +�>L��>M +�����wG��n3���� ��ۚ�,o7�w�����:�:������,,,�F��V}(�%�{r�f��ΣV��|,�]�_ +��)_@�迠�s�s�9�G�Xڬ +�U��� J��H#��,��%e����Q�2n�2;�LL + +zZ��Ͼp@R +2���M����6Y�9b��G0dIA��H + �������OL�� +�v! +�w������n�.f��l�腦qs4|��Lo��5}OO�d�^�s���`��4WM��j@�D.��)�4饩|8oP�(��zzK�k��������Bv�����"�;P�
���>�e�P +� ��3��� +�M + ��у{�Kr�i���sDo��Xq��f�V��^xz{����q�Q��>ȩ~���q@�+ޡ��T�T���p�;}&)|2���C^���g��$N{t�͋��6�,���R������?~����侀��0�3������ @�ۄy" +�m���s^ + +��5BM +�|�L +��
�NHI�O{3�_�&���W}Q�H��_��:�kZ��:�ޕ�k�����{ۦ���#�{�+������G�����/RO +��!���.��L]h�U�����)���4���QwA�,�wf��rd�V�������φ" �=�<g�x����c�s��ӯG�~W? +��T��#@������; +p��IwN +����y� +�u+ +�; +���c +'�1��� +@@=ho��į��m #�ŀ�Q�.��0`&t���E +��P���zp�2�~f��cm�~ +�ч}r/WA2�(����=�e�c�XU!���F�XZ]��y�Z��G덉zm��f*�L>,�_'�,w�[d���#t�0�vS�\�և�j��f�ڸ��g3�%��;��F�M� +��:��H�q����_�C_��F +��j��8���,Ҕ6���
>� Ա= +�c +@B���RsZX�a�5'�|�����<�O�/���˛��?]����~&�`���W�TC?��U*F.�� +�-B��&g蛈J�YB��\���_��ߠ��5���AAE�b,��l#WV���p�掂4/ ��'�C�<���#�%j|��~p.�߂�[L�u�y�M� +���]Ԁ��U\q��/�r��*!lCF��m��µMe�b�O�58�̛ %�ź(���` +��V +�xk����+�vl<�=��O��^��Ͽ?���d1���.
@O�fv�w���5'/MNfٽ&H��)�|6�@�<^��@PP�����7Y;v�h�R���l/�w��ڨ\�ʨx��7E�w��WfS�t8�B`*��)G�pA�����~�%;\�V)��3�e^jdc�!Fp�����]t� +��^ +@I��_��V +x�ͼG�����1���=l�21 +���i�QU��nQ$��U[��� ��X��.�9�g�٩�� ��PQ��7�G{������'{׃PAm�M6����Flv�1�;&�&|c�*�:������ ��#( +�K�Kp��7����1�@���T�V +Hk�2� +� +٥ᆠ\B9�<܃���<� +���.;r�h�b�dmĖ W�+��~,�:\�q�D����u�R\P�t��̥U��i {g��hw�ɄFA(�L63�`4W��4��
�5m#E��R�}���K�M$��e1:�K$����텬�؈�*D� ��4j9��s݉�����#�e�x�� +�~��JɁ +�F +@�@� + +�5 +�r�'� �tSScb +��+O� +@�����v@��P +�b�E��5s��v�[ +�5�+Ou��w�wW6���������:��g>����������,�f��Z�� +Q +��b����ڠ*��\wx�:~�2��DV��\�Ѹ�k.���F����sJ5CA����� 33Z�nB9,��:�Q��\l�j�f +�P�w� +��_0��?֍�� �Z/7+ +�{]����m� +��㯨��)0 +@v+ + +�fE+}��c"a�Y�z�,�y��6�d! +�� N
1�X� +� + +@ЀP +�?�ޙ��7��d�YG��\Yܩ +�5�}_�1�l@ +����B�� +�?A��,�.�Yo�F�quHs?#S�f�@�z��C�|B�j4�&���%� ��\�{F�)�xN?�N&��f��,pX�XM8� +����3]�vK���_ߺ~%�.܀�"P���l +��O�+ +��Bhe`�Мh��Q +��ݎ�*���l�@xӃm^�X�S +400�ϟ���T��V<0A +�� +^��7�o��V&�� +�$��ʼn�p��(A=ݩ| +��Ģ�t+ + +@T�b��{L��e������2�X�\��m�������eR + +�z�a6�ah��L�m, �'�t�26P�] ��;��ri%s}��j�J7�5�[Z�x����^�l�չv���7��b�t��TQ�p��B�囚�]XR.��;xo�xC�%\3��D5JCd��PQPO��ǽ���Kׅ��(]j�xI����Z��1���G�^ +@�`���X+��b]��pE�K`( + +`�JH +@�G���0�c|���l�����>��P +���� +�.�m�(�f���!vz``Z&�� +�c�3㔔�h��' +�� +`��������oo�7 ��Ϯ�M +@A��@�n�� + +������ul�<����qM$� +��C� +j��4#��j���g�xs������<���x� + +���n��W7��
� +@h���w��>�?˴���]{�, + + +����rwy~nZ05����8/f�w���u���~��� o�v�wx� ���b>ݖp~b�����8�Xٴ?�ݩ���pһu�J�� +JډF��HA�b����xuф�Nq�w�}u]-�W� 2[�З=Sb +�6"�����
������a������(>4د�B �j�D +�@Q4��0/���+O_`�J�R�� +����wm �0�~����7���OT0|T�0=?'wДMO�UL�+�����8㏶��ߝ�[z����s�I`������]�#�_l˅�����l�6Zi�ono?��/��ˇ_lo?\���+0�������r��ED + +���D9� `4��tJ���l��ʒ�����{Q��76���?p��ҋ + +���K&�I}��T�0�x�}( +@q��4��6 o�^_�_jL�� +�qU�� nU/y}rv6����� +D��ظM㿡�u��eɢ T�O��Ȳ*��2F-C�wvaj�x�H�h�r�R�8��]� n�2�3'���BDث�B(H>��(��L�?c��)(A�o�C i +� ��X�{�Wc����^<sJ�h@�(� +�?��ߡ +0V+�j��mFuY���n��#�jΎ b +@��Ո<xV��g< a�А��Q��4����{�"*}ߕ +��ܾ�.ե + ) +��r�����#�F9�ǞZ� + +�^ +��D���l����։���^��{�i�p���!� +��P�4@`S�#�+k�z�� +� �z�&��
������M�� +LW�����o� + +@���P��L33 +�kY�O"@�����N� +:!���s��ŕe�����Ed�%���������o�,���<zm�/6'�ty����rJ�777�(7�|"QK�k�`����%��0==]�WJ�jmznm�k%�.HvIX�7�YL� +��'��"�k>��]��h �&#� +-(GJ��t���� +po���<� +��$����� +��>+�ƌ̺�s���wOW�.FR +�Cp�-�����,�I��}��?��o7�� +�H_u�&��ﻓS?����Y�J���E +@3ÿ, +�������eΩh�"g�ij�
H# +�͛���߱� +���1��d�48�n�!�u֭_���O�� +�3��b +���ࡃ��[�tHE�@]����]1 +@4�"8�>�2�?�/�?Ow{���?��=u+ + +e��u-�;��۬ +
�d~�)����{ɪ
��R��7�O�.��jA +@{f�T�� +���3�<���oq�\�/��P�Ŗ�C��]�q���l���*�u@�g�q�a䷓�LHo +�Y���UP�:�:�M]}m���b����t]I�cڡ�Q
�ͦ���bth��\\!�iӝھH�/���k�`g0�� +2'ք�5���,�� A��j�O��K��Ո�4_�/6��ڸ�� #��Ҙ;]WA&��R�qBc>�)k�z'�5� +M���� + +�G��D|&�ܚ��ⓜ���1����CynMZ���������TR�u#�a����������oE5���2���P���M��G�AH��Z�:�"PK +�Q9) +�c +��4�[�ץB +@G�h*��J�� �Ӯ�I + + +ce�n��5��1�� + +��;𡵵U(�E}���hH5pm����u�� }��� +c�v:��St�o�~��FUN9Hۨ`�ڏ���1���tC���nr3��b���8���T�ʼn*FN���M�f���F��#F����b�DP�ԝQ +B��[�A��)eQA�?���z�@V��'��
�t@;� +"6����a�^��%w����bJ�$~ +s��P +�����y( + +����[*����fB�����X`��xIL~���ޮ +����,�����T + +��&�y`�~�!:?R����j��!м�p_4���o�GFV�Y�}x��%�-��2h�N� +��늑8R�:�Z"�9 +��Sn�;Z�������<k�?؟ʚ���z���8�-�hyT��Ca��(�|�io�uAt�����oi?B�J A곐���ƪ�� +q��m��"�qq�(������U.�LdF� �l���6�0 +��"�:��OU�GH@� +3u +�?�����n�� +�g,� < +��o +<1 +|�}�M�d*R�*Z,���Tk�L�lI�y�BV/���[��>�ω2��dgu5��9q~��>��X��w�c� + +���m��`�� +��5c +��0� ��� + +�2�w� +�S*�Q
� +�L�r�Ɉi��ԯG�.�pȏw
ns2�V�枽�\��2Q"��ecpa$�Ul8{��Uʅ�0�d�}�WY��L<�N���*����ʥ� +��� +�� +@1����� +��0U�{, + +.��Ȇt"���^Y_ +`�����^唿;��s�
���j��+�������S( +�ї�l,�6���Ȋ�CpQmR��Ʒ�c:�$dF]�Sk��"��j +C;� U + �?��D��:��z�J�cT�{f)�V�@k*h�@,����Յ�,��
6cV +vs�sA��7�m4[��F�Ew����L�?{B������fs���Z&��? �U�k)Z轉��Ñf~�V۬T��8�O�7Q��*����i��� +� +�xu��������d��|��VS/ʂ�^�k>ln*��$L�����H�) +����Z����E�#�)��a~3��j� e�ucc��z�I�>����n�V+��w�����[7�h�y��&] +�<Wj�7�W�GY4?������o4��FG�Q�Ҩ���� ��1P!~�����o�Q[�U�F�-���4pS��Y��+�T����+�mRAv����.�ܶ���[�7�`tuj%�vB�!�@LXR +����� +��I��/{��v+ +`t��CK +��`�% +��}� +��c�R +]�DJ�+�� +���R9I� +���#C���~2�H�U@�5���`vv�4�S��?��5筌㍼�2#�>;�����>�҈��56
����`ˠ/|M��q��r�8�Ȅ��`;�+ +�1 +YC�������ay�D��C�G�璇wt�+���T`�T�-��$����+� +�k�7Z�S�
:^����f�QA +Q�+tC�Q�[��BKd��ڜ��Ӎccvv��}>�u��˼e���Li��ZŞ�h�FA��m$v^)G���H��r�wԮsD�КsQ�,)�Vi��� K3Oi�sY8hG���Q@�C~� +��2U�v�m%:
��R� +���N�%C8n�?�v�0��g7��E�2+�> __H���H�2 +�O*��z�� +r^���ZT9�n~�h�Cs�4U��hR�+[����,:��MB� 0�hQ ����ܢ �4T][Tqg��T�S: +�SGA��S��ۿ����˻��y#��7[��5ݦu��?�7�\4W���'�����w���G�,<�����Ah%H[Fs�3�� +�I����v{�h7 h� +����iHA2���jZ/?' +���b����� +U:�~�@X�l�o,�_%f`��x�Z>���֞�b[��on�����o��iν_?'\l?oެO�\lГ����؝�i5W�N)��#���)�/�{��t,07w~e���*k +���"� ���ts����Pazs���Wk�*] �\��x�9g����Ol��$����4�(��2*q���Du�:��:-�j5��J����oD����~Y���(ݢf +�����3n/`sA��h06X��6}��
� T��rʻ�3�3y��k� b +@0 + +m��� +C�r�g���t����7�w�����r��qB�V�z}C��BC;�ʡ�����Fσ�� +�#$���Y��U�W�թ�*C��b:B)�F�����m�y+��|�gU�"v�����0��3T�� +�
Z8[�� +�[��hr@��쯘T�Z��G���H1F�� +@j`@�6�����2�M�w�?������K�f��~c��L��Y�����:}�Rz5�9�_��T���3�J����_�k +@�������&�_��� +%�9QtbC�j�&�
�����`�|l�oۻ(������Xg��PVh�q����Ӹ.� ��H�C���x�G���M}ȍ��!b�V>�}���Q�g�����V�W� +xv65Û�)qek͵�4��P +����)c|�8��Ӱ��m'�q�)h+�� + +��K?� +�ȝ��p�\�� + ) +�, +����sN +�T`��q��]!~�i s���i���� +��IXKi�No��� +B�1E4!�r���/�)��Zze���/�?���ӂr�*������a��.k(Ew +@;��#�
Np����"T (��!~&���p�,��s�k�td��q�]�>�I�f� +���D�"0 +@u��w���v) +"��;i� +���1 +�N�O-�K��1��f'��xb����0����웯��� +BY�w,'!����[:�i%��TB�L:0�`C�$8�#�:���K`^y��:��:��~���Ծ� gp�t��*G�����[:�L��Pz�z}>� + +���d[@<r 4'�= +�|�(@F�y������� �'+ +0��h�� +�cCsr�����Gd �}�n�� +-V�o��nʵK&J���q� +`��5u���Y�����Av����Q���x�l���I0.�W���N镜��EXVU���+��C�p����@�U���yFAR�m������o}�� +�5 +�������( +����O8K��9 +��8�_�7�l�q�) +�yV� +@2+ +���3OC���剈�O� +ГdU +��7�` +����ϔ0�Z[�ᆬ��*�����JuVPi��M���_Xh��x�|�X�pH�hл>� �ڥz��+�N�"�
DVJ�8itF7��X"s�MYsa��.��s+m5��sQ�_;
�4�������VQ�7�fݴ1b֛�����?��P +���XG�LR + +X�[���z~w\�Z�vL?���{����� +@|VP������|Y0�c����;�� @t�C� +�� +�`�Kp��G��o+��w +��:�C���{lU + + +�v� + +�3���D<�*`�
���Z7���ڨ0����5��d&��;Y��7�%Y��� +QI�S��� +�!8ڠ0X�i�m(�R�G�4\����k|��v�O���,[N����.�)�BC?P�KEA�g���R�Ff�M�@ +@�/ +Y���/�F|]�Zr�������t"�o 6{�O��1y�� +����ю08ʄ���Z�_z*��������ժ~�'=��B���ڬ�aS���댾��e�B��l��e�cR�3�J2�l�i���c$�Y9��:�{���ت�.�5^����oZc����<�~Ś+���4�����7H��U�k���� �6�[��[��� +�G��=� +��� �A5ć� X@�n�ة7Ǖ��sϭ�
8�~���R�� +@: �H�@uA� +`B�)�\iZ�_��`�=��T��Z2v8�����*�"� +���!\��n�kj��FknD{�#�� +�J
�o�����7`�����$��<�k��T + ��-?���,�w=h��0T�&Q�� +��l @��#���3�ӳ* +�.�� +@�.��f��Yc5$������[`@�$@����R�<��;1������ (�Q��OOay�������c�"�� + +@�H����`[���ʶ}���@���wF�4s��
�s��n��YA�@��+���}T��z#�A�פ�5��)�+��I'��22}�� + ~�3�7��� +�E +� + Mp����"��邤�P����I�7 ��iG��� + ���>���� +U +ͅ�N�� +���R +�0� + + +���2�
�+1
�>�D�(��d��8Ez�<A +��o������^�_��� +@�V +<;]D +�҅q�$@'�$X����$�&p�҇�K:��P +�P7�60�fY�|`@`T�] + +� + g +�� +����W�����G�#��: P�).0"/���0����� + +`k������9 � +@��f��� +R1zX$Pn�A\�8Iϕ� +��Wi��p��?X>�ѣ��e1 +@���m� +`[? + +����^����W�G +@0 +@�2�,Zc X�Lxp� +��( +��w���� +�ױ�b��F�� +@"r��K��E��K� +�ߚ +�� +�0��(n VS�T����O?x|?Y��
�M +��������~ +�u�m�v�[0 +��?y��?�B������� +Y�0^����c +�+ +@:��N�iٟ�����~r�B +�� +��h��G����>H%|�dnq��&����:%Q��/��z��#A�1�r(�2�H��������=h.0�� _�MI�'Q��� +B������[ +�P���hjK�'���P + +�/P +��2me+�oT�sϭ�
��y�Zf�����6�S@[| @���i��p�wa �s�v�3�3�џ��P.R���q� +�>[ +�ѧV +�������fȵu+ +@�>bO�@� +`s� :J
��: ��;��LH����1@J�?H��X +�a�*�r�p�p�����&���h@�O� +B%AG�� +�>@_��F�,�H���T@-�Q�ɖD1��Zy"�=���"�/���;j�z<�憣 +�α��� �Ӗ� +�{�qߓ[ߥ +��(1�� +� ,c +@W+�m1 +>:�z��A��CE�:����"��2�-V<�O��/�����;���A�# + �/���t.>��?t���80PP���ʽ�������+� �e!2��Ţ��R���]gT���p��'V�ShN��x�m�q��)�xDE;De�������PAe�3��AU/�i=�BQw�x/d'��bq�= J�?�@�T]Y]q +v3��#�6���k�.@���e���@t8z\�P +@�� +� +0�#��HF��7��B�>�'�%�ZJ�^&���>Z��0ծ���1 + +��s@���l��&��y}%�v$�w�Kɴ +W|�)��vΐn�L`�Y~����_��},��#Q�|�˲�o>�l���i�%�|���j�!���P����@���U:� + +���L�� + + + + +�>X8(X.jU<X8r���#e-mѪ<U<r�\.*��:Z<t�x����g��;�`_<���� �C���>���A�K�\T<x��#A_��Ϗ)�J$�!� ��CQ�)�a�3�#僃�3�â�g���T���u���.�gt�brN��id������~DI8GA*�Aj
�b������)Q� ��.C� ��}G�\�C"�<���>B�:G�� S*��}��۟q# +��? +��?���F�� S +d� X������6� �[?s +@|��T"=ER +�� + +�� +gt)�Ḟ��QA,䩊���r߾W^q��E�\B���x%�� ڡ��k�Cꌋ�݅�*�I�<$�Ę0��<��A��@� +0T���������{< :�u���[w���۶+ +@��ZW�T +P`��u"�ڀ��)�8�1 +`[? +��#��G��DA�
�s�e��FB�O�%��(O����*X�8��BoD;��#�EPT8�1LoURV�o�_�Fa�opFZ^x����ٕ�q +��/�*]�F�h^��D +���Ҍ}�� �c + +�ȂN6�%B��Ð�V +�B�hE+��V +�$н|��#SSA�3g�����l�tl���M%�մ���7:H���$���j��psr�B������ +�-, +������ + +@h +@O�����Dk����{�<�;|���E����� +���[@�� +R-O9���oAz�JI:�A +@�� +??�b�bGk�PB&�X��� +�o���o�l�*b +�1J!+�JS-�!��LP^� +����ʊ~V\Y��o���"0A~�����W" +��В��B������ +p +(�V {���7���7��Os���n��F���� + + �� +�_��?I +y�8��B���3Z��[��#앁Bt��¾`+��ő'��ny���]�ć��E�Y���:���oi( + ���X�.K��&\�P +K
!Ƣ + �f���;��ܿ�0�h�� +��G��K��t�J��p + +r6� +(# + +��^V,�@uv~����;� +���| 1�0�T��hT<���|���U@<`ZUKe�<�YDwA�;Ǐ�����`� � +�t�� +����� +��'�`,��� +Cӡ�/�+�)��+HL� +^�}������ �`J�ȶ>R:��:t��q�,@�O����T�t�'��\����3C����@j���=-W +@y�� +@�(�-���*�R����u�ܶZ/�jF�y�p<@'��T�?0H�,1��-�k�� +����N�)�+ +���S* + +��7�菕7 +@`0� +��2 +�� +�M�q!�O� +�m]�3U_����䙺m(���e > v�6H���� +@;�O+ +)�V�ҟװ;#؝1�)����� +��p���~ + +�������R +��7/>?��=~���V + �q/p ���J�Dɷ�\�֛ Ee.��O���x��!�� � +rn�g�p�Z���n���*Ы;N ��U�����RNT�Vu���Kdm + �(��G�E1�^8td�zΧ����:�\EOPW�K���Y�����1U>[�ۤ������� �p�A} +�6��) +�7�f�p���> + +��{�s#��� +@���� +��=!zD���x��t(� + +rc.^���_�����6�����d��j�ߧ�;C���7&����d$`�D�L� �5V�W�W� �Y`��j� + + + +��_�8<@��hMB���J�%�U���OFU�0g���!�@k�AwӅ��[��-��9�zI�_'#��'�..e�R�Qɽ�?�rR�N(����0眝�+�f +��Г*�����`a蕡W��B\G醔T�}t��ꍐ'g�����G�?}�6�6��F"���~M��3T��A�U�a�.2*�w��4��vk+ +���h�����w@wO��"��ta� +�� +��A�����(cu* +���#Њ�јP�i����7ELI������_� +��r�EO�[Z
v}C�X�Uj�j�!W=��j���7[�x�Zv t�T-+��W��TT�w��S��(}��.�1b�'t��U*��盭��~�����\����?H��.�����j:+�|�� +/�o隬���zR݃Z�z�T�^��teZi�4��x��B:�}S1���#ο-A�J�Zm:����%�{h�6\�Ռ��L�) +\e��tr�1 + +���n�.���;r W� $`@��w) +PDu�8�X� +��� $;�M��� +F����� +p�8��;BO]G={u�_��5�s�fݥ1�(���=c�a��;d�l�o4��k��&�� +t�\F��9F��+�D�FkbV�4�h���f�Tc��)g|R�m�|��X}�6���Z��H����1wN�����b�^?BgD�LJ�g���{������k��yAΞ=[��Jz�J�=�g%`f&��df��6P(�)O���ހ���E\��� +�h� +�����G;x�� +X�f�2K�rLnwv�ҳ�r���3G +�X���9;U=S�n7Ê�Fv���H}�1��8�d���-����T�FYPOQ��G�g�"�s)� �y/H9\]�ʰ��|8FJe�l����s.T����¾�F܈�>�z�zos���0���D +@�8�����O>�v��%�F����ˏ���&Ӄ�sϭ��]��Ǘ�����AX +��\׆Y��a[c +�,�7O� +@�) +@���h� ag3%�� +�� +�����n��:Ҩʳ��� + \��0 + �(`��o��0A��+ +BI�i����@�P��uV����^�� +�i�Ͻ�qK��D:̈\� +C�F�TB��=~c��Z�n��@� ��0 +�z� +@C9�C+ +���u�8�/�>�@w=K�C�h��.`�����2@�@?@�P +�8 + +��r�\sn��(9�|�%�M?2[����(\���,����if +�j �XR +�b�pÿ.� +�@���C��������� + + +����g�S + +@� +�J�(���!� +ھ}���٢����S(�} +�u�/� ��8;^�wi`l�E� +"��HBd�.�fgkb��� +��e +�7�?,a~� ��}�ɕK���'�?uj� + +@:���w( +@�J�&�*J��p���N=z��K�O��`�X��*��MNRp���lԪ�ɱm�.�j�?e||��+�S,*u}�B�|�2��; ��+��P���������xȵ�V"T��)�JU��Zm����8U��:�Z���{�>Qɨ��N�̯H�
�M˃��?�?��J�f�%Ӈ�& ��Ye6Q��^�OOT-��:\-�e,W]NLY�;kQ3�hlގ�Z��y=�J��ZYl���?G�.n���R3~b��/�����+�w��,� �g� +�/���Ȼ}mT`����8�O��Q'�Ӷa�M�J Z����k� + ���! +`~����x v5p(�(��������������+��]��V +BO�%" +�c +�r� + b + +�=4(��43�j�3����tn��l�Έ�5*���Jm��J���X�>��0��D�I�����u�nyz�Jo��E`w�L��.Js�r~N�C��YX;�F�Q~�^��wx���b������}/���9�[�2���S�wX���U��0������QMP?7��������&Y��l7���a� +�>{�E��t��E:������" +�//_�0>�.�" �P��o&��E'��7`�7,�@�T�X#%�5&L��GMZ��M��C�Z[H� + + +�Hl�Z � +C��Ⴞ�#V��g���xQI��/��Y��A&�f� + [dk�Sy? +�� +�]ʮ9�~�-/��/�}rM.���4��p���ѓ�� +����?:��0 + +�-���@�� +�ܕ �/ן�H��1�|��_m���0�Sn/ +@߭ + +����&�p? +�.���7� + ��7'P��I�Vh�m�|� +�|�R����u +@ +��� ���P + +�`/��P��Ȣ +@) +L +����3� +��V +}g���L^�� Ai|ot��A�V&F��A��5 +�{������g_h��0�,7��P +���� +C�ʳ+�76�W����!Q�� +�
�,!�����&��3�����5ˑ��� + +@� +�q7�*nrF�(<t + H���? +��ʵ+�b +�8n�� + +����T���<���Z-Kӵ�|mv��vA�!Yε + +0!�_L +��V +ap���az��6������.Guf�Z����/�%]����:bF���\���(SD�%�C2j+gU,�7:Z��#��G�D +f�V���$A +@/������-�_�,ܧ��ɋ�" +@? +C#��i����d +d��tء +�� +@K��ǂ���<9~!S + +��` +���+[6Hӭ +��@���6�u +橌Y\���7[_}�5����/����˵���o��j�� +����o�{���M>�sͯȥ�[�߶���o�� +�b!u��P�
N�U�K�����z����2�E:�0eӿ^D�h~ch�4���:�.n��࠷��r�8w�C>�!��L�����%����+C�u�j����ʏj�k��i[�2]� +��w�ǧ�u�x�Tj��t��J�4��?S�� ���D=_AW����_��o�u���"���6����. �3 +��;#�:��k�;� *���g��U���$��W7�YP1!v|���D$���m�W���30 �k�� +��cT`�@n�b��k +���[$�� +�$�#���V�^tlz�LW6�+�+�����8@�֍�Mt�� + +������͇��Zw�uC���`uR +`��\) E + +lG��bХb]�ϵY7���.��}a�P�:3\n6�V��KUVB
����ʹQ�sE1�X�8�h�J3��;g�3SJ}�� +�⑃b +@�@�� +@$�Ž�J��s�"8��̄�Nf/T~h��i`ڼw�W����� + +�S��눌��p���C_}yHf`��Iu
i�����t�?YTt + +�6�� +�i �ʡ;�#����!�`#��p4 +
n���&�{z�������c +��1 +���g+#�c�������K�1\�l�iz�~]/lz�/����~Il��S� +�/��O���p�]x���s��v�?w]p +T�֑>�?W�ۃ.��f�5��o�t��J\nb���-���T�}� +@� + +@���4(�� +����e��k�����噏��Z}c�m���ɇ�?{i�U��~1>���J`���C������#C��?��X��88��@X�zu$|�aa3�� + [��u��N%��{A ���F*���$&�qu�SS�ӕ��I�H��MW
����d��~o1�2� +�; �� +�C���-�=HP�l�@����\�(@1�4@� +�G$�����Յ��i���ر���H�����`m�y�����!��� +0ROW�
ۓ�P>6� +��?9�h-/���Ee�G�/qfFLX�y?��w��Y�h��_�O��/�����[��P��,) +�|�S ��H���_������ + +�)R_(c +p���s� +~h�c +���?��!�&('���U�ܠ����� +�9����X��uW��WV���������tI�ߑ +�Q3�4��4��ǾFv�Y3����vk9���*�J@@v� �Ko�Y^� +�κ<_m���h��j*���Q��f���m��H^������ź:[��>=��c�����
�u��1��&A���D�O��
q�qF�㺺 +a�?�OE5h?9?Q�"k�{�2o�bI�����|\��U=ghCZ��+ڮ��@d��{���w���{35����jL����a���\ + + +��V>~�D�^9��H��Gz):�F�`�`�W�D�6�� +�H�,�EN V �<�����4`�i'm���{�@�� �d + +�. +�V5���,č:I�]��A86d�Fu��>8� +g�c���%�:j���1�ix�����^ +*�{�ow�[�e��G����E���]�h�g��� +��� +X�0bpP +q�= +��6��[�k�f� +�_ �/(G�,@���)F�
S1E6:o���`"At[�|�N��I�H�ĕQ�}�4u� +@��{�u +@L�
+@���=1�W�'���JM +��yR�,�� +s3�� +:m���/���Lg +�������=��ߋN +� �)��?64�@p +��~���@@�� +q�r�X�%�G�t��A����w_e��K�c#��"�����X��Z}��Q�?� cW���F���� + +$���q�D5�#G� +��#A\ne�lH�f�:
Q��t~�����( + +@ u,{ +�. ����m�;��@��u�r��T'f��[[�� +�]^8,[@6� +�c + +���� `? + +�|����~K@O/ + +�sQ���K��% �&�\ + +����\Q��Z��c +���T}�����{<���|"����m�����Z{��Zj���]/�S4 +�����@Mr73Tt������A + +\J���
�����y�H���ᣇ��6E +;|�4�*^��;r�8 +�����Ž +����z�e�� +�J�h���WB�k��@���� _��ʏwi�X���&p;�W� +@8��W,; +�����}�Pezz8��+'�p��Wp��x����/nn�����G�q +�
�2�.��@�a'�f��)1 +�|�1.�e�d�.sA�`\$~`������lh��� + +�v��oL*��7=�D� +��E"�)��m8����Zm����/��ڼ�CpwA��N۰�" +�������� +@��ϴ��ӥ +�<�n A�3�����P��.@��p��W��O�d�R�fV�=�;>&K��ɀ� ���P +��g��e�w���٥���,m�t�3�u�� + 0t�f�} +��eq�`��uL���AVP���{�۟�D��0|xx̣�q��� +@w�UU�- + +@� +'{���f�r�q +ӏ�6>rd� +@x��x<H*`/��р��f���� +��� +l``��\`��m���YOHF��Y� �uD�[ + +@�d���?�n^��_Ԅ�I`��Szt� + + +��V�ms�F�z6�-�"���S��-���٪���i�X��D_y����e�?@>�$+���5I0p9]�������'8 #��-"O�'���8W��:vx����������}�ʫ��8q�n�Ǐ��/� �uk<1�m:;Y_�.Ш� �-��.u + +���w�����#6��s +� �_β|I��W�o+Z +��w�� +��um�v����F!���K��@��sȐ��0{7j��
����vR��E�錍����>�SN*L��M�F +���W�0( + + +@� +Z�6p +�� ��2���Ȟ�8�ڐ�| ��f +&�����O�cZ�t`�|���U ~ +��Ӓ� �a��d��)�U�y� +je<=�΅�x����� + +wk�^�/8����iS`�4�tU�"�<3y��p�I^�!B��z��͐���~��=03HE�X ��R�7��כss�F��W7x��vW�8��N� +��?
���n���,�����E/ +$�����V�P +=
�XU���o���~�ݓ�8�^U���
q^*�C �G��C/)Cݛ�L��Y�&&x>y���eU��u�uc:���=4n�w��T��˪~�:�t�_�#U�8����\ �G��+�2��9��%�Ԇ|G�'u��++��~$ٜ#*�xuN�En�md�N�2~g��d.���|5��?4�l�o��i��r;�
,w������ۍ�?���i +z
h6:���%�R-J��Ytgϧ�� + +K��%zv +�ǝ +S��z> +l��ֶj��
��|�@�!���J�1�Y�������|g1�9 +�(���N1 +�����p�;#��<�\ + +����{;"�kb\��ն6s��l5ϙ�.o20�b��gyks;�iW�o,@�z��im��4�,�����*����f���Ԕ6��e����u�%F�g�a�|�1�l�Pw�E�K��9%�}�����J�gyV��@i�[���2&��8_�t2ki��M>�����_^=[Z�V�NU���TN�z�AE�CO� ����C'��o���Z�Vc|&��m4���Z�w�����U����]m�tu'9�n�@���$f���i�+n� + pԹ Q +��_מ���ݔ!���Ս�{>�`H2u3 +��MMO��O.d���0� 秧�3M����8����<� FѤp�m�.�^Q ��M9Z1�/��UGGI�dU�4��ژ��dP����E��}hI}��SS��^��i������]�� +��Y�$ح�U�5U&�R�tR�qX���<[�vVܦ�(=? �`�{\�s�L���U����k}w� +�.�-�� �R�H�f�W
+����b�Ks��0�I��oCH�A`@�(Z��������( +M3���B��
���M'J�\�j �+�_�˭%팜90O\kɆ�&�#�MR�&�NRz;���ʼnŷ�s�˝��21˘a�b�7Z��n���Xt�� +�l�֔;�]a~i�^�d�k� Մɯt��ς�u�����I�f���&�ovVX!@P���H��-|l����BwD� +�,��~�nk1{�|����+��B�������ݭ�[[�"ҏ�3:a�=x��: +��߽@1���-�e{�@���uV +��c�����{�:����@ J�����P�]� [:���:���o���Տ3E�H�s(���9������ +��� �
��X�D_��� +?�P��6{�aI�6�߉|����KH�O�z�� �du�eO\�l! +@���R +@'��2������R���A�!�l�LL;�U�����
�@'�S|�2�Y+_$ +o�!�l���G�!��9U^��Օ
���5ݭ� ���>�(���iB�b��k���I;<���V:��\H�Ț��UK�x�1���Zo�څkc�������}���T��B�TEQ �6��ʢ���_���?����no��䓞� + +@�V�v�>!aS`L�r}8� +@" +;6���
+�m +p7�3���+�;y�X��)Гa�-��c<�3f����8i������1��Ĉ,��oy�c�+㏚:�� ��i�B�ҡ��-�\F�d@a[�Q�8�5Z�V��\�'�@/�Xd.ue�� +�j���H�6�ju��SM�x
����'g2 +�31 +���ޱ���b�1����Ċ&�q�``z8�G?�|���zۿ�߿k
`k'� +x�o�`��P +��q^�����L��q +�/�?H���Ǵ@1��lp�( +��ti_��p�`(�u�XJ +��/������g�-���/����>M! +@��q�}ߟ�̆i�� +����Ԁ��OK����L�g�T�bgE@�-6�l�z��5��)��v�`��i��9^�ԣ�1=$u��������oo�Gf .ছ̞���|��D�۸n��A_G +]���M��ͻa�z��1;}��UJ�X� +q�K��t�d�:�p��� +@�k� +L��I��@W+o����:p���J@��|& ��4�3`w�� �$� + +;�N/�R|_��N3|��o��v( +�>�S��┿p�\�h�� +���x��|!*�"�'O�@������|�1h����o��1 +�]����z���ft��П1(.�*�t{���Qf��_�Ϋ,� |U�<P?=��t�e�aa�O����9%��WǢg� (�����5�*^ds��nΜn��|k��=ݼ�qw\Ȗ�[����&`���%�6C'X�{����T@���臮����?����������e� +����b���F}1�߱88{Ɋ�(���=z���ӹ0Y��&"�/X�.���� + +�� +�~�6��[�+s�Z&d��l�s +�r��}�p6� +��ث7��L� L�3@� +���/c +�05���&�m��7�[++�:�}+?����+�a�P + +�^������W/�N@�\ +
��9 +@w@����7�c ����O�H�a� �,��R,
Z� +��BA��r8�Fh}��P8m<�x + +@�o?��m����P������ɪ��z��Z��T\�{0�+�,�ftp��lm=��!ǝ#u> +�VI88v����H��^ +���^Hs +c̻K\����}M׀h�'`��pw!�H�� �����lR��lO��l�^�N����LBP�%N*��hB���m�0��6���E�п�P�����I +�y*��λA@�A`��M��Yc�������=z<��w�`����օ���BN���Ƶ+�_Õ�E����� + +��[ \��YpY� +�N��/ +ǻ�~��'�s�rO�E�xT��n�_+��6|ě/�!KGɣ����;T��E�L�) +����G�q�a + +p�2J�ZkwH���n�U��3����t�ڭ�>^�6S��k�v�v�ν{��K�����J�?Q�Ub16�E���_<�o��ߺ�H����D���>�p��ϟ1 ������������@��`�����F�?����:�t�n�����S"� +��~�}�2���}�x�kW�qЇ������-ݥ���b�� +$B�!(z{���z�!�,����m��g���S^�i +�=`�� +� +�w\�����O��ڕ�W�u� +�QM���M��"����;� +o'��Vh�n���z��7����[^��l{����ry��L�;��v�������rsr�'� +�VՓ �=��;:��Z����RF)E+o��b3��ZY���T,"~����ԞQ}��[R�mgr��,/,,+e�.���o��3}.e�4V��jœW��M�r{m�ݾ#2�v��b~�9�I��@�n�x + +@�q����0�������͟��3�& +��:W��12� +�lW�?�k���s���ϼvE��A +�b +@�����O>L��������\�2<Qk +�����hģ��<ybϝ�����o�ٛ^X[xHӂE�lqH��~ {H +#�����Y\aT��o; +�@A + +�����%x�-&��
�2" +��2�_��B�V�Sۓx���3���9'<k�J 9����cL˫#��T�|��O�6�7����go�e��b���qbJ ��\=k��o +xsr���S\����]vm�w�%���K��d\���v���o���� +'� +�ճ����SL#����'Q+��"��g�Oن%���$ +@���yo�Wſ��j�RF����0j@LD/�W�wd^i�;��s��4�!)s�Dc��C + +�`�M +�& +��������Bc!;�P�E +t��Z�x���t�S;�(#3��B@~�u%8�����|���Y�P�_J���l1���������o�l0����\( +@�:@F� +�Nw�#�g�g��=)�%��"��̂%�����?���56J +e�n�͎l�`(&��N�� +��L?@09b + +� ��#���=4�v�����/ Ǘp=S�Եd����?�p_�_IIPG���,*��9� +1 +�P@�o�<m������ +��X�~�v#Ԇ�8�����8ř�~�:���� + +a�G#Ep�#�o��ߑ'�g��#=P�H�.a�G��jCy�Nܿ�����-���g��}�����G�}��I��~�+3 +Ѻ�Ħ�U�#��4C%�<9�@@������ +�z������n��t +>w�g�l@��i��-tb +�,�S|���� �v�:�|wk���� +��3��b +��� �kZ`4Tw��v�܅��L +�勌Ct����� +@�@ +c``�%���t��,A&��zb +x��������K��M��q}A�kg;I���m��->uR��;��ӽ�k�j���Q�Ш�w�ԉƷ�a�;|KO�F*�*�w�M��'&�X+y�T@��7#��*Mdw-��wG��s��v��z��� +jjɶ>�|���]��O�B +��H��
�x�4 + +��5n +#��ۭ{� +B�ڇ�F�{ۈ�*R>pS��@���Rx +P����������{�Ȼ�RkE/�q3S!Szd�q����3�g�=10�p���=$���;���`�A�� ��iex�7��?��5<ߺu+p�]�A +���#�l{�� ����M�@�G���n*p�A���r�X�"�v��Ol���֖'*�� ��L�&x-��Ʌj�*Ac���� +"�t��ј���T�?��}"Γ�:���P��`����~�l�e���'g��י�6�P�1������j +;W�Kaz`o�.8 +a�Of/yPC������,'�u��j�;���������\�t{M��-���zc�����D2m������q�!��u7���� +�WW��������~�� +���� +0�m�_>J�$6H8x `������H��]�pke�2>Q�L� +��?��r��vg�Ӑ��`=#���R�yV���P�>��%3�/,�'��l���^�DW +����D�?� + U�DT"��u��U�<C*����â2��E`Gฉ����&�c�A���i�Ito�=Pv���{��h�B���@2#Z0��0����w7V�%�>S���W����0�QC�` +��'ݰD�� +#n��1�t0�� K� +�(F���C7@��+G� +�2K��Oز�Pa]��,�?b +01>1A����]\o�O�1��,nP�2���z�E��t���kކ?�1�̚"c�@�A�h +��~g���7S��&��LT�g�T���.۾�� ݼ����y�Z�]Kf��U��z���߬��4���������#���v�����(X����?z����|��29Ck�si�r�����պ ���f�f�c�� A��W��#�Ç�_�_�S9��<>d�m���������W� ��a)x�ٲ`�ߦ �((D����i���gkw~����G;FB;mղw�����a +�u_��6tf���ϲH��@���K�z
�i��� + +�g� �������U��z +�f3#C�'O�0v8Ӈ����r@����Ea�#� ��#�b G|S +���̄A���0�+�� +�c,�S,�A_��?�w��`ڋ؎���z��W��g+�*g�˂�iC�����7 +�1Wh�2}|H@f�@i �K�o�|:�Nh{*��P +rK�"*r��Ĺ7u=b��д��{X�yU�bb��/�?yr����m��V��}!賄��������oþo�o{a�P��#��O!��`C�9h�/'쟛˾�$���Nb���g�+v����: �x�����N��h�l���� ����McuP +�.qf�ky��O��\�>%�tm( +� +#`a +p���3C +��+�� +�0�P + +��"B~�y��� ��� _�QF� +�i��`�l�������"�Ô���H��D�1 + +tC��w +�U`� +� �(D���������څ�8�_=�@ +���D��tdB0AL!��2�.��␌m��R^10@�"��M���������M��3y��C�0�YP��#��R +@8�`�O�:A��֝ +���o��lm���=4�_��Տ�ɓ'�i�φ���ՙedc��c��>J���ɣ���l���V�|-c�?��3}����V+���a1V/O�G[+�q�ff&f7�?��D��W�Ch.2n��-���V{}݀n
�i�[Y�� �#��8�n{j +@���D�u��Z�N�
��S�T��aǎ�`�^�[��} �"��Իk +�x +�}*��ː$�x9�
�*j!#����� �9�V� +@~G�*��~ay�m�j2&�[��vgyy!���/+ݞ�ם�$�h��F���wSP\���l5|��r��ئ�\Y�t3�R����D�[ �����"�»8w��-T�`8 + +@>� +�6�I����_;]���.�ԁ����J����1�:<8\YB�ڮ�m��7J�� �.�z&�8_�eq��-z�2muw��M3i8)88��`}w���:N6���ecrYM,"��������l�ƛ�ZwZ�*��L�gQC�/��|��wH��!��z�-�k�����4)3�@'�)AO�ӎp�o��g�gk[�����v+��� +`.�o��@��'x���.�e�腹�& +�f%�t�,@_#p���o/�P +9j�fk��5�?������}���F�*G{q�N�:�;��d�=��٬��T�Vw>����r�l.��Ԫs����v��b�?�Z���� +��?�y�}�N��ʼn�D����8��]����Jkuqq���N����zȳ���� +@�� +0@��&=��]-A��������B�a +�{#E�@��� +�`�ο|�?���i.�/� +�,2
� c,�a +����( +|�&�� +�C@؟ ��G���G��k��Ç���ɻ,k�����x�#��䚺7(Tq���1��d�'@$�/���h��Y���2�]e����� +�xޮ�<:��R4�+A��Rt��oN +����骖���\X��7>�OM +8��k�5\���/ +��L�P0 +6ab�c�@:��P��������E�?� +b��jMnCH��[�㑥J����G���Ք�rj����ݣ��X~�9��=q9����|;�����]������sr����u���^��u��^��zm�5|�� .����j�ϟ��H�B�"� +�����B$qX��|�s%I��������#q +�N���p��L����-�\<& +(�̫�^&p��D +�g����|L��{0���Kń?F^w���W*:9�#�Jy�Z����r���g�h�������]>˗�]3,U���A�P=�� +3}$�R66f +;�tS��V_[�V�(��a4�~ +�F�8�H��Q�� +�����ߓ�썘��R�Q�& + +� +���PL��á�z�- +��v�� +�,+��A�^S ���/��@�����T� �)��%�=����s�� +��>������<}��1�ЪZ��v��[Z�1����E�K ,��K��/|�]H�1}�q�R��TBe*;����M>�Z + | +E>[ވ��q�``��l� +d)�g�� �ߟ(6F��[A�F!� +1(ht�r%��V�S]��C^
i��L���Ν�;����+��\�%#�t�R�S�s��Jy~f�ZH2��6b>k�4O?��R�d1��K���L��j��eh�rg��R�Oze~��0]Q��R9*�:}MN8xse�%�_�[RN��b���+]��H��GKW�U��O5���.� +gH|7�dJ��s_�П˴�HU};�m�<�q� :~�Μ���.ɝt'�"�R�쿶1tzb� +�)3��Q����%>�ONH��#��=0�K< +������W*�"S6�?$, +������X +�&����� �sn�;�Ϻ��LN~Eg�rFA9�=���^����t���^�g������W�v� ��Z���v���>�t�c�$�.�V˥�s3���X�W������8H0h���a�M���^���G�o������xJu)��:��D ]Yѹ���Gu!���i��A��V���s�T��p/������sE2*�c��}��,ϙ�=|w����V�KDX���0-n�'���L��&SM����~F��wT�*}���CM��b�E�Se�j��+��U���
pS�p]\�!�6 +��� �{�>�~9� +�% +@J.�is�{I��B�h]۰���B�ƅ����y�FFsC�� +9��c� |$@t��wa���d@��� +�O��0����R��J��l>ջ�[��̔�K�,Ֆ��w[/�Re�tkY +yw���#1��>A���˓��q +q�? ��`X_�{P +K> +`< +)@� +���9gL)O��#�l�y<��I���Hr�;2�I��s2�����Q���7m��|cc0 +@�(K�UlN +?���Ua�jd +�� +@�w\L"@���,`XL�8� +\�F�5�,6��[�����5S-G���V�5j^�tsE4g�^
��P:���yA�0�� +S�p}� +���> +�$�oF<��, +0�gu~斻D�1όHU�lX�H����Y�o����1;�P���Qߛ�r�\�G�]�|@��w+ +�|�H��(�Q�Ѷ�X_�˃ $>0� +.�d�)� Єk�i� +��6�c����,��;�Wc���@jW�� Y.����g6S���{�Zd�� +�k@��v����|���Y��8�k�ob��B+�G!^9��N�X��{�>ڽ�q�� +�ʥ�Jj�1 L2��{�� yG/2${��O�� +���Ҡ/ +�b�~�N�K*#f�@�QcD��ϫؓ +`X�R�=���Xv#� +@�y +9*C�w>�X +��@��&h���� + +�=k�����}��1o���Jw6`�ďO�� �6�]�&V7^f��?�V3�9��rS�I�x)�Y&���r��3��> +X|���u��l����o�� +��� +��lt��ē�2@z����� +�t���(��s��� +?y{�1$��潗$����W]cL{���[߳��lry5$L%ɇ +#�S&Ff �M�M1�U���pI�$-���[���Z%� + :.��x�, +�q8�֙�7� aC�����lkE�?���+V�1tx*#�W�m�t��7��+!Z�, +��'�J��̇��� +0j0��O+�2F���5�K8���'@G����� +�!8��%bM���|����t�+̕'a�:Ϙ���i�8���$��֫w�� +-�� ������ +�s@8�<����a�H�*>�/���Q +v,��%�[�k�u!�p%����k+w��Z&%�.m��V���;h�}]u/���m��^��$���ČZ�VS�ܮ��h"��F�G^��w��JT��㾻����6�]��e�����5��P�;!r�Ve��Z='#�c����]*�_���|Ky)�,#j�Z���xح�v����TX���w�ž������%�����*R�c��s��y�F�a�!Tz��g������Z$��D��Ơс�Z}���i���*�tE(��%�E �vpŨW��h�G�9 . + Y +)� ������$��4N���cHx�e���$G| +@Ki�� +��ґF2���'�����r L�%4F +�R +��v�� ++ +@��"\�<���?�^�?��u��e�0��:*4#�&�Pc�aA��ރ� D� +��T\5p�E + R���z�$�$Z/{$���U�-��UU�� +�qp���_� �|�ɀ� +P�- + ��U��E������l +n3/�;7�Խ�|%u�?
�K����*`�} +�p�l�� +������� � +�����}��́ +`vv`� +����������q]�S��n,��X|]�v��럲�+��@(W�x��;; + �>�F� +`�"���,����ǟ����pC�V�/����Ck��Բۀ���$\�*�圞�v���@����Lb�bXbn +� Շ7k����d��Hn�R��E�������k[[����X�� +��> +��r@m�ܮ���1`�@若� ���b�� +�+�WE�K�}WF�P�R����Y�?����R&w��l�ո��N.<��~���_]�����4�����z��~Pz@Ն8�e�R=w��@��R�� +�� +��4���c +��8 + +�wy�ڿ��4�
&ný����������� +�Վ~^6�0�BI`" +�� +�Ȃ�|���X�DBv�U3L +�/ʳ�F�5��<�(%Q��<j�c�%�� +�����f�� +�����E@���O��`�l��7�'ʨ�p,pN�9���Mt��-�?�>5Q��f +O@`Ԝ�Fc@`[��\ +�� �Z`0��-Y��
'��H@U%A��q�R>Tεl�� +ٻ{�U�6���t����=�v�U����p�C�Ѷ�B)��]B,v! +�+��@~��3B +��L���bK�P�� +�tVBi@�L��n�g�B�20 ["�Қ��.r��Gq�@��*.|ZS6c7��������MWd(q:I��"�x0C��7�l +3����ż���BZ�_��#X� ��W5C�M���| +����`@A +W��(�ݩ�ţs��D�| +(������ +@L� + +���7�;a. +���N�
P��Q +vf�(x� +� +pv�~Dx +�_�QK�I����Q�8O!���$? +TV��6����Ԍ����� �m���cM.f,�L�! +������Y����oќ��aZ�ݱ<0?u ��O=��gf�U��^Xȭ���y�/�B�|>���
�3k�;|�W�z��s�`$�z�� +�g�M-�! ����I_�����_��2�p}` +����Yp��^\��Ym�ژتl���$����5m��P��v�ǒ�m�������a�R ؼ�����O��AK���_1NpYs�� HoJC7�Z�Џ|ڝ�v�+r���@M(�� +H�^�Nm���E\a�q~����\�1�H�OPQؘm�^�\]��OW7��J1n���}3������ +[��:�ݼFH���?����#������W��𫃹�?Lkd3� ������@�����@ L +�BC�!]��k�lP��D +܅�O�8{I�����-��J��&X�D +I��$�ұ�֖������[4:��UL�9Ά�����J��W�"w���$d�������� J�W�멏��r�;�����������yI� ���=�`��"�+�P��(��piE(?R����տ� +;�F]18�F:��T)�6��۵0����+�vS��R�:i���. +��\ey����D +�[ +��m�9ߎ��p�C����D�/�Y�h�:�-�(����-���qP� +�4pb�o~G�MU�����V��m�^��fվ�f�6�N*���J�4#�&05u~�R��T��D��Īr�W��O��-ֱ{�C�p:�Flf�r> +� +V�h2݀6! +���4_/�̫_��Z�V����@0e�;L8���^��*ҙ��& +�� +�=�L���� +�;W�UNw����*I^_RE�W��k�'�DU�>��Lq` +b_�w" +@� +�Q�mJ� +CFwO"�mw~���S����}UG%�ª�H����sm-2��o!B�Ͼ�t|c����(�=�P����mUD⪫"��W��OQ-T#e�'�+"jy0Yq[����}�+h�� +�el�����0J +\�oN��JRU��㊬gU���.Tj�a����m�z�)��*v_��y%�RM��}-u��C�'9����DD����)I!D(�v�=��_��������rˈ�¥f80�Ge��N4�V�\����I8*Y���<> +� +�!Q�� +*u�Ձ�E��@���Z�W�[m��o��D�{��#�GM. +������ھ��[����p��f/�� +J��A�HP���
�Пp?�&�=�P1��r� +���l�G+E�&�n7��>�D�|��+��'ÿ����})c>��i.,4����뮉XA�t�K�ӽ���n:���[��otѥ�L,���hK�w�BS ��n�*��aU�N�j� +nhOY��<�Fb2ķ��E����- +��(��1 +'@��ĮAwL��d +�uKL�xK�tku5���z>���~�ѣ7I�?����a�\���D�9��Au����覨���G~�����> +��C��C4ۋ�-LC�&�*����ud�q�1�����6�j�����.���X\!�b�чm���(��ӑE�Jq�s`
Y�`��~���4�*���^�M��^\�b��#[D� +Z*���R��++J�R���\Y���%�9����25T���Ry�*!�T�J��#�T�Ke��q)�%�`Y�X%b���C���+W��U*ވ��囥������ω7����EL�,Kj9jm)���O��IE���+TD�"]q��ʊ�U��v +��Q + ��߱�o@X +0:���t�`��7��?xo��|�0�(�N�� yH:������- +�� {c�%�����r��*�U*!v� +�+����0�`{V� ��_W�C��� UV�(ᢒ+#�@&B�`�����R�V;��G�ƈ��nmw�!�^[+�B��̽���a@���w� +�X�v��;-����Ľ*�����VK
J���H��(�*9��ۉ +�� +``���_��0���Q���xذ�9�J�X��G?`[{$��݄�& +�PM�Z(�`����ܑ��pg��l*��hv���ꂎb+AP@[��@�"5��m�P�a�����i�*6<��mUNpI^
!�V;�&�� ��um�[{]8tg�֠��� �X�b�qmq��ef"��=t?��n�Y�i�a5_g��b����~�v�'���S�Mt��ţp��$��ќ���ߴv�{�/�S�TX +��i��J��f����4�[[>R�Xb@��õ�1�� �_���7����ؐ� +*�ƬpYx���| �d ro���Ȁ�E�<�;�D +�ֱ�j��r�,�ǀ �z�ZN0������W��҄��T��R\�0}�(@�i!�Ą���L����(���rI�J�Ǜ��ye���.�D诬�L�2��\
;��jU�[�.���W����xB��<S��=���!���+���" +�n]�:��#�Hq�[F��"5�p2�^pj�q�������w�F:ʎ� +���8 +�4H�z[y��*�k���ɫڐB��J�V_��V)����a�8'�
PmN���G���Ր� +2����vs�.�Y�՜��J��g&�<3����zlf��\ױCe�;ڠ[�Zϖ��juen�5���S%˾�چ>�����dӓ��ɘ@�h������B��7P����@$� �8���8u�+�����1�o�0> + | +����yQ�)�L����!Y^������G�]aL\R�A��&y#�ĺ�&ܭϕ}õe@�{ԥ���XD�}i��U�u�n����|sWT�R��z!
[|�PRNUX�m���4� �� +D`�_T$n]�����a� Q���8���{���E'أ�M +F���U����P�jke� +��S�踵�C:g���wVQ��җ�-PZ[�V�'Ҡm�Rm{ ��<w?��o� +z^[r�`��J�m��V����չl����~���ۥP��%)�U9]��Z�e��i�����, +@O<Y +�� +���!sW��Y +bT�n�+z�م/H�~A���Y��!Bq +$_O�K+ +o?,�!�~V�{Em̈>��J��l�oe7�v�K��%5�VT����O�`�5���n�^�J��˼�}!��>�43qm}7�:f���U�R
�gc'��9���˟��vLDw�V]��v���:+�yP��w�|gcS���@ �} +��T��e<� +G�ϣ��^�� +-��,Ѕ.ް���}��Z���݀ը +T���8K����D/�Ѻ�8�]zڪ��R
�o +�f�H(�`�Ύ��� +�m�%Ƃ.�2������E�@?%~j�D�ڎ2s��.If!UJю��H$B��]%���� +/� +��E +, +���)ՏU�<��/�$��%�p��\�a���ktUl`�ke�[�ӟ��Q +:���Vw��� + +�&��H%o(�j"l�����`��j�~�]� +�|��i�5��;B�n�2��d-�r"$h�=� 4��( ��qtR��e�~��ڻ��z���` +���<��HU +�RR1`� +���Q + +`�F�k���� +$�k7e�uP? �>�@��( +�p���/�%��]Ɲ�X|�)�yY���:&��wf���Pߔ�+Ȥ#@�>��zS�]�"�u��R�E� +�����������`�3�NNŠ�g����8@�6��RW����|��2A� +�Q +�Q +�"l +���I����p���.i� +�� T��};�M�������ڕ"�G!A��*Yowi%��AxZ�1��N� +�xf�C�W>��.�sM��x��v��3۰���7�d +C��tg;�7-H�0V��t[�3�ڨ��E�8�v���-�y�}��}]t��s_ma�پ�`�B7С��YF�?Dc�E��7Ѕ������nc�Z���P
lؙ��OG�{"�����J7yQF����v���Y��mu�Pf�1R4�j +%h�˴��Uvn����s���?!r���B�]5c28�PKO�4z>>(��� +����U��� +��+��%�g�絥��J=�~��Ѳu����ܾ��5��B�Z]�,��+�K�839uV�
8%"���^_o��_-z���iK�V�~� +���0u�t���%��Wg�y��;w^����չ��W�����������ʮs]X]����Q��n����ǤĠ *T��M�)"MԄz�M7@D�&�ڨo��J*��߰9����a�]��9�B�E�]���{�1@���� ��s�\k��s�9+���zZq�|U��{�YY����lV7��X�?X�Q���^�E�b�#$��b�wpW��DlՑ;�jL\�^Y�ޢ�� i.{� ���XI�3�?�l��IRl��$g��ԭ����\^s�RIWT٩?p���# �9���l�U���-#!�������7�t�Z_6�?\��w��K���WȚ�oV6o�e�1D2%�tE������Lq�������ϭpp�m4�¿��i<]@\9��'�]h�N0�� ��/v�!���#��Q�r��m5>m促��\��{��|p0*p?Y +���c81-�'��Z��R�=���yt1 +AzPϲ�5��脤�q���4��S���oT�O�� ����3�#6��u��(I���y�)�R��}��y0~p0r���Gc��>79&�)���#�G$��O�g��3!��}��� ++���Q�@`��/4Ȇ�D�"��c��M�[����ltp�7�����O���4Ȍ�<� �qiq�aCn;͓] +�Nu3'@���> +��<[`1�o��
����D���KZG\�ѯ�w~A��<?��b��˧`Sݲn�� 0��3�� +e�c}���k/�˅���*�7�tY�ߵ +^@a���P��b�����i���Y��Y��0k�����xL�D�,��0�w��(�7��NM} +�BS�xy!Y� +��0�ʇ���|6��>��'��j�)kH`N�rY2 +�r���&|xħ
�����G����Z����1(1��r��vM�*�]Oey�WHP"a�H���m~�7DM�|�d������O�p +0c�A>��3 +Sq�<�t�+4��.���=J��Rva �Xpt�H ��rz��C +� ����=n� +�p��ϩ4�u��x�jׯ-�5U�ۨ��N�o�b<罼��h�|V����&� +����Nګ�8�%pUe}�o4\^�רͮ]�&.��4��� +~6/Y +������Ғs�)�'a��POJ fB�����K�2I�|��rR=�H�����Z`B���K� +g$v��̀���Sj;ĿG��� +@��Gb`9��/h�j� +7�g���=�i���c]�F@�������5�P�h +S�v�������`� +" �<��B��C��lb�{��4��ӽ���KU[���N�f�X��6:mxu�]^g(D�%%_; +�İ��E�c��k\� +��#"��BG�������0�;�/8�6��d������ +P�$!�}�`�3�0a +M{�KPSA;�D���~6c�qy�d�o�t����aGp +���sԔ�g`>.[�� +�\������ ++]���?n6�s����f +��P�X +ȏO� +�"�Y�}�6bo�)Q���ު���I3�R +V�}C[�.�'B�*p�0�+7��7�ݻq�.@/�S�����,�F�VY1��:��1!��G�`����6�Y��ik>c(L�'> +p��_|h�S,n$�ą������0�I 6#� +�5=:��ω�4��E�Hل�vw�B^��V�u +Q���_]�����a +���/�]�K��'k� +@L�h܈��i�Q,���l�:� +`������| +�_v~'�S�G���}{�%��,�Uy�s2����@2����R M�1w�n��O��^ ^�fBi����m/�l����@��Λ;��J�8Ќ���(��'�����[-� "jи�X=E-J���A�W�_X�1�w��J9r��lTz�uV
5��y� � +$���9��0��[�@��|�Q +���;G�{�$#,��\�?�� ~�(� +pC��_��p�õ��v�G���+�5�
W�C�����_�F +��l�;�U�q��1��и�_;4�?��`����:ؼT��)N��2�~�P4�� +� +���Њ�nW������4�������ypp��F� �U\_l���j��W)ڴ�� +�G�B{R`�ޡŠ"�/�";�V�q��}"�L�2��FD���!��SDKq�z�d�ve%G/:!h�WB��?�[�~o5�0'� +ȿ��I�>�pEp�|�����%�^�0�]#6�P*4Q@���ЋK] `�Aw�` +^����A����z�og����Eb���s��׀�?W���\��4�+��s�_�R��U}�
͚;{���@�V�p���
C"��G0?��
�|h� ���Z�S�����]���;:3� ZHI)�3��\��Ѝ߈ǀM���L�;�����} +=;��LX"�j����y����ׇ=��5 �������P�7|9B�zN�Wn-�׳�VX������������k��6p��� *�z��]��t��_��Z��#� �0�D& +�ݯ�Zm��ՅZm��إQ�깺v������Ͽ] +̍���[0����f�����B��+�> +��ʌ ����҄�*�L +�]�V�Ru�~-t� +@`����f'���[×�=���:��z�5']��
G��3��֨ ��:xv�|4=E�ll��������h�w�������â�9I�r@�r0O1yA��� +P�Od<Ώ�DZX@��(x�ы���_=>"s�=I����l�"dV߿�F��.m�+[��D�B~"����E�r��q*G���6G���0��x���<����'�����G����̈�(�$�a�0��� +��s=��;$����v���_��z�����N�+" ����b�='��=$��1�^��u���d��n9�Eڷ�P�]A ����!�����������/?pY���z +�W��c���VhԮ�s����ń���5��oܸ��#�ƍK�֮^���f��o4� 0, +���>�~�\���[����^��^߬o��̓嬾�ͨ���7�3���o;@#, +��� +�R'w����C�MKT�~&��)�riqu5�u\���Ϡ�� +M��!:WQ&`�\ +p�=�MHqwa��LM +p�`o���t]���`�
����|8�h��^���h�Z���l<��G��;x�;�~4Z�q}�����d4β�]p�Q��ipqў۔4jw�jD6������L���F��)0��k7�nl��66�-�?w��]��]+���enM��s��:j$�V#aY�` +��*���y���`EE/J|�>��~9���_�)��z�Z�.#R$�GE=u$OFT��*�^ᥞHzG�c����> +��ʦo�/+�h�a�������l����z�[VՅ�f����֡����Uk�Q(�*3��Rm +#���M +��5�F��_�H��_q�"�<�D�N"��L�w� +0�s +��z釜Y��+�W殰u*?����O��_���<?|�������\������*�'�+E�1�! p���@�����b�GІ���Ca�M2� +đ$`��`s�J�<.�(IV�MI�+�~b�DN- +��R��Ǯ����e�h�h�^p�< +�W��
P�36�@� ( ����� +M2p�8!k�Z�_����44B��������Cjb�R�5¡v��Z�M�vv�Yp�1��Rə{\��z:�=T�=���?*q+�T�[���-��S'�R�.�m?��d2������2�R� +j8�u +�}� +�p��1M�vcmem�k�������+���跟���k�S��k2�~U�%
�"TT���r�]W���>����-\]�vm���kssW�����;���� ����˓ | +�y�7X +�hb�@���"���9{�/~�0�����a0���Pfa;�c*�6� j�{�4��\�+4B�H�� +�m���Lr�� +�^MP�+�b�|},Ůf
S��>S�#!��[lS"�C9;{�'��\� + L��j-��'Eߖ9�� +�?� +M[]�^_�p�C��ء�� +��@s��X[��v߫hJ�����ʝ�s��w> 'B����맲v����&}�� }�Y��a�����A���/fXX[x�>a��7'� �0 +�4/�J�
mT�YW�(i����#[(����0O} +Dž����:� �'w���U��O�:|��r���c�J�����|Cx#���o��Z�t������a�w�=�� +�G��qkoO�.����X���n +��O- + w��];�c +�9�\$�ڤ.f� +�>��ix�q/钶����n����%.��G����d��A��!���^ ���/|��)k© +z����T{�l�B���"�l&�#6m �o�8�1��gG + ����(Vi�-?�>� 8���y +0�,d��~ + ��G�����(�l���aMp����i��}j*� ���噴��)�p������r9ISLE�K-|��(��g��뻿���(��է���).�� �j�'��� +0kH�j�i�9o.8"Q@�wz���p���> Z�ף"������������%`���G��|RA �Z,��ap��������� Q�r�>�\�@x&1#(��$rS࿚i�8}0�Q8���EBR諜�Fi)�ݣ|ؐ.������(��q�6쁫�w��اQ��&��"rF�]4./��d��.�#aW����j���Sr) +�����9�N�<Ʀ���s%��;�P
[ +_˔Vk"�CƲ�G�;@�G�H +o1�0__N�����ލ�W��u��
_�bۍ�k +� +� ��0����~��X +�Ql��� +| >%cy�;:�*U�}ڃ�¯����Oϝb%����0�Ƴƭjh��Š���"j�d)���<D���Y=�߿���ϥ4��&��&���--�x��� +�4Of��y�:N�S���F��N"�8�j`ɡ)� +�k +^�@ +�ˣ��G�W�_BH�;/�b�QLR��Ғ�e`�#��Ā�%��4��-.�z�(n��=˥5�� +D�W��'.sE�`����wQi��,�S�K����(��!�Ң>
�!�� +�I��"�1n
+�cS���m2W@�_�'U$�LQ�����?�o��x�|��I +�h�$���Cg���8ߤ����+ +^af��x�s�WW�8�%*j;,P�Of�7It$@�� +|���O}G��%K1�N�0%�ˀ��!�{_?��� +$���f��a���>-��%=�q�\"���Y�������ju�9=.dt}r�*�\bh_����B�%�c�j;�"f�3��6�+z +�\�:���!mrh�u\'3�H�T�S��U�N�*��w.<)�Ԇ!GPFE�R|/���ml[F�H@�O��\�t&���Kn {r�,��
��X��W;�����d6�g��YM�-�Z�Z��.':�.ht�)�Dp���pg}��S�Y �����S�>�����l�[o4mU/�@�69LJ�1�$w9��K�M><�6_�HX�GFxe��i���d'?� +$��c��$�^��mV����r +>��vu.`e7{�-W��[������U4�����1�VL/��VV�U=���4d�Sj�);3C�ͱ� +^�-~�+�?��;��J�6�[���\�1B2�T���7�,�t�(�.�;=o.�;��,/!�~��'yʔY��������dLED>;����>Dp�� +�y��q_�+����P,W�)� +�����5! +�L��;��� +Й���fN �w����:���`�Z�!W�8a.����<=�>*ܾ�--�� + B�oy��<��#�zi���U��ޙ�;��&P� +��#�g~�G�v�5�vs��EQ�Q������A�n��m��N����bbI�x9��� �1ݢ���r���םU�����$~Ԝ4+`{ +�e�֮_]��pc����{7�Zm^����;�/� ��Q�kw���ݸ~ݮ���k�L��?�
\� ���.�J��T� +����L��4�-�n�7I�M5�Ύ�M�m�92Մ�ٰh���5"��E�f>{:N�ա�ӊ"�E�SL�\�=v�TԺ�KDH��9� +*a�`P�(z�hX7�{�4B����q�aD1=�Wa(Z�����nS���&"v��q�><>>��C�8F�*DX�g��+Y���J�p�Km:�p {R� ���)೭J��j�VV@�8��&_"%�{�)&��V�\�`>g�����(��67wGϏ� O�Y��_�i*E4�v�! +�Z�̚���[<�M�H>��L�<�+��B�Y6��W����xML�5{�G�M+��DEq�v�N�H���X��#� +:�K����{j�1�Sa+����Z��GW3?=� +�5p�� +WnY/�!���&���Z��p�$?{��V���R����g��|!�Z�J_�n�pc����1͵ +;U�px��mA,��������/V�Z�o� + ��JL�P��Ot����@˳��_��V��s� +�O�c����t@����oTx[w��5�/WO@���~UԶ��͢��9Z�`�svK��|tW�H�y����Ͻ�iZ�����pL�m5��*����z��^D����0�1*W�B�;���d6�%.˳�q�*w'�N�K����&��e;OC����MǙ��#�� �ƺ�d�<=z$6���z� � c�̸0x[���grs�R��7�H�3��z�ݦ�<L�1�\��m���ͧ:��HC�{�=n�3 �� �dE_V�� q�V�T!���xo�ʦ,���5I<�뤢�Ԇ����@�u��y���j6�Md��z�/�����AT�&��V�FnѾ@"M:�9��Y����J��g�I^"��)��#�""��������
���Y̑hE��z���f�'�f:\��,*�x�Z�[����N|j +�E���u:��Χ���^x齹� �����
�c�6 +�J�S��(��,jɊڌ����O��R����1M⏝�[�Y���;\���q���e�6��l�~�UK�����E��" +�OQ�e�2���8�ʕ- +�\r�a>��~��K�!ƌ@�*Ӣx��>J~��KN�g+����;���%B���i�����ز�>I���X�.�_�4����j��j��ʲż�^[o��/�O��@�_U��n��m�����K��W�vj��-��O�X��j�����rg�8�ܹ##Lkw�kk���8���!�{��ܕ��/�����/�/���}�W�pV�fB]q���;?ek���.|��������g +,���Gnf$��E]��D�S�J��&H����-�R�뛞�e�7�4�BV}������uh��+�1$�і�{�� ��M��Ϫ�Yo��h�9.x?�շ����f��j5C�-9!�ˡ���⍺Y�"z���}F��T�WCU�3O& �Iy"�ȓ;�ϣ��[7�d�q���\j����}����C�\���3��Ţ7��M.A �����q�@?Yh�y�y3ʽ�SI����"g����-����>�7O�B�ZJI�����8���Y�i8�b� +p:����}��/�����ʌ�5 +�����n�<�/��R���z��_�]�wx4z�\F3�"������s�TQ�����Ǥ�G�n�X�}��� �RQ�T�(p +x*i� +k�C�|�}5�w�?|�����i6M-ga�~�W�;��z�}�a�6- �������0���I�1*���c��PA���C��)��e���m��b^q B�������8�X[�n�y�~��>�R.wz�}'މ���m����= +�����C�kt�� +VHzNks|<5�U}�9�
4+4������n༠��R�=�h������au��qxB;<����І��
�Bl���v=-@=���4�5��������
aB� N�V��l�29�Amc��F���-8��e������| +�ҤD�V�Q����sF�6+��H���y��̋�EE�}iiy����.�=�U㑟ɓq"()C����!�1�|#�_���ȔQ�����Q˜��qD����#��/�Ɏ�[��WT�j�[��{_��!�}1-���Q +0�ϕ�L��8��x8�ր%�ǵ*�Ӂ�]$*f$��eϖ�6Պs�͔��.��46�6R��B�C�Y��d���NBs�v}��q!�~�].�z�������������5F���џ�Z) 6�S�[� w̼ץ0`k�1����{�'�\j +@�PZ)!őJ=���&XH�Q�ٽ:+�Tq�;���J3��g��#�apw�͋����#��u�b須4�I�2N� +���� n`O�!o��������)�`D\��d��9���3N}�]'����g+>����KTp���BNR���`<��bKoa�=+�ذA�)�U��Pe��ɂX�8�|�Av{U��ײ��� +D�o+�Њ��y̐���28X�8��4����~����TQ��(�7����5T�v&y�L���jVT�pw�\���lE�U�{�� x�$O�edʊ������=$9�VT�j� +�hV|q�dǕ�O+�;���y'��/��8�l��rKb��pq����G4.g�r���qz��^�Z�6SQ�����R�F�2(��YTTc�Ӡ'R��]�a +r���C�@�lQ:4�R�#�`�)���{�����{������@w�ʼn������` +��$��֗[/��NuӒ�9��P`˸E��b<��F�!@u�4V���st���^�o�����}ƍ�@K���G��+I�d��hU�����4RY�fC~�/$2�6/����
j42��+�9�P�A5���z,2X�4͓,���\n���7N�x�1S?I�g�`,y��~�O���k��ɗ�D� +����Z�B�W%�y�B�C�?�O�=P�g�a,6�a��+�1@G|����� �K��RI�]��K���p�z���RY������;ۻk��Q���I���8[�l�*�2����8�ėÇ�殩Aq8�f$yƖ��U�� ;��?i�k� +cp������,iu��q�9F8/�4TW�P"y�}N�D��W�>UWl{�=� +�e�R�|���Z��U��3�/�!] +�6S��6�Ǎ��������,Ór� +�y&C�$�Tt�j)�i�ViZR�/��_^U�2e�HߨZKev
�h���(�Lj{�)}�[�GTT�O&��ي������0���> +!1�@���K���n_� �4l@%T��#�`��L,6��{�e���\!�Ӑ��J�l�'��g:+�yJ�bs + ��y�������<�]>� �����y�ĤA +�����������:��0N�=M�����}R]�SoA<a�e��7q���D#כ�|�(��j�����'zy��"�:
�VC����1�������� + \��.:�'�T�� @M�Ry +vA��o�by> <���.�'0ٚ�Mw.�byW�e�ӿBi��=�HmKò���Bf���K� �:i��I�'�X[2/R�.sM�n�}����X��� +��/�ʺ�I
+������@jk�R�� +�K!�m������Wͤ�����Q�S#4�GM���2Ժ؛(��-^�d3���\���O�}d�/dDS��X�6="��
�HPiۿ�0onB +��PQ�XK�E�v]�0r3)�A +����*9���Ӌ +���� +jwk"�t�Et�[�(��W����u�g��;�I�M��W��ח�D�#ux!��������}J�$������[Z����:�)v�qx��/�A��p +�85��㨨��:�5��Ըg�P�ܪ}~AE�j�TԴ�Y�{�� +Zel�Ka[�Ѥ�fU*Uw����CR!{:*bzy�=ʛ7����'�dT��% +5b�ҭ�/]-�+�����|�k5�̇��2�̉t�H�W<�<��_��^$��+��s1�LeO-��}��-5o9���Wy��2���#b��埸h���h�x.�G�gU��D]@il��C#��V��T��+@�/��>rg�\Z]��*%+����a�;ԭ�����:�_���s��Uy�ċ* 6������CT��1wylZ=*��#���'��M���R���y6�ʇ�{$1(����ڷ[�|$^�lwg;� +?���#g�Z�ޙ�: ��R������u����^s3�4wy�kA +yY`P�%�N䵆�M����~%J��dڲ�+����ڤ;���V�K�xw�k���T��E�[��s�ᝦ��Q0m�@ +=�bE�㿨�Xe1����ћ�[���^�ハ<} ��LYaTT�@��j��:�"��T�yj�� +� +�".�5U�8��/K��B��6���F\k�E�l�5� +�- _2� ����A +��P�=OA k��,����LJ��"KfG�K�%l8�1y�m�5YM伸��� Rvp�`.��U%!d�������)� +7X�s +m�V+���Hz��̕���P +�E������օ�A?*rZ*O;�r2*n�ؾ +Ec�V�QE5��]Qʁ3�G�y����C}��,M�s!%cnA���ЄK +.�{������#L +�$�Q]�l�JK���G����nm�å�#Q���(`q��c��Z5Rx�H^����d�͉��Z�Jm�&vvi��V܊+�x�~XL@��'���������i���v +��L1��*HY�f�[� +�ǣvT�&I���Th�נ��2% +�`�0�[с #�� +�}�xN���)�� �0i��7J5��3E��;�q���K�u�+�2!%_]�A�Ã�N��! T�.� 4��!��V:Os�x@W������uUT�.ŵ���.�*�"?���PQ��rA;��ؖ�����I�ru���<�5AB/��Ib�5%n�4����(�P2-��뙽Ƕ +�Y�ޗ�?Y]UL�?օ>�χ�0�;�������o�_��$v���F@h�8X��&�r!�j��<��Ο$��yV�e�.��*w+t��4kĝ_�6�]���l��D(�b���R��H��.xbZ��1EP��iS�Z4j�����~ͦ^Ԭ�k��E��=����Ng��E�Æ� +^��������/�J +��F(�0�~�|��{|���?�-^l,�O/��:� +"\D/B�!~����Yq��bӋ�LV~ +��� ΗI�ٮJ-NE�"P�L��_E�C9ĥQ�,S;��ӇE +�z�h�v�K��fG��y*$�K7)0����r�M���T�0T���đ<� �T_<G�X��C +������x��/����-R
*�t�"�z��]�'O�'$��1֧��������y��(� ӡ�U�X��>}������*��Q*�w2a]հBt:�k�")���̯X�MSH�S`j�S���8k>���
fh�\6���E�BE���Ꜧ��;���6ըp�E��r�@�4zsyfe�� +(�s��&Ѳ��\���$�ykK
7�Ed,�ƙU��gA�g��6ҼQ�< ���jw�3z>?g,<b��D��!�D��n��Ӷ�u��I� +��ColTT��*�&&&�D +�m=���z��P� �U6{S�� »�N�Ic˲��r������<!4����?,/���ч�{�����%@W�*�fh�7�`��}c~��{���}n�> @4|v� �t"�{v~��6 +/���^��Фg7�` +����֮�< +�y��>-�_��/;�T�;�k���ϡ��j�_���3N�2U�S�w�W�V�: +�zx��o��쌧��LBB�a����C�IϦ��C�|�z�(�N-'cu@H�c��U��]��� +���,�Ǥ�REẠ�k +ƴ'�����J�$OFP����P�B��_Oﺢ��ef#9�4Mz�B��t��+D�窨ߺ�L��|RQD�6UT��B�j|/vpl�Ō㊢�aڞ1���Z�)��9��~2B�)2*�p���|r4�YvE)��b�"��43n�+�M�9 + ��g��?����i� +�k�R���>)�Z��7I���}=���@��LA��t� ٱ����m�����/�D�.�F��S����r� +�_�@4�f�N����/�y���GE�y�Gj�..�eީ�f��
^o!�� +�ua���F[N�<�Ó'W�^l�dIO�_�o�����<�zb�����-��ɗ�e�)N�$S�@�fRQ�3w�y���I��+�T�3}w�
��VQ��f�*V��(SG�"O��B���<�8S�t-%�d� 7�>���RQd��iƩa��<f�ab�F�4s���������|H +�1�DD�6�Q@��� +?g���K����h��Q +���ϙ�i��)-��5Xs�C�&҆�f��*S�����D�����,.!���t��^�$�(��x^����`���#9�"O{��ӡdG"� +�����^QQ/� \9��tK�} 5H��ZE::�TQ��ٙ�%� /��~ێγ/.W a�P�S� +ǜlg�>�`����]̈́�a=�ѐnaO�Bqs� �(�]T��:T��D"@���g^�����]�����������=L�ԅ�U<2%�
��V*��'� GV4�Y�V@~զ�n#j�ؓn����6+�cA?�h�B��ԅ0�V\��r�����-�� TY^[�#V�Y�i��%�V��M��R=kk��5���e�^��`�xA�����c��c}�t��y��7☝�����3"vsdP�!4S���s��%���|X���S̳�Q�E�Np������|�����K}K@��F�2n��W�O �H"�(�J�×/_���%nh���K��ыg��<+a���ߊ��Ǵ�d�q~>���W������|4H�kn��;n���J���9���������ߟ砜�|�������q�\�~��� +@wΫ1��/ɍ:��F.��g���� +#�b����z�ceJ��J!�Ib��H�f4����d;�P�`Bi�G�,
.[��O��w�^}�����/NO� +���lG�7�*JE�
��"S�j3��_�����)�
�$�b�% +�B�J�����T\~U���7H���T{� ���q +����[�*
y��+��h1_�`���KP"��m�SԘ��K�'@��;y$U�u2 + �C����O�� +�%�K�U�R�sEaw��~Z���O�m� +h5��}�q`%��ё��m�e�����>+3���~A���v;^+��^���(3�,N��d��S0��-vS�X���~��4C���I��(IT�,�,�%ԭ��,^�Z�@�[U�i��ߕ櫥�쌺��I�\ ���� +��6�E�*:�S� h'�a0�_^���`B�y�<m7�Z�s��aa�$9~}#�s�<meT�vm�>�+�#�����W1��^��'������6�L2�u A*��[�9᪨�A�5bŭ��4������X=#O$�ri�I>iщr,q��s�۟W�ۓ�jRQ�'q�iE%�q8���at�yJ�����m�@�����(�R2�/��7�<>����ר(�\�U
U�u�D�9�*�iE-/���|#�lKpqE9O���+*I��繲@7��I��FB������]O� +�rr�l�x�T_~P�D�C�&-W���Z}�Z]��q�:����:f=\�0��ܣ�=Q_�U=W��ny���6��z��r+�C��K�7.�f�A?�v�p��S�o +RX�q�$�+1�i�{����c\��o«}�Pʔ_��#�;KQ�LZ�$Dy�����M8U,/�v����!���O+~�hY�]\v�t�8�J\�*����ҳ&JSi^�>���zE�v�^�TW��! +��/"\��"U�Bp��eu�S���� +rE� +
(��"�W�I7]�!SkEE] +�Xx�Y]�TQ���U��!eH҈�I���x�!<Q��O�bVI���]J��$��>E��)��gM���Y +���-Z0���� + +����(�II���5%�� +��2�H��Q� +@�u�h&�E�'3ç������+�v�TGJ���q"�Ε�0Nм�i� +�2Q���' + +����9���t 1P�o�>�"�����.4ʳ%vVg�~��?`ξD����f��@̔�Y�����8�����l�f���(cX���_�L�'�@ޛ�篾����/������,�'����З��w>g�G��;+W�Ɏ�?��Ͽ�����l8��F�����Q�]�ɟ+>-��t�yq����;�^|��a�B��Q�S����sƴ��ܥ��Oc��(M�ap�x������9Sz�W�v�e�W�Z2$O��~��hF��,Z���h$�ɜ'���<�G{{óW�������(?=ϑ9�Δ���W���`w|>�t����s���r>��~��+�X���G�jr����·�*5���u��j��F*�o
G���[.T���)�ĥ�2�)�DE���qՓ��?_T��{x��**fU���l4<��U�K�j��T���zA� 7��b4◊"�B�ʷ����_\s���.��_Q�Y�*eWT����=Wo|��?�#5�WN��
���`�t�F��VE�۞�ME�n�8�QQc�I�"��PI����^�C���y��`��(�4�QD5T��Ri�_�:�T�7����wEE�B�z7�bi��g\� +$4��4Ž$:��)[�[��A9˕�z��9��(:�YF�2��ui�l���c��SGz�Z������� +�-�p�_]YY�/���P�V��� X� A�w�zG�W[���� + �E0��p����
I�^��u�����(y?���-�+Y�JBK�ذ��pqtp)R���:�JSFC��Qq�~~DԖ�k�����ƢD�*��,��1��y�>i��7��E�E&�7Z��� L +��.!yK%��g������;�z"�4�qF����_��� "f����4���E�M�B���e���r�xu�yZ?������M��[��Yo���4�[�"W���=y��<�SAz]~�d'~�k ��9�u�?&���아�[!��ٝEH�� ؠ�'3+P���(��Dž�%�&�CnPY�Ǵ���4� �����Xw�pp����hBd���-�F�ü_τ�R�<]TԈŵ����)�ѩfF����L�*�[�X�K����EX$O����UnL��{�ң�M.y��0���"<N�H���*�� >�Ԕ����4;/ +4�w|�Oo��Ш~�a +p��f�w�U���(��"n(lQ$�W[�YX�ٔ��T8O���Ӗ��2�������U�
�g�gx۫�y S廪���{���l�/��5m2m��cbUN�b�RԄ���*�\ވK{[��߈�Ī�x+�=����iu��[�W�����4Z���A�Ju�D� +O���@Tif��U)��I�?o`zA��ф���9��%]X�4�5��<w��8�I +,� +�Uד1ON �\Q�]WE��}a�t�'0O; +�<��s�E�<9u�Է �+���&�K�@'?�+����wCG�-����FL�&y���0�R�G^%�s*j��P~Z�T�n �����*�v�rE�.�);���,C�&5ɗ�Yt�'*���ت���M�ֽl�, +4z=�3ˎ�J�����g�#ØI%�~.>�8��I����xYQ���"P���P� + +F�ڵcF�+SU�������-B+�(�N*�ą��Y9T@U1�EEq/� ��FD�e�*�pE�!L�>(^�Lp�ԧ�L��P�[b�c�kE�šK[`� +�Z�]Q�U�Ss�m9��qR�G�v/*Ꝥ~������� +@��ű���s�=}�h�� +�R'�yڌ��H��)��LX��p�6��^�)��tυh�nOt+5oN�7���tv��Bz�� 4b)D�$=Ǘ�����؝2��nč�����juM� +�6,��X��4b�ZP']g�^]Xl��xM`�`�P���Nwxq ���-��ƺ +("OJ&_�Q +�u�_T� !����3�k���EIjb�����e�\Qa���\���k6���`
��}�a(Ҡ%���)�&����qD,�?�(��手y[5b��RE9�zO���) �_QQ���������픹�1��#D@��;N�_TԻI�Z�xԵY +�%�) +��}�x�0p�ۗ9����NK|����K�|��S+������ �;K��t�Em�+� + A��:���W��mlR>�� +�O+(�����%-��@X�W>OIyTT�[8�+"t=��Xd(W�<�_�Y^�Ƅ�����6! +���FI5���� +�(ƚ�lx6��������
������1�)�@Ǻ�g�ዢePC +g ���9U���[ +t@�'=}n�Ӫ�_z�ݳq������N��p����+�������f�-m�6��M��u��=�l�k�O��n� + +����;��CV�������
�R�g;i/"���K����ن�0.�1�h��5u������o���+�5�u���]���N y 03�ךn��i� X +s9U�W��e��8j���v0�=fh�sW���Ek
��(͖f�J��0E�b� +�E�/�q;�D��훿@J�z];�/����2�ۏq�%,�������SFl�h�����lŞj1����``����tv���]ϴNɂ�������Ԣ`?H +�j���F@� +�Վh�8ТF��0B4�0! @�"m5��Ac���h���wrHO1Ȑ����A� �(ij@%�����Fq���YR�37�� +������ͣ��ՃB��mm��������;�8���0���������������{_#���]϶%� ����K��+S��tpE�\ +~� +����} +G�#�F=%�QG�|�
�S�c�ǫ��4�q_�Xn��kQ3Mڬ]Ֆr@�Rm�G�f���{I��K��:�{�h7B�
�y��N��T�?[n����͊��Sp +��?����mW��э�Z�{''�������- +�������Sx4� + ��{�-�][YH�:<:�A��?�W�=~��!X +��|��q����: +i +͎���79���I�*7ҏ��HH���uU�V�Q��[s��3��#�C��
R��
�`}h�[�? +{����n�� 0\�[4� +���5��pi�/�����cRQ�} +ǻi�l��<�B��#�n�K@2%p)�c��(QL�؝2@}�
&��
�a� +@�6��❯[ +��r�����蝹%I�>���d9a�m���=c +/n��i�_�ű_i�#�h��u�j�:Y���Z؛�!>(�n�X�@7�Xin}�3�ł����CqS��J���d�|o���<�E�HG���r�Ym�@���s�6����y�k��8t��wV��%��sEO2�{�>jG +�/ zJ'����p� +���� �����> +N�@X@��f�Go� +��Y��~�"J�S��I$�}�EB ���T#q#'���..�;q� +=��/1
�JfZ��U�����>U�S���E�(1�dpr��;�`h]���=v��� +[�,!n��)�\'A˰��Uңc6Qm���hx6:S�!���g�j[/2��e���mb��u��D��j������.��.�U��;��y3�.{W��gP'J\~�R�M�����Nqz!i�?��gz@Wx���P�| +IҴ��}������5�gG�xIڔ� +�/1w�i�G�=����R�� +�T86��^9����E������.> +`�0a}�N�� +�N������ ��t��q�V�p�����|Cp�!��!�8K +�$��c��� +��ވ��uf�k���UJ� +���O�%�_��By������=�@r�h��I�'����gDl�F\*m��0��G�/���)�\�xq@|; Em�5����ϩT�j2�
{\X +��b���A���� +�-j�*p��5+���d��* +�ӉC�$ �!O}7`�h�-y^�6ʅҞ�?��X+K� +�b +e�wk#H +GR^��o���$k��F#i|�Vz��q`vb,�����a@�R���O�gL>@9C�Ҋd�����Oɪ +��^�z4�2�-���@�G�<�<�&�?�j�����U���5V�ܹ3ww���U���*�� +UR_�u��� ��Ҝ"��`��aY(�/��̪�|3/<�V�+!���"Z�7�?����"��W�bhyHl 0��;n{�M8�HI�m��:�\�\��TŇ�������&M�D��b��`��4Q����t +鎏n�g���Y +~�R�������-/�j_����ϯ�u��g"����C@_am9� +0�}p�wt��������v��<�Z����_|�3�7ҭGk�8y�` +MX�N��' +�䡔�G�
B(:ר>������ ++�G���H�UC�� +��$HR�b�pXe� �B���>����O��W̳ܢ�WK$�W
���� +���U�V'g����S�o��*, +~����vO�aV��3��$as^���APgB����$��?�-�,��Ȕ�bb"š_ѮM���᨞��}�駖\X�X��F� +L6��@h=��D������uI�.n�H��giI1,�������W3<�����+��k���&4֙�Q���u���݀$��v��6k��~��ڊ�HƤ%\��uM$ + @$� +� �7� +�^��4C����N;c��<���Y�ڡ-,J +E��-o�����$$�1S2b��P�� ��j���t�1�N��(����b��1��X�HZ}_
gi����Z���+ +1�$m�A�b�?�s���� ����i�j��: +y^2�����3���/O� +aVA�����#�Bӿ�# W�������u +�)�e���
�p�N��X�&�+��� +9�7J���> +�<��C +)�a.�0i�����MX����jmui��$h�=W��(B��2Ɋ�(��BE�I��o�.�T���Q2U���`R���"�q,T����˕�v�$�X|D/��Qs�Ik��-w��FYI��2�N��Ø�{���|��yNX���]Wͫ���<�yY�8C�Om�Q����K��� +�a��|�����hey��n�'��C�x/��q�c;�jH�f�����P"BU5)y��,�ؗUT�, + ʸ1[���OX��gX�a�۷C.������m0���[�84� +�� +xM- +��+Ť=�����ޕD��#GxN=�%
vl��
�����SbBb-���kD!�
5��͔"�l�+m{~.�w����m��S5$R%>�(H5�G�,{�N���7C�`w�|�13��,˛��l��ꌶ�b0��b�@��y�������ޢ?Rɱ�Y�l +��7� +���$f�H���M�ޟ>��u�7&� +<�;�F��ț�(�U[�q{u�n,ĭ��D��%�8������+̅����c��I��"1�웪� +��ς,*�LǍ*��6+.Wi���fm�G3��oI�#��[���\��t^��
efAH{�� +}���b���+�g����}�ᱛۇ^�l j�~[ +����+� ++e����+ZE��fC�����H]�8A�tǸ,~��!��6W� +Y��#ReP!:e�`��?�7랊���������/n -�
TX +@Pf�!��YAi#U���[X +�z�0)��2�=-��mB�6 d�h��,����Y)�l�_��U���V�#)��;Y�]5�\����a=B���$ +<���^� +��G�fL��� + +
�_��F�p���- +��#C ؑ�@5�$xHf�`�d�f�0��:����@{]�/�pHR �.YIh�Xw/��� ��IR�v�-yf������v[��$��իW<O�fv�J�<1B�P�p�Ta�Y%˥��a0p���*kőT�<��J?Q���;3jU8$����$�ע6����X�[��� +S���t]��#�q��bu�� +�W��*An��\[]��g�0����K + +��R'�����P���n�X�J�x�<5(����@����_���`���/�_$� +��a%��@����o� +�z�/Dz�����gEA��Áă��a��{��pn�?o��?\��/�u*:Λ��ô�Vkk�����I����oR����5��* ��he����M\����a|-p�c��ḝ<�\zz5��4.D�|���Y�& �8�I�L$�{�3�l�`�'I�&���W?J�O���z��r�|t<���cm?I�z�%Dvv�{������3���@QI\��i��1�q������U����:/n�����������2���cC�Y� R28�Ӻ����!B8 +�� +Yw��J�L[ +t��c8�Z�y��Eᭂ����:�og +�P����` ��D'$P'X�����3jW"U^�*�-��`�2��������N +��p��V� +t[��zp�Rj�� + + +�ȋ�:���2�X�v��DQ4�o���^Xw���Q����uZ��(F��M(�ixq��lt�{3 +�Y���_���v�/�N��SGel�aj�Na[�� �$�,��g��Ī�IТ��'��B +�~�Y�@�*�2z99m�7��(O$ж�ij��Y&�J���0�[���̌��[H�)��'*�,;vfX8���4-��'���G��?�qz���ۂ{����p����EXtV��%� +�olj�s4s�� +'6��� +���
+����4����\���Y + +�$����-�?�������lI��~��}}zK?���"�KK�o��������Sh����S�F��jm��?�*`�A��R�W�j���1�8+���Hin����j��;]<6Ϛ�jAF�nm��d/`�خ����q���44 +���f��r��<�Fب��ųI�|�U�S��8VG +�7� +�bLO���uɠjCՇ*��n>:���K�S'
�ISZ�W���,���g$x=Rn?������h����4gX���*%fjuj�8�R@��<���`�B���& +�wY�3C�_�@ �s�7�����(�#�M$ +�l)���3�XڰbT�8�T��9��[��(mH0���P^���K���8��8)
'Z@�@��{� +�O��@�P��J�5��$ +�Q!�@�&���{��G9s��2�K?U�4ۏwۘ'�c�?�N�=���G���<=ΏG���y�ΐ���Nǯ�_~?>�v���*������Y�����|��{��i�m��Gc�U�wF��4����_ +Z��f�H�H�A��Z�#��7)QO�(06��op���&Q��R�8˞�������aڈ}��s�'���>�z�g��d� +I�Zg�J��Qv[-%^t_�%� '�[�&�?�n&�UW���x��2ӟ7U�Jo�����%���~�r�3�ŪJ�\�97��i���Ѽe�q<��Ǐ��z�Rh=�c�qE�(�Fu������T)�W��~�Z���Y�E��J�F��_ +�r@� +X)hD�n^���*M��ı�*t�L���8��8Fn,����ă۷�W�%{8��z�H���������r�l(W�3�)rw���u�s�)�Rb����78���+���������ߟ�u�ϤP]�����c����]I +��P=��;��J��eҪ��A���Fi��]%a��tC�k4�%��[R�Ո֪�y�#I���JD��M`o��$�(��j%LK�(3�. g +X8 +��_�Ï��ٕ&���8^Kd��נS�W��(��b"���S[���*��|WH���0X#D[�.Jv]�wu���k�s��p�R��^=�x�h���'�.Qk��0]dq���Ͳ
���a>"�-��D���1)P�h�\���d�{9�ג;��Yܐ$�&�(�����2�~L|%����1�L�y���\���#@��y�I4+L� +H�E90 ����gF����_�c +�����3����ӉT�H�(~K��Rx��1�zKh��<��H�u�"�VT�S3mo{Ũ � n"��U���0�]T��'5 5&�N�Ø�%\3H�X^��#�>{/`
�(ɷ�騀d����H6�:%N�TW�q7`F�^�Y%�I���yI��,����r���K�*���c�(�!E� +b�4m�,�t�1�_��#�@�4���t~���Nc6.I���z��VX���&��P�\ ���Qj"N2��6����bD�U�ڌ�����,��<��?�Dzr<T�͝��s�yb7@��/���?�~��~��+���?{��O�����/Y!�G�||������:�c�$�����?�+�
����S5�����~�^KUH������b����џ�5�ɨ�"�fC�W���T�.c�WB7U���e��q�0����{T����U��j�pm��V��0��ɬ.�|y�#(��G�E�����T {?�m�����b +=���FFE��e�� _��xp����"��g�ȍ��V�Rz���F�5�F���;s���e����5aC��u#�bҡ�z��$���u��BL���Vmf=��� �oN�����z-����8=��]������v�z������O� �` �S�z��V�ůG���<�V����_��Tc�� +�T��_g�f�כ}j��.�y����,��uy9�a�r�GVKX؎x������p1��#�M��3d-�"$A�L~�t�Cp<� +�A�`Pl�v�~!��\������� +[�� +�"�?���(��u���`c a����G�;����O��������/<�?v�߄�@ +f(5�{l����to7��gj�.��ry�;�g�f-?γx1�=��f��K����zT��5m7TՖt�0��p�c��M��0� #=��Y�� +=��Z:J�C�;�)�_-����B���]�&�����OU$J�}�_��Uѝ���Ҍ��=��\�$c�B�P�����T��ZY��įl��u"�?�0�^��C +�h�n/�5��)8Y�����>���q�>Enh�S�U� +�;aX F�_%�1-���,��%|ӕ0������g�q{�v�p�*���'YT1() +.�߈�J4�X�hN�tx�2]q��:M����1K��ZF�ԠI�t^%UD�ɖ��$T�����.�U���BE(�P�O]' +����X��N�KR��=|�ƙg:`��t�vʃ)Q&L�;%� ���3.�S;^�Hq?��_���]�����T�hE�b*E�L֔�*��Hϡ�ػ7��?���;$�s +�>�' +�����&~����7n0����A���3vdn��ԟ|�闟}��(�.̲@���>y�_�A�h/*���6�0�Q�B5����i������վد�Z�Sz%A,W�߬��/��|=F +p�/X`�M�g�}N�����⠔�w��{^哨��^ԏ:�a\e�d}ݾ��܅�yO-�P~]��������_jOz� +Yڢ�kmǛ9$�!鄋} +�k�;�P`��Zxy������< +���8�<��,�)�ooD��}�� +�o1� �?�A����}�Q�C����y��62�VCA +p)K梖�G)&:�(Jt��Q����L]�)������2��|�?�y������~��{���u��>��>4���n�}Co�.��7>����?e���" +������0 +�{��4����3��ֱ��� +�?�!��� +�،�l�+ ����Efg�R2;C�ಡ�+�.IJ��+F��c�dX0���s�V:j�Y�i�̲b�� �P�qU��Y�A +@6��_�G��J���2�AXR��2���;�2��/��q�'��� +���/�B�&$�V:������J%x}���<���������/�g)a;ܠ��|�w���}�v�7?����7��@�N +b�.� ww�y�_Imƫ��:�N�\ϻ�ְ�)�֯�yi��n=�J\��� +x� �°*DJ�Xƥ�����b +�4���%Rn8Ҳ@�i +ʠ�,�^��R~��W�tA_�$ +�P C��������L��B1�YoTO��ė����� +Ph�Z�x�X!�ؤW +��a)`#ʅ����D���Dm���#;_V��7z^� ���A�� +��5Z��
��������?L%�4v�O繙��a2kGQ��������z����n�| +b�!=��nO +~�[ZP��y�����;�ɜz +r,��� +���^l��x���ګb��J�鍤�:�诉�)�������?��Ӂ���D}�$Z�F]%�#(!�-�S���'�4�=�
���mP�z١;J�%��Vb +.%"F�୧B�8����h��ü�Z��mad��r�>�L��uvٯc%�ū��Y��穁��˄�gEW���dt6��]]nw�1� +�7@�Ϡ��&��?`6������XH��<GQ-����wW�e8[��"=��5xβK����V�Q�ǂՎ%+��i"����7y�ǖ�YnA�z�ԇJ�C +�Kƺ�(�<?#|�f�����d���h� +�X:�w}$T�
Do�s��GUo�?Z�j ů� + ����Mq���7����1 +5�_�FOή����L��j�u?2c�rrU��ҀNdk�t� +~��M�G�ȓ�8e��"����X�dV����:CD��`��(�5�g�����7�^�,�hzz�:A�S:���S�f�R�?� �`���r"�0.NG2��n��]���>�G|;C)u��:E��,����t����y�|�-��u����x +e�Ң1�M5�b��n�:p(f���}6��[Ϗ{���ݝᾎ�mÑx�Vq���~��n������?�v�_�/�zwww��=X����(�*������[�:[�XTk-��0�e�gS +)ǀ#P��EIп�t� +p���o�_)]1���4& +�N�������o��#��)�n}q��ͺAŷ� +�|��B�ҿ���=
Xj�)$��$P՚*���7g��`���p���"�r8{ +��������a����}��O��x��$nB����� B�5G1.@����A���m�� +�Y}�z�������J�z�����P:�@ }�8���+,֓aW�X-M}ZY��� +����% +`uy15���oG�aG�e6tq+�B����� +!�������Ł�(p����'��֬ +n������2]JnG&�~{8����^ +���<z�L����<b���L(�b +�E�h�uS��i!�]~vNI��r��L������TP��Uz�,q�D���c��.��9K�efz��f�URs!�/����U�9sk}���7jCi��� +ҁE��х���Z� +~7���$�9� +�ɡ0#�HN��i� +��i��V�Q�]0k�H8�eL)TY�f5rR���ȍ~n�'��B�J +`��ノ`�ō[����@I):_��`#x +�� +(f�&��̼5[�+7��.{��O!�,����J�gm���E����u��4��e��!u']���gU�J��R�D��Ne����_9d�ͩID5��ZV��e(Q�׳���tԇ2 M��zU-��MSB�� +���i4�(��Oىi=����j��^n@����~����Η�я�\� +�|��_���:*ڴ.R{<p���j�k������6e߈�%��G� �]r�b�]Ȟ~�x?a����t�)�P_T�+ +�&�)+ic���j��Ze��|�
��8!�GV�����p��FCVJȴ�&Mէ��p8f]�=�h�_Տ�EV�"PNͩ����s��$�Ҝ*8]5�R}�E���م�m�-F�-�R@������b����0�H&\�����:
����1������� +J��ǒ���(2����[��Ǎ1˺�b��z+ũ�(�I���iW��#9�����.a���O�\�T�������|�(��rW�˗/y "V�2���,�dڒ�t�a�#o��mF����o�g�۴rE�o�Y?���L��(������3�I>��v���ӛ�n�}S� +�W�]������o߸y�c�O�U���� + v*Hr�d +(;�H +6ͯH}�����F�^���,���Z���Ad�V��7�'r���� �k��%������%��b�Y8C�>d�9�;4�ѳ�*L��V��l������If��?�����w�DgXX��ұ�ή{Ԩ���b�8s�J��;�����ǃb��tI}�!D���U��f��\c���nLy! +�=��X5�"��FX�`��-&����cg�K� +� +�zY$��ݘ��r- +�d�iT0�M�V~�ۘ����Eq4<X\�*[�[��ʲ�����в��l��-�8f�L:���d�a{P�Dg��4�.
LU{ȷd���b�k5 ���.��++X�wJ� +ƴ�Hk�l�������]u���ƕ�$��ڔ���E8�@9��^ +ءz +�� +� E�FG��Y*�����A�Y�����_�gEg����]� +xr8�> +V��*Ha9�_��_�r��zlx�H�{���KI��� +O=K���C���,�ҼYm�-0r~I�T��6�j0" +�M�����0���噫t�,��(\r��,�tߎ��G4�R���j��/�]HjӚρR�ô� %ע����'��k��C���K� +�ka�9/-��usƫ�Ktu�� ��`3�Xw��25��'������r��S��'��˟����߽� +[��vu"�+YR/���O�� +
���z/ƥK��8��"Nv!��R��0R�j�N��F���i��31 +������3���" +ֿ�H�����:����c0p��j��D��K�N���������2V��F����os��i����r,a@ ������ͨ��z��P��M�v@�.4��d���M��p1�ޱ!���)�����'�#����ᅛ��[�X�������q�Y��D#�:'J��%f�"e�cx���YP�,'��(��z�m� +'K ���XhLu�y +b����7�{��f>8|��u��c�|gg�^1���L�7|��=: +��z +����H��#x +�PZW�6ųR��&���
x���=4y�;��u��� +5Cc>?� ���
[^0�����^ +RO�z�o�:0��UUC{1�����������~�+�����ꂸ�p��� +(�`x4T�U�F^�8�xY��'�p��< +���i��&�O��?��"��l<ȷ7�D��F|6�O�<�uM�t_�*z��2d.�?��oN��
8���+/�Y�ڐ�9���Պ���V}l������t��<���{9*+���+����{+�Fc�]��:uu^�5?i�,mD�ӧjd�f�0�R�H���nmU�)G���a�� �{��[��z��ڠ�� +��2�}R�dP��Z~�w�)_n��Y� +ꇺ
�7(���0��Ҙ��U=U�آ�lA�J�/�ңdT�Q���o ��֭5LK-vwca��[�E��-��Ӫx��I� k +A��^&�s1 +f��w������$0�Ѧ����;vT��F�Be#$�aI'c�]�}��z��5�U�� +�T�"i�����twe/�?�\�Kz'�I��*:X�lz�\_q2&R��!��L:3�6���@ +��TZ�<�S'>��Ń}��Ў�jUY�9
�V䷦g+����ԵʒUi�m�:Ck��cyɡԮ�t�k��T+�{�v��Q:�eT�j��{+&��Dy]����GI$0 9�����Q���i2��;���>�|k�ē�S�E1 +:�ZO���:3�O�����"�b,V��0i���m����#�d���t|�a펱@�&�v�gX@�� +���S����2rm�ref]@�K�1%��^�兙r�����W��@er�T�%iQ�G � Dx�Ki�Q�ʂ�R�A��LhG�9�?����R~��?�p���Q����������,�eCV�=#�=��o����jJ5���n\wd�'�q�!�ʕ˪3*s,�e��砗5���E����#����~�Z��e��k��dPb�I֯�l�q|��3�E�5��@��y����]fC���u�hPe% +���a���5��y�%���w�gd|��ȩ��_Yv��}Fq�OXBP�B,�)<�3����=% |#@�&U~j�WήX�! +p�pz��+�Q +@�pR9#�? +�$�7�?�gW��T����2�]�Fj +[�(���Kw�J:8_��I���x���:�3&�)���5�J/�]#�2���c���R���
��"���/�z�V�n�ճ�LI(��47c�&�2�W��0_�:S�OB +�����F���$xca� +�X� )|���T��P��
m�1�o�0���R��Via�v_N�K^Di�\`���@���m`�)���
�x����R�x�u�-�S�g��R�^ +���T�H`�g��،,�Ku\~W�Ӵ�Z�s)}��I5��&��뼜��d�s�������Y���2`w������E�0�"7`B��٘n��$�5�/�\b���57B�\�k��a�=��t�(/�3��@f�U`I +�ؒ��*)�q��f*�n��}ùD�<:��?J��@�����TKSo}o�x�`�[�*����u.���bu��3Ԉ��M-B'�b�\��>w�$���-a��g@�͏d�w��;� +�_ ����跒Dc�1[Y��<�t6����r�!u.����om��Ϥ($4����,��_�bX�#ĉ����"[T}c,pѝ]��5�����R�J.+д���X�,��e���c +;#!�Qt��(��R3�³4?/"�`k�^��J9@Yun�Zi%b}�`�Z�z
Q +��Ψ~��K3I�,Kwl*�#�~�2{�����P�B'�S�EUo+X%t��ydoט4^�K����_�@���1 +�?! +]��" +.; +�Ҍ'H�e��,�ղap3&�(s�R�*��x�����=D@r�������� +����`��Շ���ӳ'��}��?� +�������&��]o.�@��B�� +��x +�L��]Y��l
l�.|����Ҁצ��[�Om�3v�%�3�-q�%GQ�;[���,��z?k�֥k� +�:��E +[ SN����/K�Q;}'JE[��X��/00� +W���!���鹷�H!��sH3�s`�WNo���K_��6�(HC +��M����� U��cc2��h�&��8>�7�JW�p +� +$����^4f�\�d�E=���C:Y�D0� +�u�j\d�f2�o��xd��ŏ)�˽ +�Jir}X �r � + �^��, +�kK�-�fF +�l@%�!���=U�xQ...8�+�
��k�K���Y �`;,i0�2�M�N����R��<���f����1U�7���Q��1X*\��k����lY|���a:�EJ�X�mIom��0�I&>.���ַt�k�./,���?Dc=g)�zV.T��V�e���Z�!�S�ţ>R�j�|�<�Z+eq/���%t�N<[!\����3>Ha +^�W)�& ����y�]Y�be_̆�����ZQ^�Д�X&@���&Rm�j + +G�Gi�l|�� W�ɢ��� +�-)�~���*;b)�d�&H;X�ʏ�K=���rV����R�V9���( +g�c�[-�\ +�Hs��#�㞘ǐ�0�����^�,����~~vTd�f�E������w�f{�! '-��@�����.�T�I������ON�x +k�x +��� +P2��?�Ԅ��!fe���8`����3uaA&�E"��X�~����kK�J@�c:��M5ؾN2L#�O� +�����)�=Yɨ��+ ���S�,
�o��K�.3��k)�\a���c�p�����q�)@#����5�xf�H-�o�N�T�^��ߍ������%��zb�V֫q�rH�4X�Ï�9M ��C}��G2�\j���[-����[jT��<+�:�����"���o�Tp��ހx�8�>�3K +J�PY\N7��M�9�Sb�1�-�s�����h�r�y�*����[[Jn�| r:`� +\��w�N�ڲ����@��3�!���'�KL����Y�t,{�@��6�����,L'6�i��;y��ʊ�u��j^�7!C�'l�7�V�/�.��_���nIw4(XH���+�����������yy��?t�E +7��p�f4�qb2�T�x��8 +R�7�� +�e�����@�L*,/��҉/3��n6�YW��F�,�Ɨ���k��&�i�Q\�K�:����������x"N���1K��a�ɪ�i�|n�eJ���ܖ@��P5��
��}(}��]_ +B��6�R��}���� �*�2����@���M�7�Y�|�� �t/kT���<� +lT��Y"�T�?�.I�l1��i=j���U����υ�P�?�吉@)F���'֙E�o��w�s��8@���>k�p�#Q���S��f���ԙ�ŀ�8�c +�?#���҆5r�/�UO��E +�@�&�Eg]v���g2�D��ʇ�g�h��/�zC?�/�E���>��'�ǶVH���OK�x�]eA��+�Qn��/�b��q
; +����g�+]b���J&B���<1!�`D +Xu���%�$ S��1U��A^���������� +��?���R�B�_����F�yX4�j�lѕm� +�ۇP�.'���|��\�ԏ���I-)|r��N�l�c�\���v���@h �*�!| +0���
tW��P�,�[��L�WRJM(ud�'��(��o�0H��AN���S +E�g�6��jNf]s6����+1�z]k?w%�����tz. +*���5� + +��d�hgq����d Ր-<��X���Q�$�o��`���&;�yL��*ɨ���X����/Dsj�����s���`��͓�'5b� +H}��_�aׯ$�W�,������/�����%��������?���������m!U�s +��Nd�=~V��.tB +pP� +�G�B�I<D���mA������̙�������IXe�����D���>�t����Y +|A8FjM��F`4+���IDz�$ +�~?!\��^�e4���8���"�yv}<M)x +��!| �%J�ݏ���'��8{nC@����_����_��W�������B8�˿� +��Z�o��}��w�����Y X�|6��wx +��ײlx6�嘒4��c����Y3���8A�/�| +���d�?E�&�moU���LB.���O�z��?�W�5@Г��m)l��CV����t�K�a.��,a�A u;fK�d�{�ԧ���������9��PM��E��H�S/�[���hW;8��c�-�:���D��|[���P����H��,�ҍ��~�giorͺI>����Y�ncO�n%�XV�/�X�na����"�.�%�c��\�7=�x���2@��U��D +�m��ˆ��ՅU�*#5��6f�`(�T��p��jF_��(�"�І8@𧜓���Lt�_��o��_��!��< +X�����齠Hz'�c<_vRk$m���x^R����F:x��/ �����+�ȂQ��~� +�KY�� +q�:^g�T��;���x�锱o�a?��\��Z�2��<�b +��f�:Y*E�/�N�o��ۛ٦���$ + +a��9#�&��4V�<^���d��<xWe�-<ꁟa��x.7��������%���A���Z�%J��s:A`�s�>�fk��>��z�TK�C{(�C@�t�Py.X��}@�@�Q�ٲ�Sm*��Bd���\ϸ�zz:�YZ0r��BHS[?��� @�ޱ)�o�'�Y�����bH!�����E�� "o'4��V���9s��"�4>�_�8;��S1�kPWo�>���5c@$�pq�?���v�� + +i���\,�0X�{ +H�iƴ���Fs��8 +��V��U"=�Z5���#�˃(������}������x + +�F��xn@�k��� + +ʷH��B;�9�ٳ��t�\x�f�C�و��� +��mq��?��h���:���L�y +��`P������ +�����?��� +���8��-۷�-��] �A���Q���=%-�d�Q��2���'������N��[tK�0�e� |S� +E(d� +ϸ�L�o���꾏Łt��� + T����*"b +��b�%F*,A��.`�l>�(o?_��$<�GМZ�efl8�l���w&3Hg�q ���> + +@ +s�>n���$�w�f#�A0ž +�r�Ri���p\����� +�1�4���PAgt6�]���ల�_G��H�P��}�2�`cku�� +Ԟ�F����TD4�n{9_]�E +º���:�_��P~��̝ݺ�j]�]����d���
)��R����=st�VC�������oo�7���FY�fB^:���e�k(���y $}L� +jE��v�����a*�^)i�D� ��@�D�87!�{��G@m�]H��I���'2����T0�cO�gx7��W�G��x��džM~��wޱ�z
c>"H��+�fˬ����c�o�Yj��sպ��)�Z����d3I���7�����GN�+�h:�F�V�� A��糳5�J�O������-�h.6k���ݏ.w��˔7��j!P�D��O�k}�t�c�S���:}��TeV��FS?f��ռ�[=��Ϡ�示���/I~��� +�[��r�E ���VeYV��̢Ѱ檻�S�n�SW��ZM� ����T��I�ۤ9�|�F��9�6uf��O���>�γj�Je����D�'�2��,��͞;���֨�O�Ǣ>���m�T��n꩹gY�e��҄�u��Ӻ�N��<�(�V-E|WpNE���!E���n���*�
�(�����Sg%�NR�W!����YՔy�2^R|N*�^��6ovRݡ˂H +�����p +m�,���w��
ى�n?����J���zK��@[h"0��nϖ��͖�cp�2}�1�\�iksK9v۫y_� +���ܿ�� 6���bڊ�p�I��5�I�����x�?f ���H�=�ZD����2�3_��������4�Ǿ�K�#,��{�íZufvF0�LO7��X�z�9P)������F��
����E0��rhv���4j��SNNP���P��V���8�I�T���G�:m��_Q�>7���fg�(5Y�r�ͅ� *h<��,&j�_G��j54OD~������x��HT[�6f~]ӹBP��P���L�����a��j���_�H�ư�z'�Pظ-��-r�� +�9��vR��G��R]I;�Z�>c��get��m��:f�P6��P��vUg܌����ԦE����Sg��?�*�SSs��{�,\A�A���)� ),�_�b�����eh��e� +ꛦ�u}W�Ǡ�JE�(�>u��x�T�ݡ���Í\�ʗ�n�VD�!N}��}y5_�}���L���y��o���\Я�����Q��*�̷:���J+�u���V�g�e���K����R��{# ��O�V� +�c + +9b�8���b����2��w�N��_�9a����y�&H�c.��/���-��e/�_RC$xe��q��3f + +诺�]����S^& +�z>�Ƚ� �k���te��8����Ϳ������h����5&@����5�����<� ��;�~��ڝ,O��-;��-aZ�6���/��/<F��Se)]��n������&��ڠ\�]� �׆2w7wEЇM� +W�|0��0/�M�� 33b�{���T�]���^��k�3]O��g�"���?Xb%�Z�,[�`B�[^Z����#�)aE8�BT��`�m`��z�%�/ +�5��U��\7��q�S�,̽5Uo������uϵ1
%R��S�m4'��n���� ���e`B��TU�r���O���J]_&U?��g�e���`i���=]�ϸ�_`���1���_���"��m�KZ���ތ0�b�~\�Z�͇��Z��g<�lT����M���k�tkG*���o��01�]"�v�p����G9,1�i�+��L��3����d + �" +�1 +=��!�t�
��pX +x>�� +X-< + +�3k�P�C閣 +������@���Yu�q��������^�AzC"�>�"�{8 +��.w��������ҡ`2��z؛�к�G�����D@:j��(��H�R) +ɺc��.c + �Ք���`h�� �e�KC�g]���|��TEI襬�6!PB����{����^H��7����=���'�7.��u��aZ��pyBy��>@��K��J���/�����o�?���\�s�k�:Kg>�-��D��=�/軒�Τ��� +�|5���g�`-�7��}L�D����ٚl��"
h��^�&�o�C<W%7q�����N��]�&��x��Q:1+��8�����s�����%��m�R����y������I�1`k� +F��t2�R��p +���N�> +#�n�)��B@,j��%�ѓ,~~���ߢ�~e��w�ئ������b�6�F�����u�i�nd�D$�s~�A2����L��ֽ;~�J��/9�+| +�n���;���*3��}��jL���z"R��F>p���`�b��O|���Y�,,ͷ*�_�u�K )\ +Ę@����
yB�<��<�^���O�����Vs��Ѽ�[�v1t�a�ݐf+�&������~~���;� +`��'�ki��N�s?7l�>�K�Ty�rA{U����0���˼?�>Я'-*c��ǯ��\I|� +�5c +N��]l�c�=kq��,Y�һ+Mgڣ�����Q"5њ��%>di���tkhDm��+4z.+���_�o��VޘN�d�~y�(e�F +�%<��f����6�
q*��.ۼ�-��˖��@r'4��]GP=.�9S�^Vkx��d]�E%��EMn��3��� +`'@=��N����p��mL�ha�y\ +.Ɲ �22��O��]���l�����Gd����)X�C,�C*`2½֟5T9*�B# +���W~ES�`S���AUا;Jwƚ����&Gyj�[�� k4r|�� �W���6ɑRs� +I�~������ə����ٟ��e��>��,�#�w4������@�3����ʝ;w���� +r}е�{�.�x��!(�D�A ��u�S�ȏ۬#�z���> +�P�yнm3�Q�}�P��7� +�5�8�ʅ�0�~�,� +�p�rN��rwu�jO¶ +c؝*$��|L8�����?+� �}o٘w�_� ���0�h�Ğ��CB�����X0��%�}�E��Eu�Uy�J`;�inU� +`}RG�g +Dۃ?=Ժ�Y��Q��N?D�����};=��'��_!$�F[ZDu�ܓ��Z��ji��^��_=��N���e��t�ѽ;������6��"�A�T��5]As�)V#�4�4�Z>�E���J� �)��c}X�4�3�эPA���|����� q�R�ި�ؠG@��ć$E�kmpow11I���! +��F���j�.��\ +2>�@:�7< +�.�������F��!(�&�O��,m/�t +W�D +��1 +p6Y�1�a]� +B� +��{p)w��n�F�Cs��L@��w����_�r�-������f�a쀺>��,�o���>J��Y��$L��V������@���֑��e�F���F�Jχ��z���Mڬ��N,RN)�]��ID<�ͮrv� k���9>ohW�j��w��R�%���G���n��&��5���G�4Jy�H�DXI'��qĴd���|ؿ!4�b�U��V�sg�V�]
}eX�W�e��u�ظ,�Uk�Uy���Pj�;LXi��O��\�-U8I��� +=���yo7��5�r :��������P+���nM�H��Փe��bT��K�<|��N�P�:;���3g
#n����>հ�ȭ�'��� +@���1 +b`!c +��tlw�hf: �);z�#~�#�:3ߖ�@ +J=�([��u���u����_���Ea��:Q�z��g���)C�Fl +=��
CT����<�-|g�����)��1�N(@����'?<y"VB�S��n��P�*�P�=x��:��<"���]����3�'�W4�F��VMO��-.^����Ţ������ZmF2=3sy&֒_Lj3���~&��NTg��亻������3���� +����j���=�?�\�V���*m�zI.K/�����f��t-�X���/�k,�.�x1i���G�\�4��0��њ_��?�Ǐ�TV�*�Z�����g���R�ŏ�s��2k�Js�'iX��G�d����g{9���r��iɩ�g���Ԉ4WE�\��V��?ҿ�Vi~Y�K����e�����U5��Ϫ^kz?�+"d~�r�d +�1\����������w���]SB��:H�0�v� +(�����X���fťB����ol3�rUf`�Րez�\�B�=�0�f7�I[����e[{�$f�Ծ,i~I]��n�|\3�ӵ�P�4Ǧ�f)~��,�4Z�iN1qR��Tv�P�+�}��(��u��]��X2���>��l�1+�l����l�,�l�\YN�7�r���y_⌼�,m��t���GM��eu�R�}�i�����NMY�ʔ�ԸG��9� +@q�����0��&K��T� +%X=����C��&]��.��&�l�[u�|��Ӫ�TT +�g@�A�J�N���=�Ә�jX�����c����'�� +�T��t��n�^��:�
+��/\ +p�Q +�9��#�p\p�`&@{ +��x<`v :x �~pp���cvBB�e��G`@���x/��ƍOA�W��Md.�SV\�U[[̙H��{F\ Z�"�V
}�L)����>�Y��d��:�$O"FPH-`S�i'��D@
brFc?�߃�������0������ +@�p�����s���t�H�B?����q����!��� +k���(Ƣ'%��~L�M
�EB���ä�ۗ�<c��R�ɼ�.��GɈ�!���1����ضJ)S�x=�לq�ǯ5*�`h!�d���������#���I-�a�b�!�C�l�Ț3��Z5'4'�C��.�_���8�ճ�`������)��1Eϸ�Y2��⑇�̅!jn�^ޭvG.�!\�ہ=�^o��\z�f�-ؐ[h�� +�̼�R܀%]�Mu{|@s�M� +2�.���S?a=���ޮ�+���v pf�����t��'�{� +z��ۨ�R���f�(�W.�Ops� +������Sc҈[��x���ϯ�T�E�
UdeC9�/�[8 +�� +�`U��_={v~�B}N��vVh�#�[�sk:��_��L�.Ǫ̋8�Ἐ���U�^#d� +r�R���?�\g�0�O����l)�м�eY��ʻ�Fύtδ����O���)| +��j�r@�y��ķ��omg�C��ᨼ� +FN��?z+�=/͆� k����a+�u����k%͙���@y�����㿸HW���.�O�v�<(s��Ro�A�Q6z`�
���$�!��D��i>� +Z�(i�����xR��<v0@(�'���/�%���H�t��z/�C�(�Õ +���L�Ş�ܚ�%s��
U7k@q|��(O4����-˓Y��I�)C���D%��H��s�V�]�P4�jM�*�օ��~ +������ +@�����o�v��f��~2��C�7c��5���:!"���H,1�ap�5ʛR�6�t:��( +"�20�-�:VJf�i9�:DYjS��HգC + @/y���u�a��L���q."P2[o<�B@��ѕ�T��:�G� ����^z�7Q~O8Jl���@{�6�kK��l��� +1n�ǴtR�%�Y2kBR����%>��`��m�v�ex[�1p�?����������$yV�P�Lyd�������:;wa�:�b�ZGs�9,y�^k?�dIcU
I8�JGs�(�ح5���z`k�� +l�V�Qխ9͔f��Z�yгCi�h�y����I�6\���M��s����xkj�l�te���(�,� +�d1 +�
�02GI g��XB]`0�*3��&�ݖ�5&���yV����-�dY��~�t7� .*H�(� +)� �9�( +�� +@�r���Ȓ���bM�%т���)��z���j ���p�������>�MdM�a�wh=}G�+|�{�4]%�_5�x +.���1�Yy�L��A'� +$�O0^`b +r ++%*c�Fo�@�@��)�mԺ9��͵�MB�{K�R���w�N����w����>�uN��ѣ +��~>����Ϭ=��ss��h��U��5K:hhp��_��/9lSmFsF[���?��@LK�p�� P��`���� ~q��v9H�`tȜ$`� H{�@A�XH +�y=�UOQ����^P@�4����� ���`�#>���M�$٩�TϠ8t�fL�t +-������'�"7)�0���3��JR��.(; +` +8���6Zz>���BW�4.�+�R���ꇰ��P������ �Y ��V���B|�e`X����N�VCiK����+���ݧ��yr�6��o +����"�㿰��?��\��ܨ6V�ir���r���:X3�p�O����F`�#G= +�1 +$�J���� P��y���k�K���f�E��|VlJ��5wd��$" +��lHIZ0�uV�Ҁ?��o��1_<�镫?�y�i"`���R6��h^Ӧ�.��Qo�V�c)����~�`�Yg$C�~�R +�A=�u���ˆ���w���f/�}8����>D�Y�)��é��u�Z���� ���w^y��g�*�l���Nj��H)�y1<zk���lf5���K�
�`2�T�/ ��C/��Jc�q������)��= +@�N��e�!s��@&���{����-O*?*`b + � +��k���H�l�^�G�#<e���� ++�y +��;�$�`3э ��0 �r��X'L �$џs]��>�*y�O��]h��8��DD +P�ҒtEUa�߅ZZV��` +�! +�����;�~nc_��ޥk��-< +T��Vx +diG���,���1�����3 +� �0 +#p�-���;��Mz�|Q�A +���Ǻ� zjO��Z�����������=dZ���xUw9�Z�;��Q�H��8�~�u�X�̟nFZz�cZD +Q�t��A=��3 ��;��?`���q +�UF�m���e]��h0������I�'��檮�\�nsAJ��`�Y�/��pN ';ׁp���c4 +Bw�߉������N=����#2>`�)X�xx_����E +���v�w<�� ��]y����sa�R u��+VF��1n�ߗ��G�ߛ4����0����8 +�]�o�����MQ��" +��s�l@&`�)���cັǧ�>tF�b5B`X��u +-� +��B�����K$���
� +�{ +D�8d +J�� V�� �>��-u�T�$$W�)������<�>~BH�T#�3P^�+;v� ��@�T���6����8؊ĕQ����\o)3j B�b�m���t��#�M@6=x����ns��c-%��l������"َN���0Jt��d�B%��*�zJ�~��)��p�c� �E +�o&y#Q#�a��Laz�0I�6U1��IG\G'�f�[*mס���߲Z_M�
��`�4�8�4�f�6W�t+����"��b�uE�k�^�-MP1�.i���(�u��k"�űt�V���� +ݘ��^���G/@�.��PCX��\^?��Z +,-���=me=1R}���1k��?鏪3�������SM��� �{z���Tq$1~�O�`���қ?��o���5��`}1��I*�!^ +��>�`"��ІR���ʕ��C +������:�+��j��_��R6�\|B����ۯ?�z�W8 +����b@ +��l�*���|@v��A�.X3�`˞~]$Y/�\��
� +W~k>3���FeD�z�rM�$�6e�D�ǦU,��={���Ξ=r�u*5��9��R�b����;�yU�s��$�Fm�a��|����5idŧ}�����+�'�&��� + ���Sg]�jՊzT�
���fft�&5w�P�Q���3��g7>{�h���W~�N&���a�S��2 a�qU� +bT�!��� +�@�G��@���B�Re����"8x�1 +Lf�f�%��H_���ŏB��S�d�?�/��bW�@���\��?�BH7ؼA�W��B+�;�� � +l�a��� փ�@. ���1 +;�Ed��Z�� +7-"�_y< +���������= +���1��X c�! �@��3� +ztB!�7ϥ�)�� +[KP��L�����Hg�z�Z�c-Ӛ��R�9b\e)��Pa���G����Eq���^? +�$ +-��R�׃�Nf"�}l�@�����i��}�v��a +ޔp��k��UM=5O�[VC�]Ų��te]�n5�lcO�#5��X�K�a_�ȶTA��&��t ��� ��k��yL3`:�@,�? +�0��j�}qL�� +��˨�yZ#��|��<q +@8����b ��Y�.�`@� B� +(���k��d��S��� +V�dgz�*Ǖ��#�!�E��sN��~xH���Tٸ� +���t{+�̨#l��
I>��eb����R=M�\e.���Z�c�X�SAϓwAq�ʰ][��eèyF�5�H�D]��*Ì�X���,�K���4@/]��
�&��֣��-�?�@X�y���҇ݙt�:J-���v1cҡK=C'�Lkw�r�k����6���t�W��X����#Z]`�e�zL�����ш-��Ѫ���.��<�}| +Ԋ�:[�6օT�~-�\����XA�xa +C���c� +�t��0i��
���v����Pv�(P];>���8��.�ԁ�����KЖ�$D�Z��f BK��l��q]�<UI]��9h��gCr7@�� +�(Hl���T��a��1�z�C���D;[����ơ�h~w���w����;������b.�'4��Y\��+�%WX[����b-//��\���/� +�� +����h�W�h)���B��c +��缴��r����UV�~�%!�m �����o�����wߋn�x�WY���~��e +�
�Pz�G6\H�F2��ApzbE:�gda6�ӑ�^J`gc��h�st2�ҕ�2�>J<�_)K�-�Id=y��D��N���L�$<�g8 Zm��Vr�PjLsO�(M�V��:#�+)4����tk��*�����p� +g= �Zy�ΰW5YP1(8R��-�%u�z8-`&(�fԞn��%�i+4�U��(��Ua +S��활� +��b����r� ؇�����Z���.�j�ZO�jk�8�5D)�-*��.��8�_��" +�F@������ş��ƛW��+v������8>�`RU¥S?��N}��,��%��Œ� +�G�-W�.�C���q���NĀZ�s6����\EzĴ~u�W��8��������7�:�x���@D����)@�%�"@F,���6{,���1�X/��W-aW��r\�"�$]���ܒ� +�`�'���ѐ�\�+��ۘ�gsQ�#f�: �/�)�[1�/o%9d +7�� +@A8�S�V�����y��;; + @�%F�ʧ��ͼ���U��s%:`�X7]Ļ����q�s&\�c��*�zQLK�� +�_��yAq��*�~Q���_�Xj��� +!��: +>����Q +��1� ){S"� +�3@n��=z�4��������� +x�� +���!P� +��m@"�d��?�0WY� :��
T" +�y�0��~�I�7\��
� +8�ĸ����j#�R锬����Q�.,�KQ1tRt+����3�lA +S�˚Ȧ�k*+xG�. I}D��ꔜ�TL�HC
+���[ +Z1�����H�1@[�-%��z�w\qMB�A�{�����w�?k' ��2��X��b5��F��.��X�j��;�& +>��mB�2�%��&�k_Z%#z�U�a��R5�Z7����V��p1�����*�%�H
�" + �)�g��1L��
��o���)P9� +�CC!�Ň��?��P�RK�Wa�X� +/��9����c:AZW ��բdAꮪZWA{{ +2բtVZ?7;������Hw�a��;�vv��4s;⛠Vz�m��-Ak��0:κ +��(��+��/�:"u�$���,�ޚ2ʒ�n��kV]���*2ȧr���7��P����x�#�z���I���.N�R�|��S�=�t����i�����.�1mN���Z��B�b�)q�P +̡���%�}P����(��C4w� �?�Z�Us�$'�ja0ݯMd�91��A�YK��Ne�hm��z��y �mt ��X~T�F��. +r}
�f +�~
��^:�d��o��%b +� r�VZ<�[���>|f�qJ2?>r2KZ���:�O��p�b% ���ۻ�%�����pI�eے���ߥ�nf�. +K�5�M� .��*�^��`d��C 4*��
�Fa1B�<���;ך�i$�Cs!]�h�kAk�>!R@��+O�[tW+�� �'� +ͭ:���fC@�]�a>G@�B�bN=i�2r��h.aj�8��1f��bʭj6�v�w0�R�^�kx +�^钂R�͓څ�k��� +�=��� +@O��` +��,b6xp +���(J�t���@§��)���ZЖ8-� ��z��*���qZo�X W�@�3b/��>�nӋ��U�e�:�g��g�l��^��Y}�c.�S.�?f"S�--U��J��fZR +{4h�xRB*t�Ս� +��[,�w�ŵ쐑yD� +H��3� +#4$j�pn��a�����G@�|w + ezBx�N���l���^�4�4r�;t���a��Ϛ�k +�i:{�ݬ���yD7#DU:l&��E��o:�������T9��en�ӱ��?g�Y +�����`� + +=?.G1� ^����\���P|h�/_G���w���"@� +��U#�$2g[�{ +@yP$����� +�D[�bݫ�@��S< +/z�W܍@��L��'*���R�[� +7�/ +��ʯ��^�92�ֻ���j0�݀s= +����SU�K�e��=��FǏ��}�0�j��G���lW{Y������3��1r�<A)� �2�> +ȇr���-�����q���'�j +�>�����dye���j����T�yX�%�]�mX��|����E8�~��P�����xc���EB}������X���g��s +��"�(d��< +L�B#�����ĊBP�2�����?ʗ0��Ѫ�'w#��b&�d�AѸ��kg +�/�(Op +D{���R� �,t3Un�Z�>b�µہ��q��Z4����HRK�f��I +y��?�2R�´�%M4�.�-�KyZ�8�y.���AXi�������j�Oڒ?C�u5X������Ѷ�ԴM��g@��$��yh?�"-ф&��G/@��ǒ��U�Hpu�@j;�P�n���\�JD��;��1ѹE^ES0"��$���)*&�L�q`>d��}��A�q��˨�1yYJ��Gw���o���A���tz|�7�=z�ivD*#������n �������pz�N +��1O���G����E8��MX%�T��~u��c��p��ݍ��`�;��V3�v����x��$#U�+�4��
����������^�qkS���-m�]��L����j�4����5ͤ_"�,� �)´=DR�\�!��b5���2���SL���U��|��zQ-J�V�'�9�\�& +T@����j� +��68��iQU��7��q����_��%���
����M�9��պ�/�I�d.L�DC6������Z�d�tW�弔��J�o����(��}$����B�������h��;��� +L"�������{"�ߢ��`��+"�����l�F�/蟐�=9d``���b���o�x�f�/� +*|��T +�����|�� {�b +��T,�F���~��"Ҷ��W��ȸ"�n]��OלS�(Q,x
�r+˭ysI���?�;ٓe˹�ݶP��X�_��H +�5o��_E=���
���W���ܔ|����m�e}���R(����"R*�w�6wo���p��^@�����4�nk� }����Kx��BmD��[�\�"�VP�o��Y��H�,~|�f���&WPŋo`��FU���x|[B�G�_�&�Xx�^��%=����ns2��tk���&aᲐ�9Y�If��'-�.�%q��6!�`��)~ɨ���k0J�"O�P緰g�����i�R��E��E�X���p䓀(\��S�� 5�qM/�Nj"�>r +�b�A�T=S]�)Y�bس�55�()���m��ޝkT����+5�A���6�{I j ��rT���x/�"��~Q�K��W|�BΧ�f��$�Z��:Z�-��܅��f�{�ŧ�������~�do��9j�O�>}������;�/�VP!�k>�f�E4�T��� ���-`_�\]�g(
l��k������ IG��I&����f:*>yM0���(���_%!��a-� �?��T�*����7��y� +���\�ߑ�Y�2�R>P +a��H TQ�ѡ�@�^�%�/ϟ����}�Q +ԃ�̵�<@"���C0�k-<���%�,�%����iw8
8i�EN��I��c���]uf�f(�#@o�V�u^O`V��
9��0hw�a�-\�3�Qe��^��!Il��h���1�c'��t��o8��OZF�qQ��u���Q��h�E�pyE +�o�;���� �o�ܩH�K\��{( +�<Wg�q�f�7)Z[�����)q�f��O2�Es~ɹ�Kk���a6�r��`��g˙�Ω=�]� +s���L�������O,�%x�#��E�9ꗓ�� +~�L���a�Z�T����s�Cdi�9�����G� �,���s��&@Z��� +���ho{{c��6�����7㔽z�Q�+�oGحf�!`:����"�� ��spg�+p�?����m�������> + +@�g>��w�*�Wo������ǝ�J��(�QȌe��_F�2Z�{��K�yL��M�o��:�Lh�G],.�5g���>���I�6�����o_>:�v�[�1�����1h���E%PF%l�4�=�@:�=�
㜋op�+���R�6@VRM@����!L�����?��`�I ��I)'�%!8�Q��Rf��d�N�j�IŨ��m#Y,�����"_�� +������`t�\-)�!E��SS m�n�v(���1���]���7/Ɲ����ْ���z4Gj�:��R�)%)·���Jrŋ g�8P��d�%~�Ӑ<�~x��%�?�|����p�����O�:��}n5��%�1����;z���I�;�:4�%��h�x��Q +x�����Q�������L�X���?R +@Аzh6��H����S��R�YK�T:����܃Ɋ: b{I"�E�U��
��p��!�%�\��5��0d�=��h~�\ +CX.���1 +}~&�$e2�n�K�xb`�ou}/?=ȍ�w�w'�P,�UH7-K�^��V&S�dS�q� �R��P�.������[gx\(Ru�`;�ٿ��|M�������x +V�` +k�E�m�dџL$)��������uȽ_����+�SZR+�m��P=���ܧc(~�Jc$k��{��� +�j)��B����-l���#�&�n����Қͥ����)Y��|6���%� ������?t�w0r��Sw<���i:�1J��eK�7S#x�$�X�u~跨�Ђ�x�a\I�@oA�X�⪉F�@#���v�ȝ(V���}"����������L2����@nr���K��5F=�%B&��~4��bk����@���g��w�������J��*p=��_���O������;?8>:Bt}���sU +
�d[�z�:�t�>g��
���Ca�ݍ��S8�k6�����8����P��I�W�"\��ӑ��758z����7%��S��U�A��zI�=��t�FT8++1�y����P�oC<��RvT +�A|�D� n��HE�k�"�(��S�u�w4�!��#�Z�������[J1��M����LH�5��oS�������vP��u��� �L$r��@�y��1�=���@�c����j�k��9���ѩ�r_�s��-��²X;'= +��`Q �P��F,f� +e-��mʐ�9��7?�Y.r��y����$�5 �������~~��U0�KfC + +}Q�ӿ�zz��2@ +�ie�k�V�z�^�B�F�s�Uw�@8�����\`���E{��!� +%��v.������2�=$�f�T7�<��s7�r,`�D�����m��D{�j��u�M�M0RWdQ +���:��,@`� +�7��G~�� +�2��+�s������h*Tn
�G��X�p���,����?Y��6��
�Cj������.?y�����/����yo^� [������`)u&U�U���~�=�b�V?��|t$9����,˹� +9�/xO�t*]'��q�Sm(@�=*�w�y0����������8������V�ܿ��*�R�B�vj�F�hEJSM��CK;��E1j�~�8��5�#3!zm�h*Cg@�A��r��\�tL�^�@*���ֻ���zV����V�YVR<WPT����̙i;��4A>��9�� +�)��{8�ʒM!G�my���j��ܟr=J�͏�¹��;�Ѧ��P>1(A��/a�/$U��-}�s���(�rN(K'*�u�� +�W�¹u����{�m�s{�<F������
�#_���[wPo�*\͆��y���Ym�{��·�.��z>vR��(]��/:����/�3C�.�UZ&�{W2b�G�T���D��N�� +����� +�N�4�!�O��rd����$bџ&w^w�w�wc����%��dE�|F��F�� uQ6����wsjI��/�����r���e��64t@�s��ٶ�0r�:�<���7�z���k��t��Q +��� ��jX��+0��W���
:�M��v�)q�D W�؟��o7ڙ-F>ߤ�#�cA4P�oXن�s*�=����0�wV~[�ѩ���<�`\�&Uw���j��K����]��F� (����v�N���F�S�����dt.+�?��E�8)^Ա�@�r�s= +Q7�]���L7M�(��{N�Zh�
o2k��;s�
7@�0z��?\:h9J�FsI�E������尹��y� +�(���a.o��-���j�3�9-.�^⟯���K�ԧGn�s|��Ĭl� + +�h[�u��*>]�]�Ѧ��ҝ +�(/ D�:V���m:���?�>\0�@]���E��˾�@U>���D�s����7��g� +@����j.�l�B�T��p��}k�(}QT��/�E�R����el�9q)0a\Y��靈W0�A�/H�%9B�_�˞�e�[��P��M��-��K�h�bSuyԛ�&�Z��]���@?�q�R]�][�Ku����}��&5b����v��<W�����҆R��'v�8#^�Z84@8�����7�d��"PT +��'�n��J���yV��2���7�O3@�:0L%��i�vK�@U
`�wS��G�'.����S���/ +��Q�Ħ���7���!��~��R�p�`]Z&���/����y���}�ܑ�=��>���{ �0�����϶����Z�6f:S.Cc��3Z0�;��:�W�ƥ�\�r�vo��4p4�Mwg<�fvA�L%�R��(\��.�Kac.#Z�� +�o9���s���_8�fdο�vdz��4>���s"5%�؍=P +L��/�iВ��9D������C�� +@���2�Fd�2� U��_f+OB�՜Ȁ��4
M�Aտ=x��r�6����P��U�Q��I�l��Ћ����8�cIe�������v��!@� �D��RU}�[X�i�w� aQ�}��A#\� +�~Fι/B�-N�e�R*"̸�=3���Iy�K�,~�q���M�n��{a�t�@%k�,o4�!�u
�un�`�ځ�\�k���/����L��I����ͦvUWl���* �U +ο� �#����?:��� +�M���In`i�H"�=$��g�yX���b��6��P�eE�>]�ʆd٦D|Z�*��e"v���6*��q)������~�Y�$Ov +Y�Tu��e��+诎FLN��!y��*Zz�<<JC*)7��i��r�J��� +����V��5�e]�朷}t�=��ۚ���&��oBW�JgDѼ6�Ԉ�! ���I���a�{���� L��B&�A]\ F%��Ak��[E���[�^��������{* +�j�qI�ew�)' f� ��Dz�H?>�� ~Ʌ��T��q,��O&��+ૐ��2�p;��GT��B���'�݃��AxI��ɑƵ|���斸����w�<� +��B)P'�6�q�!�F�H�[�M��^�Ĝ�� +)dɑ������pt�`Dls�>sj9�Ve���!�*�[A�rΏ +���da��nDu +�Np���n�4�GS�X-�Q|�-E.{�Do����Pq�\��p�~ͦ�L�a���}յ0��$�<��d2A{���@|.A\h{��@P)bK���g��c[W9�ܟ�V�j���Õ/��� ڳ�a+T���M��/Zz�ٗs�-�*�wvuF\Q]��j���J�N�������h��>�(� H���_���� +ʜ�Yyl=[��[<�v�ʵK7o�XXZ�;��$oo+��C�rAOR~Y +���BW�(��O3�wʤ��H��SI���>�RI�����1��vhτ���e���t~�o +w���v�曆��%P�[�}iO�xnU�i�=���n���$?|��uw�0���͂��!>�r�v�ϸꮖ�����������[�y�8�ܤ����X�z���u��0@ + +�4�>�c�>\�-�r4m MOqC$�q!Ul�����p��l��K��Ḡz��7 +�`VgzD�B<��U�=�7���m��N|k��(V8����|�-݉��@�o�wy����_e�����jm��X +�!A�)�y�������Q��r�%�2�RksR"����N=�眧�'�'�FS����� ���8w�FO/�y����.ެ���\[�%t��Vq�A���sa?�S
>H����E't��]��Ӎ���4�@j�.]�Whwg:F�.�*"M���l�x�жL�zO��#��>Ӿǝ6��*UFr�o�>���y��������SRֱr]Ȃ�Ke�̢�Umi:�v�>�'��*d�'��8d\BI�C�v�j��N�@�X�̧i��+n-��x�犀��n�qI���䌢L���l����o~������2_��V�N�y|}��� +@�y$A���k���[RHzs�c���Kn%����Q��K\y����m�`�K/U���/�Ht� +�d�UBG[���7E����ϟ�� ��������� +[r�O�'a��CÒ��r2U��������)1�yX�4�����> ��7$�sk +��<��p:���C +H�S�' +���~���rN���ϓ�Ǣ���'9>D�Φ�T�Y��r���jZ�U�έkn��p��̍O�zHY�GJ�#d��Tk�~����(�����f�o�����Z���;= +]B��:������( +���ә��.�KH���;�f�2��a�Д'1��k~��jk�;��Ni�p��U�#Ҕs4�� +�>}/-�<�\5�ݾ�,�`ʣT��i����eIjk�_�t�������� +I�/p�K»ѸH�e�.��k\.��1�U�m]�~��ޜ�~��s� +��!����`�����J�R>��B6�� +�]�SZ�
Ad���O��k��"���}w�NO��&9L�Ȧ�B\2 xK��v�����������7I��������Qs��m{?�p��N�葁��;��.���qC�G\�@��|�w"I�ytQR�^Q,ZH��]�N�\���;�U�����OU��Y�MPĢ���P�v�Y������?�}� +�3)w"\��H�<J7�5bQ(Y6�FOI�<.��T�d�����.8�� �'���b�����p`0��p�xV���α�tN�3 +D��K9��o�`�~O�W:˫֤�)��:DR���L�$߰�gJ�� +���y���R�Cf����X�s�R�mc����{yP��I\�0&g�i�
�jX�0{��-��A9����F&&f��Z@�h���Q�L{$��q�hXT���⡶M��k��a�����/:�<��9Ra��u�m�y��u�33dj����F(v�<���o���|p����d��ѧ���>Ny�V�$7�����_^" /�~� +~�P��*
n���`����m'V����q�X@?�̏�;m `�>R�d�� ��,;,�{�r_��ZQ��K�lud����h8;�$�Ѡ?::mLS�T�6��I��GZ�?�� +��CQ� +Ι�p�j���=����\a�+�^��������- +�<9�6�<��a=��hv�����YV�Q������� 9�K6������SWl}�<��rj��0p(wB��־������.��f��=N�.H٥�%_�^�F�sWa�*�d�k?Z�U�qS���������̗��D��py|��-�^�����p�N��ɡ� +�9?��E���7#�|<������Λ��C +��o�;���":8�'�_[Z�����w�w�B'Gյ�����{*�6�Ӈ-��Cg�8���Qu��3gS9i�$�I8G�&Dz��ZVs�9̉f�ْ��@b��o-o.!��h(����+���8�ę���TPș��'Mx��lk�Y(�Ȍ�?���c���u�N��G��E����v5��G[�#�F-�h*e�}8���t{cyK�e7�ZZ�<�P��[�ٸ�T������閹�7����r�݀�l国MXJ��N����z�s��9����H<�k�!�0uRʞ�p~�wn�;�sY��~t����l��γ�%#X��I�Zs��=�̎uv�Mݙ +�c��T�K�� +��m�?�YϏ��{�nO�iX�.d^�������8g����r�@���c� +��~�/UI(���!9�dN��g +�r1Sv`IHY�4@{�~}�ѿ�]�h�q�)]�b�p)\�OX��r�{����yAf��r�N��� �TS_t�ƙ�����B2�>J&�i�W<���
;�w����^抟],��i&�K7��$����-�Z���H��1v_V���h���~��j.���
�Q�brZ����}��9�\��|?7=,�X�������,�h^�}�ԉ�����t��FƩ�ao�L__�5���i�e*��+%��~�A�������Ka>5�$oJ����Y��5+�'t2����6O��O��Fj4>��M�H��vm�C�\�n�ug�Ʃ$��&s�CJ� ���gY��S��_��x%Ly�VL�����!H��AI�{����`���L�����% +Rv2?���^��g��O-��¹�W�� +߅�Pi���U�1�y)��Ӭ�%(�W��nu/X_�~�t����no}s<���i���U���ta+���]�]�+aL������҅?9�oU<��s��7\�{G��ȐɴeZ�����gH%�m�=`{?����{�� +6�h��Z����e`�]��ґC +��ˢ� kۄ�j<�wgs��K7x +�r퓥�ʠ��Geb�[����>
V}9X�r�γ�.аc��V +���¹�k5�ٷ�����a�z�D�$U=��4��x�%�u~P_20:���E�SF<��e�P�0����n�y)��TX�_�9�i��� �� mf��Q۰7z�B�&���U��s��y ڬ��k��I��su� `���a�J���R����`ҟ`����M(� W�6��S��l>>(�{��'�Q\��o�I�\r��"��2����;d{�C��豥aE���@\�����Y���� +�����y�fo@�O7؟��֬f��a��X&3��G7 +���V��P�/�2�Z��,g�y��[�!$�� �$��|�8��p�q[�6s�\�����W] +x��u�|��9����y��~���˧Ӿ܇#^�����{�G�yw�� +��k=�#7 +��TT2����G +���'�\�&6/��7��b��*HÞ�������-���+���0�~c����<�Tg�Z��ի�ׁ��OO=���}z�G�Fv��.������7�O+
�s7_8m|+���������ʅ��W3U ~�?Wޞ{ +��ȼ�痬�-���n�b��D�k�cQ`�s�� a���{��!4 +�-�S�[�{� +�O���pcF���о������'(�]�V�&Y�_�rh5�9�?��s�_���wF�.&e;��"��,���c��+ϭ��|=%���uN��@�W;���k��Q + ��h�GXBN�w�т�\j�8�����1фA� +?>~2uFT���Ð� +~"�-獬�c�����M��k� +jx_����=}����� +������rF�W,*\,��;=�>Zz��tc�6��(}p�q�DC�����*�h��R�Q��g�%� +X)Z�]4�X��+b1?���/8��)���n#>p`�_m&�J�Gu���պ�dm���. +粮8)6L�/�@?�N�� iT� +��luk-5�IK%ٶͷ��{�����A���j?U�4��9������j's�����9�ŔM���$1٭�Q��6����b��劜�����`�>+(ʣ#a3�Y��qH���! +���;.�[�~��k�����oZb2�*YV (U�}����c3��!r^�d7������)����v�ɄD�v�S���<���9 +��� +�y���$U~�Ȩ5�堔1�E�X�e2�o�q# +�p �,�����"Yk�,������*7,�)@+Z43P +�tm +��.J>��AW�E>J��"\&�˕.�H���sN��۴���,��-����Wun��+W�B%�� +�����N���J���:����.j&�fJ +�v`%����)�Bh�4���~-����L���="��O'�k��pE*�}�Gm�u�����y�V�Pƫ67����G�X���=��V���-���P�"l|�6��;�<��u�%c�0�d��Iխ�1�\Ɖ�;~69��ٳ�'g��:qx��6��S<��\�؉rB:����)��E�( +L����'�wY����h +����h����u�M��pQ,�EGJS-��F�-c�7�4t���ۼ�k'l��={vr�瓿�F OϤ(581 ��pcF�h�K����pA,�W�+Ѧ}P���"]���@43ָ��I�����E���f<.�s� +L8�A��Q���5��<,]4�C��w۩* +��R=�v�G�o�q��n����v������`$���"5��U*/'*�4�����[�)X���$o��������Mm&����U�[��6��s� +��ʝ������"�Qj����~h�4
���QC��ju����d�>���G������ヂ����ۉj=�����K���`?C�~����??��`{4r ��O\ +@�[u�R@���t.�|��?�4�ͼ<n'+�����t�� +R�&�1H̟�m"z)J�f�Ϫ=�8z��ОSx��b�[�@�yp]��A������z��P.}�3I��Х�����m�͢;ekUU +��H�����/�m�����V��_�����6�ж� +@� +� � +�.�ߌ~{1D������ +���N�S���p) +K_��N�f�9�W��C!�Bg���ZL�2 +��R�]��i��HA�{��;p�\@ �[ +��o^f8�߲I +/}ݟO� +t�� +��#�C�|�u���^�|1���;�tnn;�6�s��?��;:���w��[��I,ۣO�ἰ>�\q��� i=xl�r�1\��R��O�{�i7"�r'>��}K(����g鴔_���O?��gu��e�p� +)�8�)F��#�>�t�-����E1��O��p}ڗ������z���7���A5�+���� +O�La2e��>n8X�F�+�(�%���W������o���j�jX\\Z�}�j�-� �6_ +�@�"��\�5����d~p�y�|�_#v�WDf�kf*��G`������/Ƽ�L*��6�h�k�@�.=\M`?⼗�nM$�9SJ�������, +"�H�:�~�X,b"b�ͨt,����h4.������2�"��}�-��l�;q�h���p��Gw-�{�<N��Bܓw__^Ƞ�4�˨uv��9���Rj�o�/�E��^�����XB,]���q�W.�4������Ţ��l�t�L���P.ܺ.N��jB"��;C����F�@��%/�(�H�a�7[x��^��x,���_)(��55�+�_��;ب6���7�Z�������/�������2��^]]]I3nɦ��r؇�~w��R��ק������jB�_�Pge�C�����E}�,'b������|�aY�����ߞ�J���O������4���$?�N2��҇�0�^�Y^ٕ����EK��,[5��A&y�Fǽ�m�7h�7��� �D?������|���%�� �����$�o��!�nΩ�0̃�Թf +��ϖ��+A�S�~Y�&G͙�I{�t��-���%�&iwe��fe��p�X���@|K�-���Y&�������7(�
�
�[B�.�g5ϟ���p�S��xX��tSnη�v6����7�!�oN.S~�P��� +���3��|ݟ��f"�����/;��ɀ<�������z[�Wh%�j��m�|�Z!�N
�q�O��V�.�Ʈд�o�m�6�y��K�h9�wtJC/�6����]$:"���,pE�2T��d�����������Y8oO�j9� +�w +Rz$��p1i�5��sﶜ'�y��������Xle+Qc�l�_$��c1BQ�����$���S��W} �������)��Ҵ���?/���-��UO�/Q�S0"�Ɍ�b����P���wE)�!y��b)�d��������t������>��]��h<�5h)j?{#4 �[L��=�N�3�����]_��bFh�Pm�HU{���M=�ㄳ���3��^�� ���Q���AIB�T_A�/JX�=���R������!��~w{z@^�fQ�d櫃9�$��e]�p�]�Bi���r�ImD +��
��LE7���Z��&��)ҡ�K@�Š����mg0X[W8�A�C�s�\; ]G�,|��BO�Zv$�:���{���p����'��-9���n�[15��S����#5٦�h�VY個GOR�͈�Gզ����
�:���HY'ٟʆ�
�����%�3\o���X��W�7���иޯ�����6:|�ܻ~��ɴpN��E�|���C��\t^p�1h�Q���S������F$����G�~�U�^̀37.��}���to{t�"@���_'��:�� �i�: �,9n7���AZџ[���V~�!B�Ŏ��Q�V���ԁb�����IC�'$_E�� +ڈ +�n�?'c�����J�)�������-�0 +1�-��.J��z/��3���������Ȓ� �-����Vz��8�;��|�6pۗ��X��Խ�����U}���7>��~7V9i����O�ˑKV"
���wF�r�Z$��:�+�x@u���� �n�����%k�YR; ��x<�Ζ���'�btaqa��R/ۥ�i@o0�r����p���~�N���������)*V��8Z���db����C�f�p�ӿON��-����:��&'����)4�f<yx6�V�8� +3٣���;#:$B#���t��HezH���!�d��f�@/f����ό���怤Z��9o�w��������tr2��$����9�ò��g]O��4h��vF�)xn� '0� ���I���z�Y�q�gwo�X�gw� +͂GG9
�ñ���<���S�}�em:�Q^�o_�����L X��}�PP�;�y+X +圓�p�@��v +?������Nfn5�������vl*��q���~;��ngr�H���:�P�q�x��L0��Ҹ���9��,�P�KR� +5[+��/�l_.#�$R�'�X:�r��J�Г�`2��0{�n'c:5vL���O#��9#N���iZ��fk��'��%a� +n�^�_�]M�����Sn��]�q1��f�������Mò�nIȹ���0�Ξu9�x2�߭�y��|x,F�(q�t�9�\�F�))�2�V��n����٫u���Zi.�T�jV�n�ӠX���Uwz=g>����8N���7�n�1���Z��y�����Bd��4��T�eW��)�y�]p^5�Nu��,�'��u�>jq�}�[�7��[N`����A�ל�.:�+�̠l</nf� + \
ࣅ[w�?�lPV{��� ���٦C���W��a�M������w�q4����(7 4��5 +�냵5����R��;7:h�4���Z��(� +�~�ʦ�}��ic)\�+~�>T��S���K6�/���Y{��<������8����Xeߞ?z�&@��X��i�9�\�uY3��hU +Aoucu8tj�[4� +f��^�ɢ +��~�O/�{����_< +�A���WX�I�xE�Gp\r.�RUm��ʨk�؞�+=�c�P�6u�hd5P$��PV���';��}pHc +�P�p�t���P7���6�Fg�2������4[�֏�X�)�-ܖ��e� 7�� + +�� +��IΫ�}�����2 +�猁0��]��8v�5���6�?����W4�+>���~B�
}��v�Wgw'C�t���rЭ�S4�+¥���@��!>}�>:��.�O�sMI�M����!��|R)~��b1۪(\��3.tL;P�HS��D&q�;�p!;9oY/�#\�nJ��T +q�ۘ��n墠b��k�־�! +�^ T�o�(��z +.Fμ�g^z��#��NTnt;G$Y;�N��v�W�N|�}��B�6��D�(�ڄf�p?b`rq�8/�#��/��-�o\�b��9��Z��d�H�J�_iЊ��$��?Kח�ڱ�ě�4����s�
"g�� l�Ǣ�� +�7�D�
2m�Ů��.8ߚ;:����;��:�֊� �u|��8�9Vk�=[孥��|�N�H���-K�E@~h�* +��'��|��+TxQ�ץ����q1BNa9��=j�v�`��_��KEIG�?OO��%�f���9����hz�w+���m���5�m�~��?�ׄ���H��Ǚ��YoIy�����Ҹia�Y�d�{��ɹ��SN�4t�ҋ�����k8p��%�Ԅ��0�^r��{��+`Dpm��dIL�~��}�������"�^�9���.���֪1����:)~�ݾ�����x�Ȝ�"��o�. z窯�C0cR�S��k�7��!�4�*MN۞�ߗ! +�>}.��x@�&�U�8'*��*BhJ��K��?�j;�ȅ +�u�;�3��^�T]|߀nA�j���=x����Y#�X��}��.�K���� +��Pt +�'B��K����9�+�A*e۽4�,�@���`%u3)�nY 7���w-�u�]92�BE��0��"��/�e���(!�m@q�WB��9CO� �z��TC�-�^ ��;�q�<��=nfh�K�o���� +��W���?��yL�l����m +?�b]1�H��S�P�U���b���Ŋ��1�}F��5d�+�z��@�5w� ++����90~ +O�k�Ĩ �(��l�D)�j�g��6�r\��ZT.uh��|,~b%%���/����p������Y!LQ�.��A�T1��{��61�T�K���4�_ +�{2f���Q�{�R��%�\\.�;b)^���M!����t�T$��$�'�E�o��3����� +Ϻpco��n
0�#��D���m�:�f�)v,�B! +)�[�D�: +C��
�8} +]�Ev�I��%\�s[�]g���jΡĒ���b�gS�k��C����*����:��/z�0�|���Z���]��CY��\����\� ���]��\��I�8G�R&�@�K7��T��s���
�ΤH�v�SrR��I�i,���Tm���6�f����֗0#��H�">O����� +�o�ҬrH�7����)�<�ݻ�K������PZK]�'*���o`�u�Rz�?q� ��5��Ŋ2`�P��u['.�K +�+-��+���k(m߇�`�&\�p �*Fg���o.���ێ���.�s�$��r]X�Y�Z)5�^N��!a�Q +��'!T�1��� +g��Y(�r#&���8c؟/�\L�}"YB���[�7���wOO$Hy���/����}������Rԧؕ@;��jx^ +w&���D�\LƧ�*q��V����^�Ke��� +�(2�QZQ/�r;U��ol���)���G�g\X��u�.I���t��*�I�� +���e%���Ȳ��|�**yP�GW��J���~ٳ +)H���E�j��_�r�&��8?�ի �U�Mq��x_d�_9��_&C�����u��X@&�d{�[���u'�/Lԅ1��3R +��C`Pj�
���t�����|����� +���#���9�+Ʋۏu�⇝��C~$��
���<X��/3U.�2/D�s���b��D���*q�z9��8�r��r"����߯��L����l+��1b�,��AI +M~�Z +����o<��G[�������v�B����a7�zp�w�Xp���n�?<���(PY����_2ݟ���]>�8�;������Z��8�T��!��ތ�b证���)�M +8� +HbƯ���O$�Ǖ��AH��W�pĊ�#7ۖ�,6$w��`7pP7�! r�l�Dc +pE� h��o��=����b��I�J�i���F����P�T��4���u�j�-�%x0FMJK��2��N�t'SV�����n�4 +2��8�t� �RZ"y�Zg�¬��. +%���8���]�0 +��J0�Ĉ<����u��œ�� !�=�1������#�ԍ�� +Z +TT�EU��b�:2H��]Q��-�K(F\���]�B_0�9*`!b6��B��+�#�������?fn�*��P|�5܊�����3�\��E@�g����@"��q���.�`�v%x��Ù�o�U�Ia�W�J�=��Z��Sk��_� �Ý_X�@�����&�Ky�DQV��Uy� +��$�U��pQ|��&+*ֳ +���"��3�Ҭ[Jҕ.YuW��lI
%��H��\���&t� +y�|�XdJ� ��JY�V� +��?T�y��c乄�� Oe"7�gr�s����nFC���H�(�u)ӱL �� +�F>��^o�8��>�HV�d'J.���s�v�lcd�le*nH�^@�Cxx#pxR�$��vY� +f����~���_���T��� +$�MU�����������!8�]3�D#e +d��+���h4��l$�}q��_���+s~l����<��c��l��%b(H��e��p���q����A�~.6�w +�U�")�*�g�0���%�}��kI�T�U�ؽ +�`��b�������+�m�>����jt�����m��|0*_�Jq~0�p$�ŗ��J�'�t��ʼ���ʅ����p��)����W��Zt� +r�e�`��{ῷt�?M� +�]p�`i���F�v)i� +����މx�9!(����Ѿt֟�_�G�\��Xg��1����ܰ���w9����rt�m�{��-����s����\�c\1Z���Fr��T�s�&��`�{�s���R�ˮ��$��`(�M�*����9uQ���8Z�q��#TX�� +w�_ +���8d�6K���@$��XH�Ex�6g>����HC�@>%�xr ^����q�JMw߿�D��0�;�A^b.������m��� _'_��"�G��[���_��S�9��ۀ���*���J�n�T�6��T���G�%�=�|Z +���H
�c�:W��S��Kv�^R%�o'�}5�M�d�s�����]N���SI�ֳ�=�s`uЫ�������8Wr������j?Eх��?M'{�/������*�n���q3ׂ& +heU~���D,��R�"E!Dž�'��� +�[��J��w9����fӜ��. +f�rP0���y��� ��<'x&� cP��j>n5�������8�8�h�Q��G��iv����ϭU�[|\�U��z�f@7\���'O�Ll'��a<�N��7e_�I�_�yd�.����X "P2�&�6�b�r��#��[���x� %�YՐ���M��Y^��|����D�ğʻ.L�z�b�EL�������6+r���V��Y6�R�N���˄���c ��;���X��@o��k������(��1(�`),<���P��1����������?�x,�du�� 3�;�D��r@��M����F�i$����,�/!���떶 <�ȏ���y�{��)����$\�2���f��?�c1����>(�@�k6⿸��� + +��ׄVӧ��?GQ�%����r諨��ݿL�m ��t^m���qW���7�D5S� +Z��?�n�K���uXT +�{����*�q�zN��&&4��Q�a1+��}����w:���lr͡Y��as�����T��GfϏ[��ϖ^ͬ*�T����b8�n!˕8��i�g�Gؾ��sT[˯�6��t�e��|*K�����L�亨ݚm ׅ�_X47;�8; ��4r@��½�>� +�rp�Ξ?i�b�gIu���]�sq���a@rC����b�ˁԜ�����9�{�v��ȱ��v&�Z�ρ�Dw�X�d��fU��~K�P���0@!$� ���F����i��w�⠘O�f48<�d����ޯ��8(�t�-$��:����-��� +�v�P�+{R���3�"k͑�7 i�T��W_���!1�
�b��Z���r� ��u��(�����D�;��Or�euYs�c�=qN^�����I��r�ՍWC��6$���g�}�X2��`o�p�^���t���V�� +u�ݒEלW�#GL��z�Eb\�e�'��% ݵ��+ �W���a��f�J�vZ���f�\��� ��e��C4��y'/�,K�o�<q�� +��6X�R�ù�(]�y�\�m�g
ץ��<z$Σ|}�I1)K��ЯeJ��������1�*������*n<���m�h8�F㿽�����'�i����eu�?�>�_�����K�S�������۫7W�jtT]���v�B�=:��Y�"��w�����NFc����uW�]�x��Ay2�OF���I����� +��H�y�K���::����ƣ�qp��㭕\)����ήh�:(OI��x���ƯFGʐ���\�Q5�/"��Rb�_��8�7G��a������4U@���ݳ�������No]/t�� +3V:��MqͨY��}�l)�|%�VNl���+Wf��S��*�g�+�?]��NʝI��Sq���J�ɸR�ڛpnG�[]�P�8H��H<� @��z�չ8�;���WH�υ�c��|� �7�%�=��1@�����'$�����P@��h~P�33�xNm������A +��w���A���Z�i� +�����:��^���Q +U�?��P��Tlz�r4�!Ndf�����s/�Lk!E^8N���X^�߹���,�;�$)E�PJ��ޢ��-���p��O��ب]�\�_��jo���N�S�sRU�x� +�ڑ�˔;2*�Yv����P7��������k.��t���b��F!?���rr_/F����s��uŀƢ8�}���ݫ���l��]!��HϷ�T�o�Lȿ;�vR���>��b��rq�<�g0�8��9�f�L���9y\�;��]��C�\h�Eܳf@5����n]�I�9��7�ĵ��#����zܻ���4��sTu,,o�-���-FP^��2���*3Y�r�$?�-F��6��N�����v�4�2U�d¿��ڃ��s�x����$;7_x^��>�ƴ5D��%�/<9>}
*"�E� +���K +-�\�+�#���+}�rA��D7�˻;��lp��A�,)$� +/�b�F'Y�l+�Y$ A���?�2O�"ސ +�g�4�,�_"C�n��� +���[�RWz�Eo�Y +�lwi?b���,���� =/KA�bT.�E�P���_���eJ���Oߴ�������M +� +��% +�;��-�r+���r��:��Qq;q~'��P���m'0�C@Ul�ON/�//Y����w���
@�4a��l@��4 +:���Yi���'B��p������(Ve�"V<�R�/rJű�fh�d$�f�Do ��e˿��9)��\礜����J�q��n�?���~
T��ķ +�C/���l��i�4�0��Y���G*��Ϗ�� +*��/LB-%��ƷQ&%��O#Q��2��p��[��ɶ +��-h��V0�.G�hw���rA@dzpNR�]�k%H�.Y��8e�g��#nH��hg�
t�d��*��4�#�.->R-8�a� + +�O# +*:���`��i�)3 A����X\��'�CW�p������XJ}#�������|I�v|Kk�B�E�Y�J��p鄞֠��`=��U]|+�������";�����5 +?/Ym0s���R�řr�!^$,��tq��\n$ +*�ٺ���aȿ{�a@h�E��1
������i�����LN��F_Z�A%�N��~�D���F��mv�Ld3�Ͳ������N���}�(W� ����`ڿ̫b%+��9��Tk�I ���B��V���Ǥ��T���ϩ��s? ]�Xd@3�X�>�f-�:��s�%�/O:o�a�nx����^�uz�2o�P�
|��S�b��nY�Ge6� +K^J*�p[/���c��UM2=�U�*�{[DѪR��vZ��n6��PKknIO��z]!��*���N���@e_��^�����+'$ +�uBJ��#���Y�2�ϳ�_�K���� 坙���^g�!���X$�L��gTp������}������s�v�uz<k�dA곀R1�\�����h-v��H +�T�ִ���X�l�m)l�?����!��K�}��X��,��;��?��T +t��[?g�=+L�)�z��ݣ�c��}K`e����0q��}�� + �A^�� +�&x~���P�Y���u��*��>��5B��╅�9Z'�K��n>�ݼ���k + +��-��j|a�htF���j��F/,�mV����� +F_Vb�#a�k��#�d��ʜGJAPY����� dL� +(�6 1�����К�3�8ux@��b�`O���r�� +��{�����!ě͢���G;���JYg� K +�%�(��������4��"��2�% +J�g��p$nS4�s�΄ �;�α�t +�ڣ�Z +Y��&��E���o��GF�i����P7n�SB$�&v���:-/͠GOx�s��<� +v��Gb�B�6�dh�C�#�(�Nau���ci�1j�j� +��@=�i�=Jx����/J�"�P�����κ�r�f����7M����Ic0�n���y�ˣx'��M�_�o�TR�7�Ұ��haa�ѣ�m�0�;
q]p�13�/^I��}q�K���cff��_;P��i�=vz��2A����=�
���U�����7}Fh�B�� +x� +YO���T��&�����j�e�� +'��Z��q��i�c��m}������zBz���~@Q�;4��C������?�F�b��Q��tƷn@?�6�x +ԥ@��%g�c��m[N�M8P�D]��p4�j%n D7 +����J�BV�W���Y�7���/�����j =�a�tD�Bl���!הڐ����Mm`*����# +1A|�\~+/^f�b��Yi�Qy��]�@ ��'��7�Zu���Ó�����fI`��5XH.�L���@Y��Z�� +@����p/��2���ō4|��}&�b�
� �(���s��F�X�=M��w�����N߰t��Z@;���[ +�j� +O������n֪�.T\TJ+F矗 ��^�m��g�e �(���_"����Z��q~H +���V���, +D +t���t��8��l3pl�2�H�s5�]���v� �_�y�B~0LH��[U�`R�s��Ƕ,�r���r�qpe����n����-�0�9�N���@�9��&�a��BQ'tV�6=�1�Ir�tH�n�Ͻ���>�t�9����@y����7m��{���� +@�x�MQ����/ҁ�q��C-��%�p�{��`l�b�7:G@�`^(άD����O��j@�6Ʒ�,"`�4� +�(p%(7mԋ"���Z�A��+#ȕkI +�w����Xj.c��)����}V���ѫ���lXVW�P���"��(�~?���oF�?�m殬��V�B���|s�7�xL��~?A���?.�y]����'8�^�d�YU����F�|H0�e_.FV���.}r�ΐ<�;sP$,�6���
�ڿk�kdK!f�*��y� +���+ғm0�y�V�¬�H�c��~�B;E5�K6��:�G�<֕����su�
��o�/�v�0�8�7!'JQ +�ݮ�m��B�f��FKPP�YRZ$���e�C���~�7�����r��fg��8XΓ~I +�ij`;�"I (D�������M��%�Ǖ���\�̄�F���`��ǔP�' ��
�'���C����C�U8Uf��)�[�(�/��@[���u"u$���\ө��)8c���� �O+� +!q2�;~���C��=�F���-[ߕY�7���@������c��o�+���_�F?�.}6:>>��ΎC���b8�!�vy���;o4<�<�x7qK}=x� +{_5��`%S-~ +���}����Qu,Qk�˨�-�=���5�f� +�yt��JW� ByaX��</�d"_R��I�3L��N�e��ަTe�f� +ӏ�g��hX_�L]�~òo�@�������P씙-�<j��J���[�{�b7o��`hΏ���<)��/�KOT���F���k!�G鬗�{�{'��,��Qn1���Z +H���Ï��u��^����Ȗ<:4�aS,d��)���=�OW��% +|�-��s�cz�{ƽ`� +�L� +�p�� gx�g8n���pa*�Wx�ia�� +O7��CޑC�Y- +��,�Y�k��x�Uu�*-�a�z�������_��g���H%�I;��fk�� +~[j�hPWnI�!p���_~�e���7�g@Y7���h ���,>����/(��z��,����G��*��n h4����r3�M�����v1��oJ)��ہsQ9`f�w�||$@�W�٫Wߊ�����K.�)�ʄ<*�cs~�<!s
����1 +@��@��s��A5�O[��(^�#�����woa9�H���5on��#�?� +rv?}�-����!� +����,�C�kd��%�rA�U���6��KX֏��^AO������Nj�y����*��Z?�*�N��c +��B���������燒.��n~��M�#k0P���o(V�Ae�h;��@\�MW~~�+_���Z҄��P'- +�$
��B�$��hհ���� +���6w�d?� +�t��M)|=Š ��Qn˨�y�/�sN�9j~і�d�4`B��'=�[s|�l��z�YW\�W]K"����Ys���Fl vWZ+H.-�������R��8Ǻ#L@�$^D��� &4A��x&�X�#��'���xV.u{5�����&X�Ĺ�Pܭ"��~��tga�,���*�C���BV�VN*wW%G=� a��Xg�ܤ;���M�[��-lXvUx���F���&�8C�dc�{�[�����\��zfV P�%!�|��eJP?����(��.].NU�������& +���-xg ��l|yq�N +{����%2��{r��u,t?�Wu��7�U縋�8�u��8�cr��"9���K]Lo��+\lj�����c + 3�B���<�\?$J�J7�ɚ��&�"���)�W9p�����)�6��U��Ea��kGwYS���1:<��������:��yo��ǣ+��p08��C +�:W�����Lo #
ʗ?��β��{��[��C1�rP�A�E���\5~cMڼ�\��/<$B��A�U�s��f�a�%Hq�gJGu|�7L���</�$���'�R�K���ˀ<�՝[ՙ8�Qj��aE� +x����_!@������ggh��O��������/./�.K�7 +�E +��>}��"
��џ�, ��,h:@f��F?�*b��4}�*@�)I,�D����8H..@k�W +�~m13,�JMݓ�E�o��B����o�$$(!JwC�Pu�V8����9�����r@���L��ƭ��P/\���L<P&zh����1��U�E�*+�(F1�x��6��{�����a}�ݍ���F�_<e�߉�O���8���ab��b���s2��b� D0��q�z}�8W>U�W����O o�'�T�J�u|!�����^�_��d& �'�W���\x�{�G9��Mtz�����Y7BY���Τ}w��z���8�����0��F��p���=v�v{�t��n�ht�-28����aA�e��"*���Y$��yt���N�L��$��[k#�W�y����Ӄ����W�~'k)�r��-�6 +W�ũ +�% +�
���3�Ӣ�B- +m��2� +ϯ1+�C�hЃ��� ��x��:����6�GE�L;V��7�n� ��}��i�i��СG�B˿���Y���F�$�wt\��������Ƌ��_&Ua���O���\�j?�s��[N(Y���yxT`�- +����Am�{5������x��XJG�#�Ψ���r�\Q����W +��̪�p��7��]�6�p�m��A��F�k�/hWNy@��x�a;9 +���9 ������مv +aIY�%�%������������`���esުޞI�?SxRؕ�y��g�v��E��cya���bw�;k�֟ �%�� +�o�.>��i^wXJ)��@�0g�����9K����v�nҾ~'|������^�w�<@� +���^ӞepD`?0�����,'�Q�ȾZ�֓1���`"��r�l&��~�Dc<n��ύ������?Ec[ +�(-�BC���-s8H"r��ȹ��7���T!���9�^,)������ +���L�ym +�ȅ +��^ե����W2��5����vY6��T�$6F +���Κ*��$xU���bo���� +~��z,~u�<�q}�`��L�)='Q��)�� +��@Ml��2���gc��v%�0�N��ڧ]��I�ӓ#6�7 +*1 �������dg�X�?��t��38�!ꋯ��T���S��>Px֘��7�C}�Ĉs�c +��Y��xl��(R�lg�w���s�76{W�Q�=# +�l\E^!�2ة�}�O��_"�S�5Vb�ק����b"����t���>|���Z�7������S*v��+��4�� w����c��
ڿ�G��N�]~%�~�� |Fs���[�w���Kp�I����ĊOn�-�ڣBA�]����I�cu +�#��8��� +��s_\Mv��%��Ν.��^�G^p"�$r39���z/��yqf����Ϙ�h>�iE���ѭ��io��<��[�XCf? +gb��$���YPo��������%b�������,���˓����������w�D�yo4 +��7>x��vD�����v�Q,tS��2�X�S�����I@;�
�0���:��]��9�ܑʾ�& +�2�mxr��c~aa��������3��||�6N���3;�oAp(�D�j�[3�x8�.ic�M��^M�GD���.����X O&��=��n�i"�����CF�M��IvĒ-�نO��-�{��Eb�a��<)���5�X��%���T֥��{D����&�k��p�7j�:��.�$ +�0�Y�* + '�}� b�Zu$�s�G�
��W^W�IU>�P�hO��h�j�[Z`��-x�������RcM��;��\͚?v���KҐq�|q 8�.M�$�s�������_��Y�X�=��8���I��'.8�D�GP`�.:6���_^����,�U��}���2��&:����Lc��>�`����8?��o�ńHa8
y��uK=U��9�irrT���5�W��`n�� �hp^b��<�(�L�Ŵ�l<���~��\�
��x�?u���#�dr��{��X��[&ҋ�m>P�r��ec�2P��{%=�9����c��G˱�B�,�1E���ă�Ns&�O�'/��[�� + ͷ����U� +�~�����t��Q�^ZW�*q�J6*�t���ާ����)���6��0Q9.�V�����W`Gf����~RVe��aCm����������H8K`�+2��Bg�Q���~�) )Y���Q\:����!���G��>sKk�G�2�*̒���'(�l���Ksˍ��7_rC� +biyVg�w!�]��6���]r����x����Ȅ� VA.c;4l:�sa�u�� +��`@�K��hg�L�o�No��N�� %��g����D��S2��+�����1�Ho�͍f�̜�Sp�� +C��0i_Kb�2ߙd=��V�av��7��x���#U����eE��nTJF�����W����ˬ�'CPt�����[[\��|u4e3(uU�ҡ�R�� ���� +��A���D��YO�HZ�4���G��ۚ�g���-�.�?��=J +ORtTxE�W0 ;��!� ������P�-��4)��IA���?\�{�Z���������A��>������7�%X���T#�O�Ǎ�ΚkN#-u +�-E��u�.��a�����WM�17�)�u��k,n�yB�@��OE������$�M�RfudBdݩ^��/ +dY*\�)��MA�:!�5f�M�O�bXQ:� �X^[_[nt�za��0 _�֔�xJ97a��&��uc`c�]�-?�~�7֖g����ðEm &�E� +U�N�:��@���Bx�r��(5Н�tC99P�Z�^@��6���HU�N� +\^��b\E��6v!��U�g� +]G���E�oA�J +1�r]�W�V�:��c���ކ2,�u{�r��+^�y~���J
HX��H��c�$ �]�\����x��[���� +�&�?�+�B�m�Uq�a +%���=A����vER�˭F�5sl�*V��M���@C2��9�5�wt2�K�1k�ް +�D�ɏ�?$ +)5�J�>C�K�4����ȕe3� +7��<k�A�r'B�Q�M���/.ޜ_���V�{�yw��L�����ϖJ�5�}�Z����Nm, +*mT=R��]���0\luZ���g�G��Φ��f�����jUuz�����7��� +Ju45�PFBz �T�X�;��o%�ʟ�b��737 Sߋ�5�LNZ�|�mg_�z��K�/�����4B���� +a76���İd9@�ag�Ы��( �"�0�P�7aD�͵�NX+Ɏ
�{�;��N�~� +Ju[�)���Y���z�8��L�&+:!N:��P�3�;:x +i����GY�rϸ+�IU.�SD�A�8o�-*��:�_���`�N�;E +U�d��2�H͂uR��k�_�� �tr�R@���R�����ww�~�!��L?P+�m�n/�\������gݢnc�3�~��x�;$���h�'�b:�-�đ��`��Yƀ)x��(?H�ͬ3�_,Ȁ� +I9�b|�I6��+Ž��2��(�.ݥQ���nB�Ұ��d�YK�9��fu�x���`�*͜��x��*6ސ�b]��fy&�Q֎}^���s���b�74C;����8�#�7�Jg6�D=�o�� +] ��� +�,�^+A���� +��1#��͵N�`$�9�[8��lu�s +[�z�U<��'�"�ä�A)|�R�#R}1;��g�����4yUǎo +c]�9c +u��2��Br��b�� +��5J��%b���7�,�l��û˓�<�4�S��Y �������AZH��]�vg�F����J����aB�����πy��%�2������#j�"{�&�-S��b��'9�6o���m��@�<�a�(n��ߍ�zR���X9�����ׯ/..�Xt\^�Wv���k&X�~s�.�T���$ +s�ZHV�bC �����ʎ�E��E�n}cS�N�Rb'9������H�c Y'|�+���#�NR���@�;�u�Kd��^�@���bR�u�h)�"�7{
Wcu���qV��;p�76%9����ǷU�ܫ�)�6��q���9�L����]��Jo%Ԕ�H0j��<F�|�SB�a��e�̢ҧ�沽��/}� +%�R�l�����]���o'vF + +��D�9*Pl�Ո +�֒x���N�7��P�_���9�.���^�E�)�8���a�s��pQa�6�?��WOC,��U����bGH��!;�ޔ8�Gg(P�āD��D#B�1�{�bQ���q�܍O���|ÕP��N +0��u��䞴(�8Y�w�d���l��,LW�J�: +D�Pz6%5�$���7�P!�w���%��bU�9�����r8;Ǚ������?�vV�#vA#EW��0�̓ް"�Zekq�Y�{��u�X�WG��m +��+�y�A�Ux;���^���d�S�d��t8:��b�� +��T"6ţޫ��{�V�<:Sy��.t�^�R1sD�+�}��tZ�l�R���S�V�PIs\e�2㚏�t�@��M�2����zM#��|��ZA)O��c�r�?*V��WwGH + +�/;�)��py#>��
�u#�����������./ +U�^��&�Xf'������|��vί���qq��� +"���?�/�G��` |����1�������߫A�uP�$n`��h4��l_*��{®�K1�M0����?���jD� �r3{����}����·�_�cy}Y�Foǃv�F�dS�˫qY}�e`
��+��q>��Y�:*���ϒ"N�����GG���X�Y�qT���b�WW��VN0��F?%Ϋ���d����6�`���������X9Q��f(�Y +Q��i�� +�� �͍�_\J��+_p���6g�zż��P�ѱ��w�bI����%��KF�~�:�B�1��N�oҬ#t�_�x"��x[)mY��;.�hv��{��5�W��b3���9��\����l�{������� +�cj�0R���VoK�tk�L�j��+��O�9� +~�Ƭ}��E���� +�v +W'Z��R +G�"�ey5�m`s4m�^I<��xT����{uA�S�uC�mv��a(2*KLz 딅��@.��1TM)ͻ*lf=��M%gza��]�y����WVV[+Q�R� +��h�*
�nm�]��X�HHԯ�^�;U�r��W�a�!͖�W����<��.��o��Һ0�T-�IK�!�4e�c�s��=i�_�W�&���dl=i�."j{0�C�I�x�\��D�\2���s� �P�� +�C��� �]��K�O���d�^�}�
��#�۹��G��^�0!��%�:�wD +j��t����)r(*ϑp��Y���ѣ�Y��))V���l�� �ȤlȍsB��ku��ܧ�Z�~ "���+��d�����͏y��b���\���(A��d���-�Rh�i��]�Jpd���9�����~@"� ��?�(�CM�vr�iR����i�`
]�*87��!L��{�ů��9@0n-�-���S؛���RD�8��F�C0�+ +�ka�e:(�@��� 0Β��٘����h��{'��4��p�������poo{[���������P^2��J��}�{�Y����x�*�X�͜�Q�)����eu����S�w�meW�.��p���-f%-�I�ı#���2���L��D�E�2�jp�]�"h�e�R ��X;�u�.��[�g>�Kp���<�\��N��{� +�ov�$��q8Ⱦ3؝8)����a�����nm"t7�1�0:qms��zu���Yw�t���~5�U�b���p�:�GZb��ֳד����CO�)�ฏ�ӂ~�V�K��̡���ݪ����8ms�?9�U���s�.��Y0��o�{vt:�8�'�Hn؆1�$�}5�������3oτu(�@����k� + +��ѣGO����˷.|���]������ +�#9j(�#>y�7���*2���G���=�wFo&�����n7����-WR�ww�hCz���o��"�[�o+�
��]Ėȫ����DU7��a�I��@�F���B����:-�wi?���>�EoleU��'u��������b��������t\�f<������E@�r@�߾ +�!L�g�b�@`���� B�L�%6[pZ�h{XcT��$,ka +�zK��W}Z����.���my^��$�Xvj�j�}�z�~���ڰ�@h�� J��a:gx�Ш�;m/��59�\���j�g� +@� +���le������% +`3"d�kM��P�Mu���4���wJɝH�n����˗��9K�>��_�����y��I!'��B��,f��)�
�ClU�r��Vz�X
@���c.��ُ�~G_�;�ȲA,p59Dmr�kv"sD�#�y +����]ì��PI����(�ě�ۣ��j�h)����iRO\���Y�P� +5�w�Dk@� +�,��⏠Q�
M�@�HU����g��NS��3�+w���~�����ΆI^�J��z�%H�X$��:�'�h�uKr��
�Z���v1 +@������B++�_�d�=��<��9�������0��H��}O�l +��z���
#39(�A3���ͮ��=a`���/���9�ʕ�3:LL.�5ź�FٌX�:]e�,���q�w��;��G) N��m�؇{-� +�������S�_�x��g���h��O�iȖ oo�~��Y�"`,a��-rD͌ ����s�^As5�r +��u�;>��-��tīX���/���2��I�u����)������7����M��E-��5S|����3��ƭ�P����k�<�] +A�<�L��:tY��-��|�N��D�ޠ]c@�� +��s�.`�G�N���{��i3tZ�9 �>�g�|�����O� +�^�ɰ��B�ĺq�)dF������4��*xFX:�OR1��� +Q竒�\S%�h<&���a(�FKJe)��kyb���e=�-��?L��)j�'���)0�ꥺ�+�WϞ5G�<�f�� +����)���b��
n��q����� +c�o��GHT�Ac$h�u��Z$�ɧ䢛�Z�]��Y������u���^H,D�� M���D���s����-�;��%)I���J�l(����Q=�#� Ԟ���r�����Q����
n~�bG��;e�y�JBk�;6/qx�(I%����S�Z�"�5)X�7����2�ni����.Ԝ��~��s�^�����\��f�\�K��x[,BZ����-�
�ܹh�ؚ ��٬��։\���[AS��v�* +�����������c����˨ +�9��+���v �.�nq6�wT��ד�}7��+�Ƃ��:��%�������1{� +��� ++p�뎻��(�H�mR3�B�N���Ao�Y
�jT.�v�W'յۇ�Ἲ;t}�� 0��<���n�&�~l����B�Xu;tEW?�Y�r�Òpg�Iv�ɲ�����6A8* +<$Ev��'_.��02Q +�,�c�� +��5Ӯt�<<�p4Ҩ
A�I}��b�����52�y�G]-�Ȇ�sċ��dr6;�-x�,2���}]B��B~��WI��`��5�� +��e�( +��c�����Q�Ty�|��tv�$�Lf"�0�99ھ@`O-���Y_�h2�^�;뚺���@��h9G��0@!S�O���u += T�� +uiq[�0��?�������2��C�|d~f�$Oi�����/7� +��?_�i�ɂ�����S8?E��*��^�z��r��G��_x���<)�u6(� +�Q2#?N��P��.���Ӽ�A�����;iP +P`j'�Qi����L�U|�t�u
���R��@=��xv������2 +O� �{6.peC��J���S�G_`D!�D(�i���`�"% +ٺ�f�&��|�3[���������^�v��ݏ! +���r8���v�OU��d�����Ň���@��ax���U џ"}f_٢�vQ<��`?8Z-#Y�$3�R:�.�dIZ�Z: 0�]j���@{xU}��|A�|$�N��s?i{ +�N:U��'N�-���ј|��?��L51����q��Q��R��HJ�QeNY�MZ̳�� +�G2_� +r7� +@�K��$*����.U�V��������/���r�^�?dr�Ҵ� ���/��c��M��������)��L�ɺ��$_>EC��P"I�g"S��T7����&���"�`c�x�9������,�4�sKHF5X��W_%ɀ�̭g���F.b�)��c��$�l +(Zl��̖9c������W���u�9e��7�呌�/�ΚߟYQ +�m����'�d�\߯˞r�q2ei����s��f�p��-�}n��r1;;���n.�ě�W��\yZ;����+ϵm氆HV��?}�Q�4�լA4�Y��gg0��T�32��ߖ�z�BG��9�S��>E��5ˇ�ju�����:�g�xN��m2[<�T���s%��"�ns�\G�b�$�I�cr��3��?sF8��sK|#�c�˿�����ly��J]v����--������IY�A���O����.�u�Z8]S0&���) +ucWT\��B;�P�WV��)M'�N���r| +$�?}vk�'o�7�%b���z4�N��ٽw�."ׯg+�
!0 +��e,���ù]F���WMw@a��(�(�}���'�X!�0���'��Zz���δ���1�=XJŧ�#���7��_�>����8��}�u=s +WW��|��a��Q|���í��O��0����[����������Ngb7a�=YE����]_va�� �<L�.���&�P[�.8w3�˜�A8WyA,�+���|�Io'��Z~�ܦ�'�ѼAx�D��_�����`���S{��i�v���C +��U +��h�?�����i���B2��ﹳ��b +�<y4�q[9DAF(:r[qy�z��� �w�z�?^��ݟ��y~��o�3c��8t�,k��o���!q���nz�Cۦ(��ɓe}�ݫ�Gd }J��RCx�9�mz-���t�\���)t0��<\4�b2D��!]���?��̢�g?����&� E]�v��i��-.Nh9D����3O�뎞���~��AWN��~{N�d߁�$AZ����YC�XtH6�Sy�����{b`�p��0�VEY�����\�ݘ���]��eἱ&�YpӒچϭ +|�sM�Q]z��\@L���fw��ݞg����� ���ŕ+[�vb�e;��.����x�8�1��hۋ�BG�Ax8�@�E&9�h�ow)���E�p~� ,F�k��=��ЋrA
\TCs>����(c73�W��|��[�]q����n5�x�w&�����i{ +�p���같��r�y�%�).�|8��ɾR[��xI�4�>��_�v?�� +��@�t�/��-5�tF�.�~5LSTB)*��F����N�s������/=_�1���4���G(�����>�����\ͫ7Η�� +�I6����劚��t|��!��7)�-ΚY�ݶ�s�b�:J�u�\���K4rZ!g���!��BB���k��!���h9�����'<�c�$��ʜt�����C+n�xdZ�$�Wh�=����M�̙4�p��Sx4'j-V��e��n�fv\�ľ<YՆ���U�F|���w��E��g��]��j���@�FZL��߮�����&���Sl���VZ�҄�t�_�f�p��h���L����k9# +,4���(��@��*Zi'6 \�5� oq6{�����Vו�T�.�:@ �p��au���mU�4�@,1E���a�;�R�"�&�5��}�4�@�~����
9#��z���� ��1�~���x�\I6���� +�Y�R�L�K<���)}��xH���x�*���Y�p�3*�H������������nJC܉Y�G�"�����Wq|8��6����L��Q�����1�����}�����u%$�_sn����_\��(��·����"�-���Ō���l;�z��LP��ϐ�9W +Ho~�ӹ�&�]B��ZI�-Y���F6���zf5n�3^,G,�ك'��99>�g�= ������ۡQى����HL2�OEC�t4�]`otm�����K9�-��3���ݓ��1�d�y�T=䎶��<�9w_�z��̭�8
; +@[e�v��i7��gt���ߛvG�]�)_Y1@�r���r��o��{��[#SGZ"�=u�����u]Ԥ�f�,e� ����* +�}Jv�B����:bU�QrD#����՝\����{^���� +_�x����7��z��Q��D�8 +@��� �a;�Ê�Q8l�p�5 +����]E�֎ҽ`ˇ%����P%�$mT�w�L��[Hkw��+����ߗs8�֦��]�K���������/����_�� +��r4����� +��@�L�/�k��ڑ����w��K�N�,�����6�*�����N� +��VU��K�5��^�)����Gt䄫�B˓נH�<$�Ck=�t$�V�i_<����6��A�6Y0Qk����ř�A���X,R�HCi�j�]���6ɣa�3�{&����n2���q3�a�e�Gt�� ��t0=wV�]Wza������;�x.S��Ԓ�y��BX�W���U6���05����Ң`���`dR��w�GjGy�v}^<�Ӏ�Q/ǣ�D'��p��#"!e�\�N���=�cF�传���ۢ +�e�| �x�����z#�z����;��W�U���Q����qB�$@�橺�9 +�Uk)���zm��rZ>p?�i߲y�6�eZV���-�>�Mk[FP�l��06��k� +a�O +M�?��7,�Ě�o]��|'�8�{|���V��/�Չ<[������rvL�q�t6�����ӥ+ ���r_\����Ѩ���z$ O�rص�����Y.ɷ�j�����ָ�����;;��
�7g�������M=�j�v6�N���gOa���Q�9����ٙ +H��F%'����~�y����}����Q"~�Z",4�~��qث*��x�]�|��/��se>�1往�cBs4 +�R|i��F�^��D�ѹ&:��2b�NG���e�����t��kDb�O)�G˜$���+��W�{���ȹ�k���x��v���S��L +��&���/fk\SU +�F�( �JO��I�~�T �&(,�(I����@V� +�'7�o�U�ݿ�Eu��h��������O$Y뽞f�3�к�HY4���Y߫Nܣ@=�#�k[�PQ]�2�oS�'c�R�Nd̒���v��h�{���b��4�la2���t�!�<ݯ�]��ߓ3^���[T��q)?��Y� +���u���b��s���v��!��t<��'%�~V[����7Nu��>Ԏj t�FD�^(f/OP�]�@D�i�;�?�D�CĦ}��M�;�6�nK*��|�5�H��[?BZ��}8/C�j @Oy�u�M��1-�%͘4�7��k�t�ik�� +@���}$�~�������v5�^�).�}�C!��wzY]�Im� +��}��Tءĸ������t�ˊ��M�9��P�tlh��)�{�9t���6��ӣG�y�� +Ăot����6N-��Bq�����<4� �i��3�Q��[\���ͻ|b��Ȯ��i�АO�e���zS9� +:Kk7��Al�[�[nh?�6�A#�Qw Ԫއ��y�w�mO,��氇�R�bm�6�.��dv���x����m�_�o�GOU���PP)G%��F�\�J�덎�<�=>a��LO�=�D���ƃ2z�`���s�0@��@��)����0k��t������@k�64�Ԉ���y�Rb���T��bA����A�4}A{�V݀܋��\���Ec�������ǤE_���١�t[`[#�OBd��
�v9�y�繤��!2�Q��%�J��/T��p��4{�9��w��n��.�H�}�BLp�����^'Q�3�����s +A9L�Eq�G)�ѵ�g����c�j�:�O�W@ۄ9�����{�8*�9�D�CQ�]���m�۞�� �N�Ag��L���{�@����Z�����D���tǁ +�\�Yq���b�G +3<� ;K3��� ������w"� ���+w i* +���bl46�_Mof怹��T��H +2�n�'e�Gt����yDG���ᴞ֏Ͽ9zZO]!�Y������{bYi�UGK�[���S���ڧU�\�������y�h�zH���lG��:�[�<��Q��! <�Ų�;8������ydW��N_s�0R2V����|ۗ]7�9x�`07�{�N�b%F8���J�9��i���o�L��������Q
�!p���bubq�n��Or��\�J��v�0,U����;��˭�_n
m���/lb�ʹ+{�գ�ySb��c7)Fۇs�>�V�^3����-�.s�+��4-��1«�����C�����.~�*�=���C]a���9�vr�t��д^�S{ri�y�h�8� +��?����BՊ���镶M���~��� +sr=9^������#�D����MF��?T +&Y�%������\��0\̚�t�z��6����N�p�=[���:��|�E@ޮ���q�����o=2�O�P��E{�5W�n���4_��R +X��9'8'��ɨ?{Ҝ +��3����N���}d��rI-���I����6���{8'�ǫ���\>�dZD3����,��� +O��� +�"x�5�&Hd]C��O�����6z����kg*(-��� +�gUg��J�K��J1i(���:�v�'0���oUJd��,�B���nI
+Ê�=� +��Wץ���tf^�7^��P�W<���t�s�(t�\�I�R�/���. +���� +P�W�v��ͻ)J��*sd|�k5�����R� +�k�����"�C +��;�xCë�%i�)��fԙ��S#�"C�)��u�}W�B%���q����÷&ұ����c7��L*nZ +���R��r�4�s�4�`%�E?��U�Q�F��/m��|I:�����b��}6�@��beݘ��}�̅F���K�x���~a1��ԴI/�w4�_ˉ���aMq?�����0�~����'�n[��y!�:lF�D���N|�%��mC����e�5ΑF�\�|ȉ0_���'�$�:YU�_��GSTE��샌��v���g���_�vI[��+���
I�F津9�NDثv:գ��U��"t9��gԶRb����h|�RK��]�Q��g�u+ڔ��K����ڜ�&����O�n�S��`0�֞�2�% +���4r_b��0��X���� +�c��<�'�9�O
��� Z����i��C� Yɔ#�-�$�ku ��ׯ_�tf$��3�>~t���L�u��� + ��Uۃc~�Sw� �lJz��Uo��u���b?~|J�v�5U�X��z�,w�( +�R�&Sj.<�m.`���2��A"�w��ⶬ;�~2��C�!K��p�T�j���:�'�y�n��I��QA-2�~E�_��R�)�����/�����Q���<��|���s5sYh<�퀤�k9ϴ�:+jZ�J���p��,8]������8�%.<>Z��%ED�l���(�e_�1�����+[��/��lg��HS�{[�t���f9�� �����Kp��NM8����fݠ[8w����f�I=D��L?�P�4 +�\�U��ۡ����V��;��#u��E_F�������$/��e�/�D��A/@�����l�.�g�x���Ϗ�L��$H��o>���c������� +�~�Z���I���o8ˠ}�@��
�4��V�n��T9�A�\��x�{T��o���;5 +2;)���~�V� @Ӽ��z�(����Т��S"y� hI2GU����������&������ �6u:�D�IWj��m}H9U$=�m���Mn
���T4�pU-.O��I��^� ���;�e�% 4:���ֈ{Q�b���8�J����~D&8��F�&�ń̫����z�
�����xpq@�(%W���]K)�S�Cز�5�����;�"��)�kCm��(�XI�����dZW�N +��ٟ�OE �BĞ�]�I�&��� +Y���9�m*�O�D)�~q��Àʛ�>ի:�OA�K�ܸ +� �wl>k!�Btڸq��'��8�3�gU�<�g�C�l3�|5��ˡ�d�=��R���} ��u��Ee!B�zInқGK�:�9����5�&�M�٦�k�C?K ]m���ɳv/�Q"3�\��NI�!;fZ������F��U%bH�)��VDv�L�&9���.���Y�l +����c't�y:]`bfJ�� +�Ӡz�G� q U���i�� �|��j�k�|�����[�K�x|t�ȳ�� �ٳg/�����}���^c�P:��`�2;�Ͽ�)��8
������=�4�}G���{���#�p�e1;��U +4�
����Q�n�>��)Bv1"��]�'\�j)NP߀q.�
��ޮC��|�~Kr�}��S6. +�(Gfl�88�H98:5�k�%�i�U +�0�#{%P +�]��9�k.�>M�W.8��"k�i��N�M'���'g.~ٌƗ�]� +L�X��~�����l7@����@R��lSjл�͖U +����]މ�����o�8 +�����o�r�gn�,g(��2��V;� +*�zf?���y��`�G(e��!����r��X�-��t3�b��\��_���KJ����g�j +��By{x\6��=�FHۯ�����lQ| g�� +
�0%-������& +6)��d��!]i���.%�-�R� +��r&�X� ��� z�cX�n�I4m�G?T�-���6ȑ�d�}U���8��,E�W��'4�F�}l:�RI�%� +@z +����6�Bb����zyzh{w��c)F��Ӄ��4%�UK��2k���uO{�]��6����-��մ��ј��G�96���z�'eE�����D���o.�h�P)�2����zI��˩�u��2��Y.��-ޙ� +u�o�W�[��Q+6����V�n���R�����:H]�>�%��/;69E-���b��\��0pJOI�f���Ҍ���O�wo���+*���S��[�* +HΜ�Ť��7��7������h��/�_S�i�W���75�t��*�V�������D�Z�9�kX�:W�Q�=�^�6'� �F�-*����̭� +l~�� �U�{�ZݬO�z�Ww鲛�t��r��07������ U��<r���l�<����Z}��� +��"M\�οES|_�xn��>�_���OHM5�n�{���Qx �t,�{ +E���[�~���)m~a-�XSB3 +�J��u'����� +������ڢ +-�O�u;;�n��ww:�nN���>9�f{&���7�s,��K�ߛ9�����qs��ǃ��yx��W9X"�x���\+�zl��=�k�����fy���g-'{y������I��`N��B�7<��+L�Y� �0��ƓA ��H�$�P���)���(�d�����k�k2VQg7a��l���>C���ʤJ>�?o����h��x�G{]�B��! s����DkV2�i���c�^��H Y2��r�cD�I m�g9e��q��g�%�D��������.��"s�Eg�Id��_��^�o����"yVrs��⪼ͷ�Q�����6�L������sML�5yټv�MC9%&��x�}umk��m�歛�_�Z��>����5J��!�̍�&'�#4��Z�m3;Y����CZG�R�N���?�@����� +��D=AK�mV����ڬl�݂��c|ea�6.���=���9�=y�|��G�������gO��l|vv�<k���ߗ��[��/W'g˓l�k�`�j��7����q���'n�_z||O�A��0[�I ���ɨ���34�@��sU+w�
�!��d�ܨV�W�g�n��z�y���ɑϱPFg�����W���poWm;�?6?�~���W��ؓ����)�(,�z�\]�� +A�<9w'~�w_�Q�&��_ +}�|�D�]��ư�O8?w�����������K��N�d��l�/�����}z��|�@P'��)`�!��c�+��������o|y��g��V��i�a�."��8Rl���ށ�jE=�}���Ԩ�8�_~���=9?q�fR�����ѐ�&�Ȇsx�k�<;������Qs�i��L�)�k��]�����2���~1��y�M +�����G�G���||4>� +hk�v|C�?p���\՞��ްO딦�Y�R[F7��FV����)�8'uH����if8�J�� 1�x�v��N��W
�J�� +5�Ӹq'���~:��� +=�2)QaQ�S�������t�&���r�s _�o��O��)����M�i�O������go�cۺZ�/�n��sy��g�ï�����
?���i��Z uS�H�v�A�(�f]��oc3��C�H�F�!��E�}���]DѲ
YX��jԁ'go�=8Zs.�t&eO�?P�?�iN�M���G��d�b�B� +��Lx��
x���j��IP!^-kJ���y��oo�q5��W�������ھ�z�W�;�J/W:��o�8���N���D�U�y�F'�Aȴp_^��p^x i�����yǤ\���o8��
D�'�3� +�-�9:ߍ�̚:��S�?����IR��e��pF�p���O3@ g�}��[����t��sW!� ����1�����32�?��� +�2�0��l�(E�7�t�w��k�����xʝ��R��������Ny�y�^ +9#�b*S��D��m�^:$���u�b�j�Y8L �W��]$_|8�������g�h�e��9�Sa48��t�;{�)s��N�5&u�L�c�e���hz��0�]3�ikTyn!�Կ�~���G�o�X���ܴz1P!<�*{�L�h4�߀GM�Q����%8�0+�$FoZ�I�|��q�����Ѵ{�Ɲ��P)>Z�����`t�&����w�F{��5�n�
;�~�_�2��rH�q7I��?buabP�����yU��
��-���R8G�#�0�n�C�����Γh4����I�듻�ūk�+���TN�7~3�̘��?%�$kT��i��)��Lt���%��t�ק�nS�=�4.GN��W'k�ÞpR�~E�)<�'Ka4<��'�p~�}P8�3E[�����Q���i����^��<߸d�������>��ܸf�L7@�5�@5�>}�^ +����p�L���*�<`���=�&>��O*�en�ܫ�~�Ԇ���\�X!�F/���`{��<��x=.�h�uj�&�k܈&^ܬ�(��l��wA��������k�{ׇ���[I��/�����c�v�������z�oT���|�w��ܪ6��=�
� ��J��'ʕ���RAd�U�o_� +�P.B*ڡ��v `���^��+��-���imM0*@��l�~�D�Q��<].rUt��_^�[D�?�Cs?��7T+���ɬjꛥ�1�݇|����l���6 +@�n[@H��Q'�W��}�'��"ӨW����Sfg����T�?AW��j�#9_�ͫ�jyN�h�ٵ�գ��y�\��Y���i�<_4.T����|X�Y�^���ys��k�
�u��i�8�,_��eUϖO�����W������USO������͟���=cO��Vo����������Q�hٝ6˧�՛7O�y*G�KT/���1z�Fs +뎵ه}�P�r��X㯏�p��7��GK?皕g7� +������[�=^,W>[��+���SBZ6'�I4�?��BH�ɓ7�.����h6�MTjr�~�����V����ޞ�����rnG{�<vhC$�5�����Ξ�9�n���E5�|�o߾y
���_����gp��K��5����ʫt��K2�%�m2������d�,�����������s0_�G������+8#��".�fgo������6>��yk�+ +�{����ׯ�ϰ� ��)��z`�7�_��� +�j�sgw{��FMг���M���bpGHp�*�a�E�.H.Z�gH��B�ꄡ�{��!���� pt-C�P�������իwo_�'R� +��f���������l Z����CP]�"V�v���"U�rg��n�I�Ju���d5U��ܴ^���ܤ�;sg�7�N�]�*:�qтȶ��/��rp�Z��1�|�o�O���5����9%k�L��}��r�Uk$����3�BB�MZP�BU�X�F{(���?���J~a���3w��>�kȔ�d�����Io����5�3�[�N�{���V��7�7�`�!S��E�l����C���f�>���k��O����[���( +_Dz!��-���ל[����%�B�.0�~h���-��/��
������g�%}����l��
���4�� +9>�8/s��ֱ����Ӫ3�V�H��\(��D��(mk�aԄ�yy�����ٞW#[��2��9��ֿ}���}�C_���W>�|�P:����?����[e3�5�mD2�~�� ��@���i0�$��u��8^�*qy�= U4�����J�TRt�OöSS���*�Ks'���s���F��i`:���b�Q��#Ծ��^sOs�L��I�\��T��~ἙM��yZ�"����:�)�h�rnQ�G������p�4 �?I�A�s�:N�������������ӧϰt3����g���� +��=�K��p�G_��˄B���5f[�oV
��^��<s[J��'��V�РX)\ +�qUP�Epk��E�L�u�Y}�Y6�4+��C!"�&�6R5Ή�0^��;���S�,w�.� ��?����pTK������R��O���a0�+*$���T�%UC�생ze
�L�� _Qh���C���DTQ'��8&�c��m{/�H�"4
�JQ���ț��3��"�{�^����y��6�t�]}Knh8W�ɣ��5� +�W��2�v���7��j��3�K�aG���\�����h�z����øE��E��q:�li�3�p��4�ФD��� +�o�����~�?M&O�y砩��q(�u�l����ĕ�ch*�n���v��-�P;th�"5�( ��8��4�2y�sE8���ܔ�iw^�o�=�-���苿/�7G�c���к:�$���� +�� +D���7��_��E +�~ނ�Ɛ��}~�yX�GV����W�z���y�(@��������Fw럨W���5NP���˷*��~��д��f!�ִ9�}}����6O)I������ښp>(ښMChq!�m��ht�9��@��9��VV)c�v�%�]�3� +Eq/(�.�znHk���
%�R.w0���&>)�I�~���m�lY +J �D�a�cS^Mb>Dr�VV��a����Vtd��@���W6Ky���= +�y*żIA""J�����Z����g��Ї����P�2�k���� +%K��dR���g_g +,���Q�%2Wh�/��a4�%�f���[���%9'��-4�OI��_l}���[���_�z���%jСm�aug@�A!z0
�W�����diJd;�����,��qv����"/�:9bϋ)���I���~���ɱ?�����K?�ܵ~�ʕO�n�S8L8=:z4ww������/?u��9�� +�5�r: V��(X� +F���~/�'��;P��[��w���wL�/�Cx���E ��U����n"�з$��K���g/���2�L@�#5w
W���e��-oBY�����Q����^.��~ߥ�'������f�қ����3���'n����EsҼ�������[=�f���
~G���g���J
��-��Y��8b�og��0�Bk��O���h��̡��d�<d|QR��ɓ�T��f�:�*p�y^�F%����Ϟ?og + +@e�^߯Ai�|ox�� Q���F`8������A��)��5�H�P�=9�!�^����f��� +@� ��6�aOV������ CSQ��{%��I�r2[5���PW˙9�|a�Prq5[^�.��]��
]6���:�'�+��9Y�#�m����h�'�'nwB���/�CN=;9��d5Q2i;�4\$�pO+�����FY�)ˈܕ{;=��X%~D?W��?������6�P)<ñ�~�A@�f���uϖD�5lR$B +fյ")D���ʧ��%���E�gf�2�Un�=�_���6�!��M0j/ ����9����N�1"~�[_Ȫ?X��y܄R�\mS��u����)��x]h�� +��_��3�}Z�<'��8��0&0����Kb?�Z��(j)�9?�D�"����j8�ρ�Z���g��T�>Hu��'#���g�O�+=�O� +@/�4?Fm�������[{����u�YG��,�N�����2LC�n.��#��At�Y�/�S�U�2 ��?_-�D�>�Q�)Ԯ��h�)ܷ������ڲ>i��v3��Ѝ�����i=���0�̰��~��sh��>=i��\��[%�,�ݴ�a�V�Ҥ�V99�9����Ua�ff�L���ӈ+♻֒�r������m'�nn�?��V>�^�T-��[�E_����zKL��N�^ض��Ԃ/��2 �Ǹ�m���P���[���U�wy|�Y6�j���4�D���k_u:}�W@��R���v�m#�����]��;p�C�=��)H�̵m̪�Y�^��j�^�m�'_���O�4N� r��H8�ʼ�� ���:[�UnG���jM� �nt�7P�<���/�J�EΝ7��g3��*<��ִw{�毗���c7���gN����%���>����s s�#$���7FS���~���i�@�`�N����x�u�[1�ND����i���@��
�}�4�Y���9�u�^�+�uۤۦ���ut-��pOe�F�=��.�n�J�䜄
������>�&�> �j��7^t�7��`ķCJnh<�|����ұ
,h��9l�D=��� +�_|�I� +9�x��6�-�����ɍ�>J7�Z�S�nt;����-�w�=�B�7�������ϳ�`�n��7�nQ����W���p����ov����k���au�=�nd�v�7�d�/>eW�����N�ݛ-s7���F'���t�9���9�3�Df�7n�oT��ހ����n�ڛ8B�t�� �>7��<6bӻ�U��w���m�lJ&�>���/Iʥ��m��ꕋ�ڋ���[���.i +�PȔ��7xP4�Dr���|":�Y�������d�
���x��K!��B��6@��L�c `�@�ybZ̜V��* &��՜�`�;;%��
˂ȭߺ;��X�A!�ۿ��� +���,�>�t[�>��'�����j�z�b���OR8�#�֭���e�$U�=~�V�� +�Gz�l���8� +私;��v��Am\��4�*m����uU���i�U�z�$
�k_p��;�s~ob��L�{�P�(�`z8�C-�G�&�z_ݪ�[����>�OQ +E�S�*��Q���m��u�ְ���h��@�$[����&�@�p��ᒈHvi�����)�P��v~OK$)�Du��?��''�~��w�s2�0������w, U�������ߡ����=~�x�c/G1Z +\�s�w����+p7�����}�j��k� �� UHN��J�v<��-�d��˷(��� L�����������>�C`|v����kBs�^�~��Ћ��D/����d��y-�c$����ӡԠT
Ƨn��1js�G4��n��U�S7���,O�%8TF���CהRd)(T�#t��2Rƅ�xZn/�rG�i?R�G���Q- Rf-߁��[E�ۍ*���&ꉥ���T��R9gje6r=�UV��Ѐ'q|�Q�.����G���Ym���j���(�uAn�cZ;7�A��a}������� +���166��F<�6��w^�9��|�ѳͣ��������+}�k'���!��6;w�������85:���d@O�ѧ��A�S�w@��M�w���(�(Q�\�����Q +��&N(X�l����㝫��C����&�0�n��+���?������`�LWĵ��&u�}��A�O=��$)��>��YJ?YO�K�����Jys��i�mq]U�l6[�?Z-��3g�\L�gv�cDi� yl@��}�9���?S +�?'��~Erw�GcMYr� +H�{����*�ˁ�(��%A��(#�>�v�א-s: +~��5�|����� +��>��� Dm���⸪C{'k��7���3^!L���� +��\�! ���ų̄�_���g`�c7�1r^ޠ�ʖ�����Lա>N%?F��W��F��͌��X���,5��:% �#�����^�J�W-i]����6j�m�p�������D;��,����~�S����#j�x��ٳ��rHOrQ��pD��x)��ޚ���R��T��n__�R'ypW�n�槙�2:c����v��mS[�-�9�]�>��M���W;�[4S_Rg�[oMI� +�Ml��n4�,�|�`m�K. U��E����J�0�����m��7=QuM�a�}�BON�ɽ��q
zu��9��>���s������vr�x�o�n����Qە
i=No��pi�k�����L��F�1� �T���Pm�#t�V�l��� +�'�!ڑ#�A|i��|����n7�#�JS=�"(� +�-��� �۸ԣ��m^A���.>�{���ш���k[;���[U�6���'���Q +ݷ+�^8�_�V�r5m�ٟ�\��ֶ,��aN�T��ۛ4��-������U�*檓%��CK�������k��q���a����7t�-�?�+u"$�PAA#�Yi����ٔ�)��\}��j���3K70iy� +��9�M`����?��)�3��K)Z]#0�˦�=�����[A@� 8��� +�'��M�}HN��d��g3�T:��6J��f-� �Q��8��oY�K��= +��ܻo���@۟G�-��+jG���x��*���HW������m$Y�?� +�ؖ�VY�i�hѺ+t;��e�F��R�]�����kHQU9b=�RM����^�k����W�{>ω�(Yr�w�P"�Od�����s�DȎK~�g=� � @��PA ��_�@O�0������O<����4Flb��̈́$=�_�'vE@�g���X,�� +m}���yD<d��>�:��e��Fm�J�cC�'��W_љ�x"~�u��^k�*�^����6������8��Q�X�+�:�<-wU�JƝ�ru/c4!�vU�a��lt��Q!��҄��v��˶;�H٥#0�d; +���D���n�іm�H�^v{�엪,a +�+�&b��MD�<�v˗��a�_�vE['\q��*oz4���70�G�R��r��wTL���={I����l�g;s��������/E�&����\U��{�nH'�.j��5��P#�fy�=��,s +�g���q�)�q�_�����N�P$N��.����^Q'���+r�0a�|�
��{�a��B��ڻG�HZ��@�����g��"��Z�ݭ�����6@l ��]]�:��IE�=��w���l�K.�9���U��`���S*�;`i"�_/w��tK���^&�[�+�]��:.�/Y%�ͺ +�d�ۦS(U���W�J�ۓՖ+�:G���b=����J�\�g)��90S��HXۍ�HT��E�����ʈ3U�w�b����X�J&(^�|� +Yu|��B�N�I�x㰨Nߪ@F���O% +=�&��H���p�Fb ���V +��%� ++*y�� +��<B6ҡ��S� ���y7v��9%Y����UŤz;V�>;?�XT�@<�VL(�I�5o"���R��el�
K??|�����#� &Xe,ýD8'V�p\7��˼)�$ +k��d'��f��/�������l_e5dζ�[ +6E �MZ�r]u�AăMR�P��$�nS�� +$ +Hō^��~ +-��K@V��~-l�4��+��Pfy�Z��ﲡ��2甎�T6�<��U�H��ש
Mp�8cE���t.W�I��.&*Ź�F�C���������6~6�,�;uw-@ +��t��8jz-x�G�KǮx�5]M�c �M{�m�=���c�I������J���y}�����n�,�|u=kN��{b"���% +��7y�,� ++Ɯ���fqX�f��W?F �o!Ʊ�L����tPذ��{���1����;������x�Q�Y'X@�����E��K)�8 +� <{q#�6�� +mAr�rh����'� +E ������:��3GA`���"�lБ]����7�ף +v
��"�`���Ä�[#��{��+{�+Q��\�w�u�$ +�n1�|�rfR��V{u +_B��\�q��Ɔe����Y`���H +�-(�&�����
���r�Z�����yTw����9������_��R�#���ղ��\���c���@Y�_�\ur؝zg��A�
g�1Z�B��ڱ(���N����U<���EJ}jA �8A1�Ye:�+�h^e���s,D���N�Q5,�Wz���b�b2�,��e�շ�˂Y�6���,g�,_�eWD���R���d�)��f������E�Ƭ���rKU=�h~T�����E]�O��B@����X��VJ�����a^��W�V�wdg��"� %Z)��.�q>�Y���b��Z� ���N�R�ҋ��D��L� +��"/̹$qNN���}Y���%��%)��(���z]� +�����L�穿��aᗄ +���l�.J=�K�u�#*%��?�Q�m��"$�?�aB��0�/Q +!�S��.�p� �/����a�AXҁC���q�$% 5�P�֡E +��K`��W8, +�� ��G��O�t�⍍���ʭw���,#Cp +,c��ܚVg��9N}U՛�qy�7�����a���d͊��7�AV +��0d�k�7�zQwm���oBOc�SfS��u +���g[~<x�;lU�#�D8��-Ŧ��(�]/�C4� +2��}� ��-g��z���)3ai�\,�.�@q�l%q�{��4�?/�M3aC����fq�R�dIKd�����M��?R ���M�|'��<��q���(Ss^����iqVO�}���ke����]�ۺ�4�� +C�}Z��R�����Z�h^Oj� +���m�hP�kЂ F|��ū+�^�j�kӽ�8�iQ��'�|��\-���T�5?��jG=e����*0��,�����VBſ�X���Y�b@v:�}���} �ʡ)V����_P�,@xp��P�1��3�m�Ux*�T�1��0(���O�= +��acW�|x"�QZ�9@?g�&τ�ᧅ �x�R����R���X�
��� ~���@��E�ǙP!yC���1����#1Z�����;Ą�ğ��N���mE-zG� +m��'t������C���V4����}�s��ɘNK\�<Wv��8��Y�]i� 昶$Ε�`�N�m��|�Bgp~D�̭�lШM�YV)qޓY���/��G�������3��ܻ�%��ƿ�=C� ��ʁ�L�^���~?eαM$N��I�0��."��Q���S���Dx?�n�lk%~-���(!��d5��z������*�bH>�X2ύQ���A=&�c�v�tEH)��4�Ǩ�Fo��xo f9�>#��0�Gj�>�+ '�˃��� +hHpyiK�% I�(,�^O��x��J���<o���w_J�������*-�v08B��6�=I�~���O�ݒ��B�<)U�J���fҷ�F��m����%�p%��� �dp�U.�D pn&O8{;n��`;�}�
������h� +�|� +#q6*u� +6����> +�?pT��T�� J��nM� 0%.�����O�KO�D4��x�%�7ž��@3K�$Ή@�GS��P%$`����2�G�P��urߜ'�C���M,ǘP�������6��jV���k�m +@-9`���˻a7/�����X�\�v��n\N�����M^]����Z +_��F�R�u�p�[�Vy��;�-/��v�����������.#��' + +�Ÿ�(�\���ì�y]yY�5`t,����~9�8��Ql��j�t���#kK��0��\T�,���XZe�U����/�a�a� +��^���Pw���!�z���û���9TJ �9k9n�Nً<����t��,|ˡn���r7����=K���y�`{g{{ks+&,'�^�[.�Ӈ�u��q��n� �˴������V3c�o'1U�=_�Y�i�ަ���hߔ����M;��3m.��+ooJW�5,��3Y�����A�E��媟]��g�1�*�(��R������U�U���=M.;�>�Gq���\��W*c���G�����]2�U��Hoj�ww��I@���q��5\$���0��:��h21,0���\�a��2�v�ٶ +7�-.��r�1����#�h^���g�+��O&#��Q c��dR�c�W�[+T(ʡ� @י%gv�7]�(�h(�mq̚}I��ދރބu6q +������� A&]�'J���n�`R������-[ +�]�y=(���yK$�_B�,��� +}�`���G����O�E�7ĸ8�n%m��(n)�\j���|�$bR�~L��:d�O�K��`�b�ՙ=�(�.��e<ܗ���a~���^�Jw�9Ü�cU.L՛ǰΉb�z�V��,-2"�Ų�{�J� +t��b���,���`�����f��%�
���\_����3\����Y��>V(��v6��T+�Z�g��H2uvzLE�?Ā����/^/v�;��P.�@W�2,IK�=���e���\9�Y�j��+U��X/�Q����Y��)���kI��yU��q0K�]��e*���F�+k�5��.4 +��J� +�J����ՕnU�'��$Au�D��ȦS*]U�'�k�N'���D?��yY�SÂ9��*�j|}���X�Q���.��V�c\���=���9�� ��i�O;U��.���B��NY��0�#���^�5J�t0(;����50 +31���:�V�<脠��R�s�It�Bm�Q��u�s�zRUݾ�hL��
s+�l!,�3�V��{�Y=H�kŎ�4���=1E�6�݈j�� �
�G��� עˇ���$0�����M�@U�[�S@�{�<�s���s]қ.ڭ��J"OFq��6�p� + ��ؠ���[��u6xcen L�7�͚�fޜ�:�'�E�:�U�葋�~wy>���wMu�� �yU���_bBe�K��
�o����r�K�Uou��������y�4˦�Ջ�{%@'���L"�iIRh�-���&�tJ�K1$u�UJms6�_,������_|��>��踚.�iy�/�uY#&�̚�|1s^,�n��-��4������s�W4��X����q�5uy�;v_U�I�b�؛3�� H��
r��l�;�����+H�6�|��� +��u=o�� +����\NJG�XM����b}ټmNY^̌UD�by�����7q�rUUUL�s!f��9#W?�$ +��`}�]�[P�- +�&�o!��9�{�J��3g�u �u���Ɖ|V�z�@Uo�65;�g��̳3�UD�9�q +6"���5�&+�W�J�$�S��\��T���mo��,C���sR��J�rmj��FG +̩\O�YbNu�8"�Q]*���(�iKjD�u�4 +Qd��"�� +��~�dE�M]i�+��V˼��5w�
6$L�{��ˤE_ �A����Mv�C�;ĚRma�l�ra�ʘ��^�3�築s����X���:�\�уބ=6�G + +��y6���*sx>�C�k�p�Y7I�*���'bb�Fs��ѳܞ7�n�<I +;f�+�S���}�9����π���.(:Al�_a���1Q8�}�J�%l� +~��A:�����^}k�s!�+���O��� +��:1� +�uP�{78{%]�gg
p����a=D@��j�=X0K9�;_2�q��Hb +���D|��/�����q�[�>o�qs�}#�A�6Jm�E�'>���g���� +��c�@i�w����\!���m=|� @�h��B +L� +/ +�Dӹ�({����#=2F�������)s�eӛiiaIҒ��G$���I/����潝���"`�Q���Ek�\�Ҍ�i&ͤ�;mj�u�9ש����iF��.HW�0�?�l�˂���� V,#���K� ��`��V�~2�_ʘi~�����İ���yP��\̰�҉��׃��������/^�v ��U���I��M�,�m"v���,��H�l��N�ا��JxzԻ����QD��+tG�E�lP~% +R�PP(I��X +0+�r_-�6Ad����BGPF.]P��-$��q����V^5}`��o\I�ٴ��"1��X�����7+�E1�������1>���J��$6H�
�e$QU�p>x�?:`X\�p���ZL+ +��F��r�+���n��r=�֕.��U��)�!�3��Rn䩣��;�:w�Z�Q�����ϧ + +I�+�\K���V +�8$6@P�:|�\bҟޗWV��9��l$*�H2@o���y�@H +z�j�rY���*I'd]�+�O +��GYS��9�OfZ����� k +�3�����Մ�ֽCiE2����$�\ +��� +���`�� +C�j�U�J5�b�킾X��w*��ԬS�Dߜ~ +��Ns^�3q������-{T�3h�9+L��k=�h��m�X��йb�)�$��ϋ�\�r�+�ܻ��{��>�,�&j������/�,������o�?3���/�CYd��*T�j���TM���s]�;��o�.�%�A�-��us:O���q�b��o0�h���|���џ���658+I���R��z��^wQb�K +����E�������-t[��'��J��F���_��H}�6] u�!��_��&��ڕx)(���c����CH̡,��S��+t��o�ޔo�T���"��T���N��#R@��b�:^�,�z?}/1�IRb��m��e5�A�I��%vٙ���{�$j�}�E�����XI +'����,�`7��'��'c�\���� +�#��z��OD.W�A���@: +�^����B����R�"��[�O� +;d�M4 +���:k�F(U�Z�Q����!������M�����ފ�?��#�$'x��\��sA{ +�9���C���<�#�!;c�/�&y�\�{���d7���,��*F��G(DT]��A�a�w�C�hד^��9�ׇ�����PD~�����:�;zc�W����Ȋ@�p}S���+�R��*i� �}AةT�� ���Bb�X@ +NSx!�D�\�ひ��(W����� V�j�E4� +귷�n��]�����y7vـ�c��Bϯq~��J$��"�|��珻)Wt����y췻�s�yw�ŋ+λq#;T�<@�P[��3[Wt��֮2�[���*#Ąnn�C4��>!w7Mۛ�@��ub�E� �����w�n�wʦ5"��+��(���/��y7�zW�B�&�(7T���,��u������&4CB�ߢc +]�� E�'��O (�!�G ��J�~��u�#]'nW��+�����Y�ѳ �_@U`Gy����Fଢ଼uA�D��HLu��SV���&�2�V�zOVȚ��t��@N#��;ӽ3���a��73x�AS��`Gw�֚�a}*�qR�����.H�&گ���H��bv��g�˫��J�-ݿ.�oU�X��$DN/D +zckN�"Q�����)jX��'b,�Ê�&�+���jkS�����wʷ3�X��("RAʭU�k�����ՂL��J5�WA�ӋU5kz��S�aM���3H9|��\�͊$��`��eI�Ȳ��KqN���qM!y�ǤV_�7�v�3�<�/9�u1���z�_S<�L'T:���AT�Nպ�.��=y��C�N��&��[����B����k���.��_��[^�bQ�'�}�����z�î�߲>{K��<�'�sšװ-�0��)���}E��s)�E��Z���t٥��u�aE�힀��m��4�ގ] +���'�8Fu#Z8W�Tտ�s8�y��J�R�d�ꊬ�_�%gn��z�I +Avq��B��H2f +"N��B�9�<���(�a��!M�Wv�1���������W��[���<��o"*�M�Ҟ̾UO��xq�-�E�����u~}1C�T��-� +W4��gR�ԩ�v�oϦ���>|��Z5NX{�`Eb�|�˪���@�F`�`�~鋅0wq�X��l�bO`�Kl������Xd�`�"59Iq�{:j�Vc�[��'���DtZ��P'�-Z��/�/�W8�Јh���I����3�MO �%��0�:ݹ/�\�z +�zl4��'O�vz�'\��C��#���s��|�B;7 +��*]7�\#W��\[g2��gY��L"u�-W�*ݼ��m9�j +^�?��(����_��z�\,��`��_�����X�?g���_�h�חʳ��h��G�Y���_�6˿�IF}z1�Col���f�\.�
��/.�j��٠#q��X4�����X�'�zƛ8_��w�7��N~�V1� +0n(I��n�X��!QP���A��dQu����`R-&�_m��Z +��2ԙ�"��\��Gs�gQ����B���h)H�O/�����CքL�Cy6����
�oV�+�r̻�8/U�UF����g��8R +2�\�W��g�s%�B�Lx�$F)�٬P�k�K���|�u�}�]���b����g& �uEz������3�Efyf*#d�z6Zb�T�NA�7��iF�`9q>=��K�bE��I*�K�O���ʝ)�>BƬ�h��4��[ +��AW��A +�o!��}�Y��i�����A8� +�
�<��;��y +�'����pE 5R��K9DG��(!!�8]� *��P�Ǐ!�������Ϙ6�%�7��%��� ������� +sWi�0�F�(x��A���ȨLҧ��i!@�!tD��L.�8N:e��/5�V +�IQS���E: +��z@�>+����}��bN��d�J�ٰ�&��E�W,�m×��M8�-p�I�>�D�)]
4i��H�R�c�)c˽}l���9W�&N/f����[�Q,�Ft5R4IR��o��[���OGO7w�<z�sk�ޣd NP&������qçD�#0�eռu~Tv%�C
oY�Q�ʌ]�WD�*��)��(FXwX +^xS��1y��?9��>f +��ިxڻ�q���Cu�'E��C���-��� +�� 2��U��Sl�W8��κ +G�2�o��?b��2�F]�����% +�h��g ���<�r�E�H_������CO��yP����&�@xڑSX�_'HF��_�e�d���������y��ݹ�_�RfY\@r��(��h����_���?�˽������"&e=�����Zu�T�E����m]�8���_g
��sI_�;���(.k`�PtX�wV����w��g���_����ŋ��[�E�-5'澍6F\0=ga��2o.�$Iu�h�<7�I +a�>o�tq�-W^ Fvt���} +�G. ]ӿޯ�)�,DF"}!L�v0��G����k��I��l +�\�$�9uWw +���i��l�ٲ]$̱3}1���l�#��ݹs�n;������I:�~��A�+��D������rPecʠ��U3����4J^�\̜cw! g�����-Ȏ�|~z����B
����Z�՟=�>�6� +��
��hG������G��$��E��'���u���� 6���"���:zT_��n?�Ґ�������t��4J���22���̹���Ȟ}����W�w�a�u���^0ld]��ꛕ5���,�Y�͌h(H�� }��U�������#�C��4a���ً��4��T�=O�.�.#,f��QBċ^�U�94w�(s{s$ST�3�G1'�1�s��\)��6O'��$�����0�7���N����*�rH/Jj�]�Q0�H��v�'�Հ��(�S�?�����O���qo�T��%�M�,��Cli�-?���:We����Ɲ�0��Z��W�A�����a2i/�Ih���dE�e���jN1����1�3m)��.�ev7'*גr-����r�v�u�J@w��~�L�[��ʐק�\��bWP��n3����w.Wσ����:2��JD��V��M�j��MU��TՋ�Z8s�aq��o�
��_'z�8R�9w�:SW�(���u�G�Np���N�F�a��ɥ�p��hvt.TKjT�/��&�xZ��1i�.*��O(h�n2ɳ��ųYh�C3��DX.������oc=�4)� *�҅s�h'��lVː���5�xa]tŹt��)�a�@��ϒ���_��\;��h��@|�+=.��t��y�b�_GH������!��Zt;�̪Xz'�Ř'�b��1� +�[a9����_!j�ڏ1s#�Z. +<�Zտ�����j�--AB��YK1�N������}�mT�4�꿫��c��ү��7���@���qY�5t������%�_d�ˌ�i�=A����K}v���z����=�s�A���p�w˓ʽ�Y9]�6����,{Q����pM��2W�����2l�[��Ȉ�$�譻�թ������?e�c��D�Pi�����rZ���6x��$�$7}��`��
�/Idvr��ҿ�Q�����|IY2���{;_��0�5�#y����/�-��U��ASei�v"����]���s�Eʳ���M*�y�9ݧ\��̋��2���7��kL�M)W�1u�Е.�B��Y��dČ�H��}�+R�Z��ֶ\i{�$���;�H�;TU��c=��h^2�5�$��e/N&c������>���$٧�����6H)|L��f�U���m�L��^��Q@S +�>,YT���`�r����5��/���)����:����3t������\��QQ���,.�����V�7Q����,�����T̩RN����u��\��@WՋrU�U�*���f��#)��z��킱������!��5��!�@!�(;�< C +��c��@���w
h����
j��b0-í;>
�ө���l��(�0HW�Fu^t*υ�n�K�#�#�}��$oUv��� Q��ϒ��4W��Y^��S�f�
��~·����K�E��s���� + +'
�#�U����`A��g��IĔ�^Q�m߃�����^���(�O�v'�m.��b��G����М0��H��)�]5��3��������\�3̜뤞vJ�(AV�eB��r�$��y�ߤ�tT���Y�g�'�>}���3 +��IL��%��˴}���(~ߊl0j�fT����χ���\�/�!�8�m$���X��5[ +�z/��[ic�d?
eE�����P�Q���& +sĐ�S�������{�C�C�"wbH b㖱#z� "R��n�6 �C��5ѿ�����@�OA�k +�Ϙu���i&��%�RKREAwbvW����E>w��K�hZz������An��X�IQ$١�� ++f'1�T�>b��Y�-���g�z/�A���҂9�k��TW�&�Uq$����X$np�5��N���� Gs���b��S��ӗg +H +k + +��A��w\v�&�G�~/j9����}
~|@\�w.��=�3�}d<u��u��jxnz�������'~'i�a1[��n"zE��ڤ��t�C�%Y!�')š��A5��=_���ɾ���j��T/9���)N�m��C朂��Ѥ�.�!S�S���V�1 +� + U�Q�̆�)���sK:���8RsQ�H +pu�m�p��:�GOs��&�s4~�> +����Y�� +j鼜��iePx}W��C�6�v�)�އ +�a[ +��1����s:�;w6n� +�� +q�GNBHi�"���"�GǓ +l�_� +�J�T��> +�� +"����X +X�K�����5��, +7�B��j +@):"C��L������ +��Tm, + +�����q=H��ݣ�NH�.;�� +, +��}��Y +"�X@磻Ňj�U��Y +��U�`�X��V diff --git a/examples/web/models/models_obj_loading.html b/examples/web/models/models_obj_loading.html new file mode 100644 index 0000000..34d134f --- /dev/null +++ b/examples/web/models/models_obj_loading.html @@ -0,0 +1 @@ +<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/games property=og:url><meta content=raylib.com property=og:site_name><meta content="New hmtl5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:url><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header_part{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(https://www.raylib.com/common/img/raylib_logo_64x64.png)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}#emscripten_logo{display:inline-block;margin:0}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:20px;width:30px}#controls{display:inline-block;float:right;vertical-align:top;margin-top:30px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}</style></head><body><div id=header_part><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value=Fullscreen></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault()></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function SaveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var t=document.querySelector("#output");return t&&(t.value=""),function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.log(e),t&&(t.value+=e+"\n",t.scrollTop=t.scrollHeight)}}(),printErr:function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()},!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Date.now()<30||(t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!1,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(e){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script src=models_obj_loading.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_obj_loading.js b/examples/web/models/models_obj_loading.js new file mode 100644 index 0000000..81c7e2d --- /dev/null +++ b/examples/web/models/models_obj_loading.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_obj_loading.data";var REMOTE_PACKAGE_BASE="models_obj_loading.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);Module["FS_createPath"]("/resources","models",true,true);Module["FS_createPath"]("/resources","model",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i<files.length;++i){new DataRequest(files[i].start,files[i].end,files[i].audio).open("GET",files[i].filename)}function processPackageData(arrayBuffer){Module.finishedDataFileDownloads++;assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);var ptr=Module["getMemory"](byteArray.length);Module["HEAPU8"].set(byteArray,ptr);DataRequest.prototype.byteArray=Module["HEAPU8"].subarray(ptr,ptr+byteArray.length);var files=metadata.files;for(var i=0;i<files.length;++i){DataRequest.prototype.requests[files[i].filename].onload()}Module["removeRunDependency"]("datafile_models/models_obj_loading.data")}Module["addRunDependency"]("datafile_models/models_obj_loading.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[{"start":0,"audio":0,"end":407909,"filename":"/resources/models/castle.obj"},{"start":407909,"audio":0,"end":1946815,"filename":"/resources/model/castle_diffuse.png"}],"remote_package_size":1946815,"package_uuid":"870b9cd3-2a67-442f-a92b-78fb78d9bc12"})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];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 require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;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)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["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);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["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"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}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=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["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)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];type=singleType||types[i];if(type===0){i++;continue}if(type=="i64")type="i32";setValue(ret+i,curr,type);if(previousType!==type){typeSize=getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}function getMemory(size){if(!runtimeInitialized)return dynamicAlloc(size);return _malloc(size)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(u8Array[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=u8Array[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[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<str.length;++i){var u=str.charCodeAt(i);if(u>=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 allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__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(0)}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)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5279296,DYNAMICTOP_PTR=36384;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;if(INITIAL_TOTAL_MEMORY<TOTAL_STACK)err("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+INITIAL_TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{if(typeof WebAssembly==="object"&&typeof WebAssembly.Memory==="function"){wasmMemory=new WebAssembly.Memory({"initial":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE});buffer=wasmMemory.buffer}else{buffer=new ArrayBuffer(INITIAL_TOTAL_MEMORY)}}updateGlobalBufferViews();HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();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 __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=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 ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}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"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_obj_loading.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){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(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};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 ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}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)},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.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(19)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(6)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(6)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(5)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var isPosixPlatform=process.platform!="win32";var fd=process.stdin.fd;if(isPosixPlatform){var usingDevice=false;try{fd=fs.openSync("/dev/stdin","r");usingDevice=true}catch(e){}}try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(usingDevice){fs.closeSync(fd)}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}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(1)}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<node.usedBytes;++i)arr.push(node.contents[i]);return arr}return node.contents},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array;if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|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(new ArrayBuffer(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<newSize)node.contents.push(0);node.usedBytes=newSize},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[2]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(39)}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name]},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(39)}delete parent.contents[name]},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(22)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(22)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(12)}buffer.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var IDBFS={dbs:{},indexedDB:function(){if(typeof indexedDB!=="undefined")return indexedDB;var ret=null;if(typeof window==="object")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,"IDBFS used, but indexedDB not supported");return ret},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function(mount){return MEMFS.mount.apply(null,arguments)},syncfs:function(mount,populate,callback){IDBFS.getLocalSet(mount,function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},getDB:function(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback("Unable to connect to IndexedDB")}req.onupgradeneeded=function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}};req.onsuccess=function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db)};req.onerror=function(e){callback(this.error);e.preventDefault()}},getLocalSet:function(mount,callback){var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return function(p){return PATH.join2(root,p)}}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:"local",entries:entries})},getRemoteSet:function(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,function(err,db){if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=function(e){callback(this.error);e.preventDefault()};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db:db,entries:entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()}}catch(e){return callback(e)}})},loadLocalEntry:function(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error("node type not supported"))}},storeLocalEntry:function(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode)}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp)}catch(e){return callback(e)}callback(null)},removeLocalEntry:function(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:function(store,path,callback){var req=store.get(path);req.onsuccess=function(event){callback(null,event.target.result)};req.onerror=function(e){callback(this.error);e.preventDefault()}},storeRemoteEntry:function(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},removeRemoteEntry:function(store,path,callback){var req=store.delete(path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},reconcile:function(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join("/");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,parts[i],WORKERFS.DIR_MODE,0)}parent=createdParents[curr]}return parent}function base(path){var parts=path.split("/");return parts[parts.length-1]}Array.prototype.forEach.call(mount.opts["files"]||[],function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate)});(mount.opts["blobs"]||[]).forEach(function(obj){WORKERFS.createNode(ensureParent(obj["name"]),base(obj["name"]),WORKERFS.FILE_MODE,0,obj["data"])});(mount.opts["packages"]||[]).forEach(function(pack){pack["metadata"].files.forEach(function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack["blob"].slice(file.start,file.end))})});return root},createNode:function(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents}else{node.size=4096;node.contents={}}if(parent){parent.contents[name]=node}return node},node_ops:{getattr:function(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)}},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}},lookup:function(parent,name){throw new FS.ErrnoError(2)},mknod:function(parent,name,mode,dev){throw new FS.ErrnoError(1)},rename:function(oldNode,newDir,newName){throw new FS.ErrnoError(1)},unlink:function(parent,name){throw new FS.ErrnoError(1)},rmdir:function(parent,name){throw new FS.ErrnoError(1)},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newName,oldPath){throw new FS.ErrnoError(1)},readlink:function(node){throw new FS.ErrnoError(1)}},stream_ops:{read:function(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(40)}}}}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<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>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 err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,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){if(!FS.FSNode){FS.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};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.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)}}})}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 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}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 err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}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(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}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(29)}},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){console.log("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(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}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(16)}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(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}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(22)}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(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}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;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=17)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(2)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(2)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(1)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(16)}if(!old_dir||!new_dir)throw new FS.ErrnoError(2);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(18)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(22)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(39)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(1)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(16)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(20)}return node.node_ops.readdir(node)},unlink:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(2)}if(!link.node_ops.readlink){throw new FS.ErrnoError(22)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(2)}if(!node.node_ops.getattr){throw new FS.ErrnoError(1)}return node.node_ops.getattr(node)},lstat:function(path){return FS.stat(path,true)},chmod:function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chmod(stream.node,mode)},chown:function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chown(stream.node,uid,gid)},truncate:function(path,len){if(len<0){throw new FS.ErrnoError(22)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(21)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(22)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(22)}FS.truncate(stream.node,len)},utime:function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(2)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(17)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(2)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;console.log("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:function(stream){return stream.fd===null},llseek:function(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(29)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(22)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.read){throw new FS.ErrnoError(22)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.write){throw new FS.ErrnoError(22)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(offset<0||length<=0){throw new FS.ErrnoError(22)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(19)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(95)}stream.stream_ops.allocate(stream,offset,length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(13)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(19)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(25)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:function(path,data,opts){opts=opts||{};opts.flags=opts.flags||"w";var stream=FS.open(path,opts.flags,opts.mode);if(typeof data==="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:function(){return FS.currentPath},chdir:function(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(2)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(20)}var err=FS.nodePermissions(lookup.node,"x");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path},createDefaultDirectories:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return length}});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device;if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);random_device=function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");random_device=function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}else{}if(!random_device){random_device=function(){abort("random_device")}}FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode("/proc/self","fd",16384|511,73);node.node_ops={lookup:function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(9);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin","r");var stdout=FS.open("/dev/stdout","w");var stderr=FS.open("/dev/stderr","w")},ensureErrnoError:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error";if(this.stack)Object.defineProperty(this,"stack",{value:(new Error).stack,writable:true})};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[2].forEach(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS}},init:function(input,output,error){FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},joinPath:function(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]=="/")path=path.substr(1);return path},absolutePath:function(relative,base){return PATH.resolve(base,relative)},standardizePath:function(path){return PATH.normalize(path)},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{___setErrNo(ret.error);return null}},analyzePath:function(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createFolder:function(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode)},createPath:function(parent,path,canRead,canWrite){parent=typeof parent==="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:function(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data==="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,"w");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(5)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},createLink:function(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);return FS.symlink(target,path)},forceLoadFile:function(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!=="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(Module["read"]){try{obj.contents=intArrayFromString(Module["read"](obj.url),true);obj.usedBytes=obj.contents.length}catch(e){success=false}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}if(!success)___setErrNo(5);return success},createLazyFile:function(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=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;console.log("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(5)}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(5)}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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function(dirfd,path){if(path[0]!=="/"){var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path}path=PATH.join2(dir,path)}return path},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR}throw e}HEAP32[buf>>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){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,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-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;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-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}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<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;if(typeof SDL==="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["preloadPlugins"].push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("warning: browser could not fully decode audio "+name+", trying slower base64 approach");function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};var EGL={errorCode:12288,defaultDisplayInitialized:false,currentContext:0,currentReadSurface:0,currentDrawSurface:0,contextAttributes:{alpha:false,depth:false,stencil:false,antialias:false},stringCache:{},setErrorCode:function(code){EGL.errorCode=code},chooseConfig:function(display,attribList,config,config_size,numConfigs){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(attribList){for(;;){var param=HEAP32[attribList>>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(this,call.argsList)}},inEventHandler:0,currentEventHandler:null,eventHandlers:[],isInternetExplorer:function(){return navigator.userAgent.indexOf("MSIE")!==-1||navigator.appVersion.indexOf("Trident/")>0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getBoundingClientRectOrZeros:function(target){return target.getBoundingClientRect?target.getBoundingClientRect():{left:0,top:0}},pageScrollPos:function(){if(window.pageXOffset>0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i<GL.MINI_TEMP_BUFFER_SIZE;i++){GL.miniTempBufferViews[i]=GL.miniTempBuffer.subarray(0,i+1)}},recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i<ret;i++){table[i]=null}return ret},MINI_TEMP_BUFFER_SIZE:256,miniTempBuffer:null,miniTempBufferViews:[0],getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i<result.length;++i){switch(type){case"Integer":HEAP32[p+i*4>>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[location]);if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i<e.touches.length;++i){var touch=e.touches[i];touches[touch.identifier]=touch}for(var i=0;i<e.changedTouches.length;++i){var touch=e.changedTouches[i];touches[touch.identifier]=touch;touch.changed=true}for(var i=0;i<e.targetTouches.length;++i){var touch=e.targetTouches[i];touches[touch.identifier].onTarget=true}var touchEvent=JSEvents.touchEvent;var ptr=touchEvent;HEAP32[ptr+4>>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;dynCall_vidd(GLFW.active.cursorPosFunc,GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;dynCall_viiii(GLFW.active.mouseButtonFunc,GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),"i8",ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),"i8",ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),"float",ALLOC_NORMAL)};if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.keyFunc=cbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.charFunc=cbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.mouseButtonFunc=cbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorPosFunc=cbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.scrollFunc=cbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.dropFunc=cbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowSizeFunc=cbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowCloseFunc=cbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowRefreshFunc=cbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++);if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++);if(i==GLFW.windows.length){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetCursorPos(winid,x,y){GLFW.getCursorPos(winid,x,y)}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorEnterFunc=cbfun}function _glfwSetCursorPosCallback(winid,cbfun){GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){GLFW.errorFunc=cbfun}function _glfwSetKeyCallback(winid,cbfun){GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowIconifyFunc=cbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _llvm_stackrestore(p){var self=_llvm_stacksave;var ret=self.LLVM_SAVEDSTACKS[p];self.LLVM_SAVEDSTACKS.splice(p,1);stackRestore(ret)}function _llvm_stacksave(){var self=_llvm_stacksave;if(!self.LLVM_SAVEDSTACKS){self.LLVM_SAVEDSTACKS=[]}self.LLVM_SAVEDSTACKS.push(stackSave());return self.LLVM_SAVEDSTACKS.length-1}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function _usleep(useconds){var msec=useconds/1e3;if((ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self["performance"]&&self["performance"]["now"]){var start=self["performance"]["now"]();while(self["performance"]["now"]()-start<msec){}}else{var start=Date.now();while(Date.now()-start<msec){}}return 0}function _nanosleep(rqtp,rmtp){var seconds=HEAP32[rqtp>>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));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 asmGlobalArg={};var asmLibraryArg={"d":abort,"b":___assert_fail,"oc":___lock,"F":___setErrNo,"fb":___syscall140,"Wa":___syscall145,"E":___syscall146,"q":___syscall221,"ra":___syscall5,"D":___syscall54,"Y":___syscall6,"C":___unlock,"B":_eglGetProcAddress,"X":_emscripten_exit_pointerlock,"td":_emscripten_get_gamepad_status,"id":_emscripten_get_heap_size,"Zc":_emscripten_get_num_gamepads,"W":_emscripten_get_pointerlock_status,"Ec":_emscripten_glActiveTexture,"uc":_emscripten_glAttachShader,"nc":_emscripten_glBeginQueryEXT,"gc":_emscripten_glBindAttribLocation,"dc":_emscripten_glBindBuffer,"_b":_emscripten_glBindFramebuffer,"Tb":_emscripten_glBindRenderbuffer,"Ob":_emscripten_glBindTexture,"Eb":_emscripten_glBindVertexArrayOES,"vb":_emscripten_glBlendColor,"rb":_emscripten_glBlendEquation,"qb":_emscripten_glBlendEquationSeparate,"pb":_emscripten_glBlendFunc,"ob":_emscripten_glBlendFuncSeparate,"nb":_emscripten_glBufferData,"mb":_emscripten_glBufferSubData,"lb":_emscripten_glCheckFramebufferStatus,"kb":_emscripten_glClear,"jb":_emscripten_glClearColor,"ib":_emscripten_glClearDepthf,"hb":_emscripten_glClearStencil,"gb":_emscripten_glColorMask,"eb":_emscripten_glCompileShader,"db":_emscripten_glCompressedTexImage2D,"cb":_emscripten_glCompressedTexSubImage2D,"bb":_emscripten_glCopyTexImage2D,"ab":_emscripten_glCopyTexSubImage2D,"$a":_emscripten_glCreateProgram,"_a":_emscripten_glCreateShader,"Za":_emscripten_glCullFace,"Ya":_emscripten_glDeleteBuffers,"Xa":_emscripten_glDeleteFramebuffers,"Va":_emscripten_glDeleteProgram,"Ua":_emscripten_glDeleteQueriesEXT,"Ta":_emscripten_glDeleteRenderbuffers,"Sa":_emscripten_glDeleteShader,"Ra":_emscripten_glDeleteTextures,"Qa":_emscripten_glDeleteVertexArraysOES,"Pa":_emscripten_glDepthFunc,"Oa":_emscripten_glDepthMask,"Na":_emscripten_glDepthRangef,"Ma":_emscripten_glDetachShader,"La":_emscripten_glDisable,"Ka":_emscripten_glDisableVertexAttribArray,"Ja":_emscripten_glDrawArrays,"Ia":_emscripten_glDrawArraysInstancedANGLE,"Ha":_emscripten_glDrawBuffersWEBGL,"Ga":_emscripten_glDrawElements,"Fa":_emscripten_glDrawElementsInstancedANGLE,"Ea":_emscripten_glEnable,"Da":_emscripten_glEnableVertexAttribArray,"Ca":_emscripten_glEndQueryEXT,"Ba":_emscripten_glFinish,"Aa":_emscripten_glFlush,"za":_emscripten_glFramebufferRenderbuffer,"ya":_emscripten_glFramebufferTexture2D,"xa":_emscripten_glFrontFace,"wa":_emscripten_glGenBuffers,"va":_emscripten_glGenFramebuffers,"ua":_emscripten_glGenQueriesEXT,"ta":_emscripten_glGenRenderbuffers,"sa":_emscripten_glGenTextures,"qa":_emscripten_glGenVertexArraysOES,"pa":_emscripten_glGenerateMipmap,"oa":_emscripten_glGetActiveAttrib,"na":_emscripten_glGetActiveUniform,"ma":_emscripten_glGetAttachedShaders,"la":_emscripten_glGetAttribLocation,"ka":_emscripten_glGetBooleanv,"ja":_emscripten_glGetBufferParameteriv,"ia":_emscripten_glGetError,"ha":_emscripten_glGetFloatv,"ga":_emscripten_glGetFramebufferAttachmentParameteriv,"fa":_emscripten_glGetIntegerv,"ea":_emscripten_glGetProgramInfoLog,"da":_emscripten_glGetProgramiv,"ca":_emscripten_glGetQueryObjecti64vEXT,"ba":_emscripten_glGetQueryObjectivEXT,"aa":_emscripten_glGetQueryObjectui64vEXT,"$":_emscripten_glGetQueryObjectuivEXT,"_":_emscripten_glGetQueryivEXT,"Z":_emscripten_glGetRenderbufferParameteriv,"fe":_emscripten_glGetShaderInfoLog,"ee":_emscripten_glGetShaderPrecisionFormat,"de":_emscripten_glGetShaderSource,"ce":_emscripten_glGetShaderiv,"be":_emscripten_glGetString,"ae":_emscripten_glGetTexParameterfv,"$d":_emscripten_glGetTexParameteriv,"_d":_emscripten_glGetUniformLocation,"Zd":_emscripten_glGetUniformfv,"Yd":_emscripten_glGetUniformiv,"Xd":_emscripten_glGetVertexAttribPointerv,"Wd":_emscripten_glGetVertexAttribfv,"Vd":_emscripten_glGetVertexAttribiv,"Ud":_emscripten_glHint,"Td":_emscripten_glIsBuffer,"Sd":_emscripten_glIsEnabled,"Rd":_emscripten_glIsFramebuffer,"Qd":_emscripten_glIsProgram,"Pd":_emscripten_glIsQueryEXT,"Od":_emscripten_glIsRenderbuffer,"Nd":_emscripten_glIsShader,"Md":_emscripten_glIsTexture,"Ld":_emscripten_glIsVertexArrayOES,"Kd":_emscripten_glLineWidth,"Jd":_emscripten_glLinkProgram,"Id":_emscripten_glPixelStorei,"Hd":_emscripten_glPolygonOffset,"Gd":_emscripten_glQueryCounterEXT,"Fd":_emscripten_glReadPixels,"Ed":_emscripten_glReleaseShaderCompiler,"Dd":_emscripten_glRenderbufferStorage,"Cd":_emscripten_glSampleCoverage,"Bd":_emscripten_glScissor,"Ad":_emscripten_glShaderBinary,"zd":_emscripten_glShaderSource,"yd":_emscripten_glStencilFunc,"xd":_emscripten_glStencilFuncSeparate,"wd":_emscripten_glStencilMask,"vd":_emscripten_glStencilMaskSeparate,"ud":_emscripten_glStencilOp,"sd":_emscripten_glStencilOpSeparate,"rd":_emscripten_glTexImage2D,"qd":_emscripten_glTexParameterf,"pd":_emscripten_glTexParameterfv,"od":_emscripten_glTexParameteri,"nd":_emscripten_glTexParameteriv,"md":_emscripten_glTexSubImage2D,"ld":_emscripten_glUniform1f,"kd":_emscripten_glUniform1fv,"jd":_emscripten_glUniform1i,"hd":_emscripten_glUniform1iv,"gd":_emscripten_glUniform2f,"fd":_emscripten_glUniform2fv,"ed":_emscripten_glUniform2i,"dd":_emscripten_glUniform2iv,"cd":_emscripten_glUniform3f,"bd":_emscripten_glUniform3fv,"ad":_emscripten_glUniform3i,"$c":_emscripten_glUniform3iv,"_c":_emscripten_glUniform4f,"Yc":_emscripten_glUniform4fv,"Xc":_emscripten_glUniform4i,"Wc":_emscripten_glUniform4iv,"Vc":_emscripten_glUniformMatrix2fv,"Uc":_emscripten_glUniformMatrix3fv,"Tc":_emscripten_glUniformMatrix4fv,"Sc":_emscripten_glUseProgram,"Rc":_emscripten_glValidateProgram,"Qc":_emscripten_glVertexAttrib1f,"Pc":_emscripten_glVertexAttrib1fv,"Oc":_emscripten_glVertexAttrib2f,"Nc":_emscripten_glVertexAttrib2fv,"Mc":_emscripten_glVertexAttrib3f,"Lc":_emscripten_glVertexAttrib3fv,"Kc":_emscripten_glVertexAttrib4f,"Jc":_emscripten_glVertexAttrib4fv,"Ic":_emscripten_glVertexAttribDivisorANGLE,"Hc":_emscripten_glVertexAttribPointer,"Gc":_emscripten_glViewport,"Fc":_emscripten_memcpy_big,"Dc":_emscripten_request_pointerlock,"Cc":_emscripten_resize_heap,"V":_emscripten_run_script,"Bc":_emscripten_sample_gamepad_data,"Ac":_emscripten_set_click_callback_on_thread,"zc":_emscripten_set_fullscreenchange_callback_on_thread,"yc":_emscripten_set_gamepadconnected_callback_on_thread,"xc":_emscripten_set_gamepaddisconnected_callback_on_thread,"wc":_emscripten_set_keypress_callback_on_thread,"vc":_emscripten_set_main_loop,"tc":_emscripten_set_touchcancel_callback_on_thread,"sc":_emscripten_set_touchend_callback_on_thread,"rc":_emscripten_set_touchmove_callback_on_thread,"qc":_emscripten_set_touchstart_callback_on_thread,"pc":_exit,"A":_glActiveTexture,"U":_glAttachShader,"n":_glBindAttribLocation,"c":_glBindBuffer,"j":_glBindTexture,"mc":_glBlendFunc,"h":_glBufferData,"z":_glBufferSubData,"T":_glClear,"S":_glClearColor,"lc":_glClearDepthf,"kc":_glCompileShader,"jc":_glCompressedTexImage2D,"ic":_glCreateProgram,"hc":_glCreateShader,"fc":_glCullFace,"p":_glDeleteBuffers,"y":_glDeleteProgram,"R":_glDeleteShader,"Q":_glDeleteTextures,"ec":_glDepthFunc,"P":_glDetachShader,"O":_glDisable,"i":_glDisableVertexAttribArray,"N":_glDrawArrays,"M":_glDrawElements,"x":_glEnable,"f":_glEnableVertexAttribArray,"cc":_glFrontFace,"g":_glGenBuffers,"bc":_glGenTextures,"w":_glGetAttribLocation,"ac":_glGetFloatv,"$b":_glGetProgramInfoLog,"L":_glGetProgramiv,"Zb":_glGetShaderInfoLog,"K":_glGetShaderiv,"o":_glGetString,"v":_glGetUniformLocation,"Yb":_glLinkProgram,"Xb":_glPixelStorei,"Wb":_glReadPixels,"Vb":_glShaderSource,"Ub":_glTexImage2D,"m":_glTexParameteri,"J":_glUniform1i,"u":_glUniform4f,"t":_glUniformMatrix4fv,"l":_glUseProgram,"Sb":_glVertexAttrib2f,"Rb":_glVertexAttrib3f,"s":_glVertexAttrib4f,"e":_glVertexAttribPointer,"Qb":_glViewport,"Pb":_glfwCreateWindow,"Nb":_glfwDefaultWindowHints,"Mb":_glfwDestroyWindow,"Lb":_glfwGetCursorPos,"r":_glfwGetTime,"Kb":_glfwInit,"Jb":_glfwMakeContextCurrent,"Ib":_glfwSetCharCallback,"Hb":_glfwSetCursorEnterCallback,"Gb":_glfwSetCursorPosCallback,"Fb":_glfwSetDropCallback,"Db":_glfwSetErrorCallback,"Cb":_glfwSetKeyCallback,"Bb":_glfwSetMouseButtonCallback,"Ab":_glfwSetScrollCallback,"zb":_glfwSetWindowIconifyCallback,"yb":_glfwSetWindowShouldClose,"xb":_glfwSetWindowSizeCallback,"wb":_glfwSwapBuffers,"I":_glfwTerminate,"k":_glfwWindowHint,"H":_llvm_stackrestore,"G":_llvm_stacksave,"ub":_nanosleep,"tb":_time,"sb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["me"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["we"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i<argc;i++){HEAP32[(argv>>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_obj_loading.wasm b/examples/web/models/models_obj_loading.wasm Binary files differnew file mode 100644 index 0000000..159c93e --- /dev/null +++ b/examples/web/models/models_obj_loading.wasm diff --git a/examples/web/models/models_obj_viewer.c b/examples/web/models/models_obj_viewer.c index 44c9947..8254294 100644 --- a/examples/web/models/models_obj_viewer.c +++ b/examples/web/models/models_obj_viewer.c @@ -44,7 +44,7 @@ void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- // Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -66,7 +66,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { diff --git a/examples/web/models/models_obj_viewer.data b/examples/web/models/models_obj_viewer.data new file mode 100644 index 0000000..b7eb703 --- /dev/null +++ b/examples/web/models/models_obj_viewer.data @@ -0,0 +1,3938 @@ +# (c) 2018 Medieval Assets Pack by Alberto Cano
+# Licensed as Creative Commons Attribution-NonCommercial 4.0
+
+#
+# object turret
+#
+
+v 0.0000 13.3010 3.5973
+v 0.0000 12.1596 2.3386
+v 2.5639 12.1596 2.3386
+v 3.4913 13.3010 3.5973
+v 3.5203 14.0462 3.0738
+v 3.9444 14.0450 3.1421
+v 3.9444 14.0369 -0.0000
+v 3.4351 14.0369 -0.0000
+v 3.4352 14.0462 2.9719
+v 3.3643 13.3303 2.9127
+v 0.0000 13.3303 2.9127
+v 0.0000 13.3010 2.9740
+v 3.4352 13.3010 2.9740
+v 0.0000 14.0462 2.9719
+v 3.9444 13.2918 -0.0000
+v 3.9444 13.2998 3.1441
+v 3.4913 14.0462 3.5952
+v 3.3643 13.3303 -0.0000
+v 0.0000 13.3303 -0.0000
+v 0.0000 14.0462 3.5952
+v 2.5639 12.1504 -0.0000
+v 3.4352 13.2918 -0.0000
+v 3.5237 14.9316 3.0740
+v 3.9478 14.9305 3.1422
+v 3.4947 14.9316 3.5953
+v 3.5271 16.4764 1.4274
+v 3.9512 16.4752 1.4274
+v 3.9512 15.9080 2.0774
+v 3.5271 15.9092 2.0092
+v 1.8327 16.4815 3.5953
+v 1.8617 16.4815 3.0742
+v 2.5117 15.9086 3.0742
+v 2.4725 15.9086 3.5953
+v 3.9512 16.4757 3.1424
+v 3.4981 16.4769 3.5955
+v 3.5271 16.4769 3.0742
+v 2.5639 12.1596 -2.3386
+v 0.0000 12.1596 -2.3386
+v 0.0000 13.3010 -3.5973
+v 3.4913 13.3010 -3.5973
+v 3.5203 14.0462 -3.0738
+v 3.4351 14.0462 -2.9720
+v 3.9444 14.0450 -3.1421
+v 0.0000 13.3010 -2.9740
+v 0.0000 13.3303 -2.9127
+v 3.3643 13.3303 -2.9127
+v 3.4352 13.3010 -2.9740
+v 0.0000 14.0462 -2.9719
+v 3.9444 13.2998 -3.1441
+v 3.4913 14.0462 -3.5952
+v 0.0000 14.0462 -3.5952
+v 3.9478 14.9305 -3.1422
+v 3.5237 14.9316 -3.0740
+v 3.4947 14.9316 -3.5953
+v 3.9512 15.9080 -2.0774
+v 3.9512 16.4752 -1.4274
+v 3.5271 16.4764 -1.4274
+v 3.5271 15.9092 -2.0092
+v 2.5117 15.9086 -3.0742
+v 1.8617 16.4815 -3.0742
+v 1.8327 16.4815 -3.5954
+v 2.4725 15.9086 -3.5953
+v 3.4981 16.4769 -3.5955
+v 3.9512 16.4757 -3.1424
+v 3.5271 16.4769 -3.0742
+v -2.5639 12.1596 2.3386
+v -3.4913 13.3010 3.5973
+v -3.5203 14.0462 3.0738
+v -3.4351 14.0462 2.9720
+v -3.4351 14.0369 0.0000
+v -3.9444 14.0369 0.0000
+v -3.9444 14.0450 3.1421
+v -3.3643 13.3303 2.9127
+v -3.4351 13.3010 2.9740
+v -3.9444 13.2918 0.0000
+v -3.9444 13.2998 3.1441
+v -3.4913 14.0462 3.5952
+v -3.3643 13.3303 0.0000
+v -2.5639 12.1504 0.0000
+v -3.4351 13.2918 0.0000
+v -3.9478 14.9305 3.1422
+v -3.5237 14.9316 3.0740
+v -3.4947 14.9316 3.5954
+v -3.9512 15.9080 2.0774
+v -3.9512 16.4752 1.4274
+v -3.5271 16.4764 1.4274
+v -3.5271 15.9092 2.0092
+v -2.5117 15.9086 3.0742
+v -1.8617 16.4815 3.0742
+v -1.8327 16.4815 3.5954
+v -2.4725 15.9086 3.5953
+v -3.4981 16.4769 3.5955
+v -3.9512 16.4757 3.1424
+v -3.5271 16.4769 3.0742
+v -2.5639 12.1596 -2.3386
+v -3.4913 13.3010 -3.5972
+v -3.5203 14.0462 -3.0738
+v -3.9444 14.0450 -3.1421
+v -3.4351 14.0462 -2.9719
+v -3.3643 13.3303 -2.9127
+v -3.4351 13.3010 -2.9740
+v -3.9444 13.2998 -3.1441
+v -3.4913 14.0462 -3.5952
+v -3.5237 14.9316 -3.0740
+v -3.9478 14.9305 -3.1422
+v -3.4947 14.9316 -3.5953
+v -3.5271 16.4764 -1.4274
+v -3.9512 16.4752 -1.4274
+v -3.9512 15.9080 -2.0774
+v -3.5271 15.9092 -2.0092
+v -1.8327 16.4815 -3.5953
+v -1.8617 16.4815 -3.0742
+v -2.5117 15.9086 -3.0742
+v -2.4725 15.9086 -3.5953
+v -3.9512 16.4757 -3.1424
+v -3.4981 16.4769 -3.5955
+v -3.5271 16.4769 -3.0742
+v 0.1550 14.0277 -3.1544
+v 0.1550 14.0277 -3.5335
+v 0.1550 16.9018 -3.5335
+v 0.1550 16.9018 -3.1544
+v -0.5341 14.0277 -3.5335
+v -0.5341 16.9018 -3.5335
+v -0.5341 14.0277 -3.1544
+v -0.5341 16.9018 -3.1544
+v -3.5170 14.0277 -0.3456
+v -3.8961 14.0277 -0.3456
+v -3.8961 16.9018 -0.3456
+v -3.5170 16.9018 -0.3456
+v -3.8961 14.0277 0.3435
+v -3.8961 16.9018 0.3435
+v -3.5170 14.0277 0.3435
+v -3.5170 16.9018 0.3435
+v -0.3446 14.0277 3.1662
+v -0.3446 14.0277 3.5453
+v -0.3446 16.9018 3.5453
+v -0.3446 16.9018 3.1662
+v 0.3445 14.0277 3.5453
+v 0.3445 16.9018 3.5453
+v 0.3445 14.0277 3.1662
+v 0.3445 16.9018 3.1662
+v 3.5160 14.0277 0.3435
+v 3.8951 14.0277 0.3435
+v 3.8951 16.9018 0.3435
+v 3.5160 16.9018 0.3435
+v 3.8951 14.0277 -0.3456
+v 3.8951 16.9018 -0.3456
+v 3.5160 14.0277 -0.3456
+v 3.5160 16.9018 -0.3456
+v 0.0000 8.6187 2.3766
+v 0.4715 8.6467 2.3766
+v 0.4598 9.7167 2.3896
+v -0.0117 10.0591 2.3896
+v 0.8403 8.5183 2.4160
+v 0.8403 8.5183 2.3077
+v 0.8403 8.6724 2.3077
+v 0.8403 8.6724 2.4160
+v 0.7068 9.8138 2.4290
+v 0.7068 9.8138 2.3207
+v -0.0117 10.3117 2.3207
+v -0.0117 10.3117 2.4290
+v -0.8403 8.6724 2.4160
+v -0.8403 8.6724 2.3077
+v -0.8403 8.5183 2.3077
+v -0.8403 8.5183 2.4160
+v -0.7186 8.5183 2.4160
+v -0.7186 8.5183 2.3077
+v -0.0000 8.4646 2.3077
+v -0.0000 8.4646 2.4160
+v 0.7185 8.5183 2.5347
+v 0.7185 8.6724 2.5347
+v 0.4715 8.6467 2.5347
+v 0.4598 9.7167 2.4290
+v -0.0117 10.0591 2.4290
+v -0.7186 8.6724 2.5347
+v -0.7186 8.5183 2.5347
+v -0.4715 8.6567 2.5347
+v -0.0000 8.4646 2.5347
+v -0.0000 8.6187 2.5347
+v -0.4833 9.7167 2.3896
+v -0.4715 8.6567 2.3766
+v -0.7303 9.8138 2.3207
+v -0.7302 9.8138 2.4290
+v 0.7185 8.5183 2.3077
+v 0.7185 8.5183 2.4160
+v -0.4832 9.7167 2.4290
+v 0.4715 8.6467 2.4160
+v -0.4716 8.6567 2.4160
+v -0.0000 8.6187 2.4160
+v -0.7186 8.6724 2.4160
+v -0.7186 8.6724 2.3077
+v 0.7185 8.6724 2.4160
+v 0.7185 8.6724 2.3077
+v 0.8403 8.5183 2.5347
+v 0.8403 8.6724 2.5347
+v -0.8403 8.6724 2.5347
+v -0.8403 8.5183 2.5347
+v 2.6080 8.6187 -0.0010
+v 2.6080 8.6467 -0.4725
+v 2.6210 9.7167 -0.4608
+v 2.6210 10.0591 0.0107
+v 2.6474 8.5183 -0.8413
+v 2.5392 8.5183 -0.8413
+v 2.5392 8.6724 -0.8413
+v 2.6474 8.6724 -0.8413
+v 2.6604 9.8138 -0.7079
+v 2.5522 9.8138 -0.7078
+v 2.5522 10.3117 0.0107
+v 2.6604 10.3117 0.0107
+v 2.6474 8.6724 0.8393
+v 2.5392 8.6724 0.8393
+v 2.5392 8.5183 0.8393
+v 2.6474 8.5183 0.8393
+v 2.6474 8.5183 0.7175
+v 2.5392 8.5183 0.7175
+v 2.5392 8.4646 -0.0010
+v 2.6474 8.4646 -0.0010
+v 2.7661 8.5183 -0.7195
+v 2.7661 8.6724 -0.7195
+v 2.7661 8.6467 -0.4725
+v 2.6604 9.7167 -0.4609
+v 2.6604 10.0591 0.0107
+v 2.7661 8.6724 0.7175
+v 2.7661 8.5183 0.7175
+v 2.7661 8.6567 0.4705
+v 2.7661 8.4646 -0.0010
+v 2.7661 8.6187 -0.0010
+v 2.6210 9.7167 0.4822
+v 2.6080 8.6567 0.4705
+v 2.5522 9.8138 0.7292
+v 2.6604 9.8138 0.7292
+v 2.5392 8.5183 -0.7196
+v 2.6474 8.5183 -0.7195
+v 2.6604 9.7167 0.4822
+v 2.6474 8.6467 -0.4725
+v 2.6474 8.6567 0.4705
+v 2.6474 8.6187 -0.0010
+v 2.6474 8.6724 0.7175
+v 2.5392 8.6724 0.7175
+v 2.6474 8.6724 -0.7195
+v 2.5392 8.6724 -0.7196
+v 2.7661 8.5183 -0.8413
+v 2.7661 8.6724 -0.8413
+v 2.7661 8.6724 0.8393
+v 2.7661 8.5183 0.8393
+v -2.6159 8.6187 -0.0010
+v -2.6159 8.6467 0.4705
+v -2.6289 9.7167 0.4588
+v -2.6289 10.0591 -0.0127
+v -2.6553 8.5183 0.8393
+v -2.5470 8.5183 0.8393
+v -2.5470 8.6724 0.8393
+v -2.6553 8.6724 0.8393
+v -2.6683 9.8138 0.7058
+v -2.5600 9.8138 0.7058
+v -2.5600 10.3117 -0.0127
+v -2.6683 10.3117 -0.0127
+v -2.6553 8.6724 -0.8413
+v -2.5470 8.6724 -0.8413
+v -2.5470 8.5183 -0.8413
+v -2.6553 8.5183 -0.8413
+v -2.6553 8.5183 -0.7195
+v -2.5470 8.5183 -0.7195
+v -2.5470 8.4646 -0.0010
+v -2.6553 8.4646 -0.0010
+v -2.7740 8.5183 0.7175
+v -2.7740 8.6724 0.7175
+v -2.7740 8.6467 0.4705
+v -2.6683 9.7167 0.4589
+v -2.6683 10.0591 -0.0127
+v -2.7740 8.6724 -0.7195
+v -2.7740 8.5183 -0.7195
+v -2.7740 8.6567 -0.4725
+v -2.7740 8.4646 -0.0010
+v -2.7740 8.6187 -0.0010
+v -2.6289 9.7167 -0.4843
+v -2.6159 8.6567 -0.4725
+v -2.5600 9.8138 -0.7312
+v -2.6683 9.8138 -0.7312
+v -2.5470 8.5183 0.7175
+v -2.6553 8.5183 0.7175
+v -2.6683 9.7167 -0.4842
+v -2.6553 8.6467 0.4705
+v -2.6553 8.6567 -0.4725
+v -2.6553 8.6187 -0.0010
+v -2.6553 8.6724 -0.7195
+v -2.5470 8.6724 -0.7195
+v -2.6553 8.6724 0.7175
+v -2.5470 8.6724 0.7175
+v -2.7740 8.5183 0.8393
+v -2.7740 8.6724 0.8393
+v -2.7740 8.6724 -0.8413
+v -2.7740 8.5183 -0.8413
+v -2.5639 0.0000 -2.3386
+v -2.5639 0.0000 2.3365
+v -2.5639 12.1411 2.3365
+v 2.5639 -0.0000 2.3365
+v 2.5639 12.1411 2.3365
+v 2.5639 -0.0000 -2.3386
+v -3.3222 12.8680 -0.0010
+v -3.3222 12.8680 -2.9994
+v -3.3222 11.9932 -2.9994
+v -3.3222 11.8321 -0.0010
+v -0.0000 12.8680 2.9974
+v -3.3222 12.8680 2.9974
+v -3.3222 11.9932 2.9974
+v -0.0000 11.8320 2.9974
+v 3.3221 12.8680 -0.0010
+v 3.3221 12.8680 2.9974
+v 3.3221 11.9932 2.9974
+v 3.3221 11.8320 -0.0010
+v -0.0000 12.8680 -2.9994
+v 3.3221 12.8680 -2.9994
+v 3.3221 11.9932 -2.9994
+v -0.0000 11.8320 -2.9994
+v -2.5639 11.9932 -2.3386
+v -0.0000 11.8320 -2.3386
+v 2.5639 11.9932 -2.3386
+v 2.5639 11.8321 -0.0010
+v 2.5639 11.9932 2.3365
+v -0.0000 11.8321 2.3365
+v -2.5639 11.9932 2.3365
+v -2.5639 11.8321 -0.0010
+v -2.5639 12.8680 -2.3386
+v -2.5639 12.8680 -0.0010
+v -2.5639 12.8680 2.3365
+v -0.0000 12.8680 2.3365
+v 2.5639 12.8680 2.3365
+v 2.5639 12.8680 -0.0010
+v 2.5639 12.8680 -2.3386
+v -0.0000 12.8680 -2.3386
+v -3.3222 6.6605 -0.0010
+v -3.3222 6.6605 -2.9994
+v -3.3222 5.7858 -2.9994
+v -3.3222 5.6246 -0.0010
+v -0.0000 6.6605 2.9974
+v -3.3222 6.6605 2.9974
+v -3.3222 5.7858 2.9974
+v -0.0000 5.6246 2.9974
+v 3.3221 6.6605 -0.0010
+v 3.3221 6.6605 2.9974
+v 3.3221 5.7858 2.9974
+v 3.3221 5.6246 -0.0010
+v -0.0000 6.6605 -2.9994
+v 3.3221 6.6605 -2.9994
+v 3.3221 5.7858 -2.9994
+v -0.0000 5.6246 -2.9994
+v -2.5639 5.7858 -2.3386
+v -0.0000 5.6246 -2.3386
+v 2.5639 5.7858 -2.3386
+v 2.5639 5.6246 -0.0010
+v 2.5639 5.7858 2.3365
+v -0.0000 5.6246 2.3365
+v -2.5639 5.7858 2.3365
+v -2.5639 5.6246 -0.0010
+v -2.5639 6.6605 -2.3386
+v -2.5639 6.6605 -0.0010
+v -2.5639 6.6605 2.3365
+v -0.0000 6.6605 2.3365
+v 2.5639 6.6605 2.3365
+v 2.5639 6.6605 -0.0010
+v 2.5639 6.6605 -2.3386
+v -0.0000 6.6605 -2.3386
+v -2.6103 9.3882 2.4561
+v -2.6767 9.3882 1.9558
+v -2.9138 6.4859 1.8341
+v -2.9138 6.4859 2.7406
+v -2.9138 12.2904 1.8341
+v -2.9138 12.2904 2.7406
+v -1.9967 6.4859 2.7406
+v -2.0923 9.3882 2.4561
+v -1.9967 11.6821 2.7406
+v -1.9967 6.4859 1.8341
+v -2.1587 9.3882 1.9558
+v -1.9967 11.6821 1.8341
+v -2.6103 9.4353 -2.4582
+v -2.9138 6.5331 -2.7426
+v -2.9138 6.5331 -1.8362
+v -2.6767 9.4353 -1.9578
+v -2.9138 12.3375 -1.8362
+v -2.9138 12.3375 -2.7426
+v -2.0923 9.4353 -2.4581
+v -1.9967 6.5331 -2.7426
+v -1.9967 11.7293 -2.7426
+v -2.1587 9.4353 -1.9578
+v -1.9967 6.5331 -1.8362
+v -1.9967 11.7293 -1.8362
+v -2.6103 2.9022 -2.4582
+v -2.9138 0.0000 -2.7426
+v -2.9138 0.0000 -1.8362
+v -2.6767 2.9022 -1.9578
+v -2.9138 5.8044 -1.8362
+v -2.9138 5.8044 -2.7426
+v -2.0923 2.9022 -2.4581
+v -1.9967 0.0000 -2.7426
+v -1.9967 6.4231 -2.7426
+v -2.1587 2.9022 -1.9578
+v -1.9967 0.0000 -1.8362
+v -1.9967 6.4231 -1.8362
+v 2.6103 9.4517 2.4561
+v 2.9138 6.5495 2.7406
+v 2.9138 6.5495 1.8341
+v 2.6767 9.4517 1.9558
+v 2.9138 12.3539 1.8341
+v 2.9138 12.3539 2.7406
+v 2.0923 9.4517 2.4561
+v 1.9967 6.5495 2.7406
+v 1.9967 11.7456 2.7406
+v 2.1587 9.4517 1.9558
+v 1.9967 6.5495 1.8341
+v 1.9967 11.7456 1.8341
+v 2.6103 2.9022 -2.4581
+v 2.6767 2.9022 -1.9578
+v 2.9138 -0.0000 -1.8362
+v 2.9138 -0.0000 -2.7426
+v 2.9138 5.8044 -1.8362
+v 2.9138 5.8044 -2.7426
+v 1.9967 -0.0000 -2.7426
+v 2.0923 2.9022 -2.4581
+v 1.9967 6.4231 -2.7426
+v 1.9967 -0.0000 -1.8362
+v 2.1587 2.9022 -1.9578
+v 1.9967 6.4231 -1.8362
+v 2.6103 9.4353 -2.4582
+v 2.6767 9.4353 -1.9578
+v 2.9138 6.5331 -1.8362
+v 2.9138 6.5331 -2.7427
+v 2.9138 12.3375 -1.8362
+v 2.9138 12.3375 -2.7427
+v 1.9967 6.5331 -2.7427
+v 2.0923 9.4353 -2.4581
+v 1.9967 11.7293 -2.7427
+v 1.9967 6.5331 -1.8362
+v 2.1587 9.4353 -1.9578
+v 1.9967 11.7293 -1.8362
+v 2.6103 2.9022 2.4561
+v 2.9138 -0.0000 2.7406
+v 2.9138 -0.0000 1.8341
+v 2.6767 2.9022 1.9558
+v 2.9138 5.8044 1.8341
+v 2.9138 5.8044 2.7406
+v 2.0923 2.9022 2.4561
+v 1.9967 -0.0000 2.7406
+v 1.9967 6.4231 2.7406
+v 2.1587 2.9022 1.9558
+v 1.9967 -0.0000 1.8341
+v 1.9967 6.4231 1.8341
+v -2.6103 2.9022 2.4561
+v -2.6767 2.9022 1.9558
+v -2.9138 0.0000 1.8341
+v -2.9138 0.0000 2.7406
+v -2.9138 5.8044 1.8341
+v -2.9138 5.8044 2.7406
+v -1.9967 0.0000 2.7406
+v -2.0923 2.9022 2.4561
+v -1.9967 6.4231 2.7406
+v -1.9967 0.0000 1.8341
+v -2.1587 2.9022 1.9558
+v -1.9967 6.4231 1.8341
+v -1.5453 5.6703 -3.5469
+v -1.5453 7.5835 -3.4309
+v -0.7727 7.5835 -3.4309
+v -0.7727 4.7854 -3.5469
+v -1.5453 9.4968 -3.2987
+v -0.7727 9.4968 -3.2987
+v -1.5453 11.4101 -3.3804
+v -0.7727 11.4101 -3.3804
+v -1.5453 13.3234 -3.5469
+v -0.7727 13.3234 -3.5469
+v -0.0000 7.5835 -3.4309
+v -0.0000 4.2830 -3.5469
+v -0.0000 9.4968 -3.2987
+v -0.0000 11.4101 -3.3804
+v -0.0000 13.3234 -3.5469
+v 0.7726 7.5835 -3.4309
+v 0.7726 4.7854 -3.5469
+v 0.7726 9.4968 -3.2987
+v 0.7726 11.4101 -3.3804
+v 0.7726 13.3234 -3.5469
+v 1.5453 7.5835 -3.4309
+v 1.5453 5.6702 -3.5469
+v 1.5453 9.4968 -3.2987
+v 1.5453 11.4101 -3.3804
+v 1.5453 13.3234 -3.5469
+v 0.0000 23.5750 -0.0000
+v -4.1897 16.4768 -3.9339
+v -4.1897 16.4768 3.9339
+v 4.1897 16.4768 3.9339
+v 4.1897 16.4768 -3.9339
+v -1.2971 3.7738 -2.1572
+v -1.2971 3.7738 -2.6666
+v -1.7173 3.6544 -2.6666
+v -1.7173 3.6544 -2.1572
+v -1.2971 -0.0000 -2.6666
+v -1.2971 3.3171 -2.6666
+v -1.2971 3.3171 -2.4156
+v -1.2971 -0.0000 -2.4156
+v -1.7173 -0.0000 -2.6666
+v -1.7173 3.3171 -2.6666
+v -1.7173 -0.0000 -2.1572
+v -1.7173 3.3171 -2.1572
+v 1.2970 3.7738 -2.6666
+v 1.2970 3.7738 -2.1572
+v 1.7173 3.6544 -2.1572
+v 1.7173 3.6544 -2.6666
+v 1.2970 -0.0000 -2.4156
+v 1.2970 3.3171 -2.4156
+v 1.2970 3.3171 -2.6666
+v 1.2970 -0.0000 -2.6666
+v 1.7173 -0.0000 -2.6666
+v 1.7173 3.3171 -2.6666
+v 1.7173 3.3171 -2.1572
+v 1.7173 -0.0000 -2.1572
+v -0.0000 4.3176 -2.6666
+v -0.0000 4.3176 -2.1572
+v -0.0000 3.7437 -2.6666
+v -0.0000 3.7437 -2.4156
+v -0.0000 -0.0000 -2.4156
+# 518 vertices
+
+vn 0.0000 -0.7408 0.6718
+vn 0.0016 1.0000 -0.0028
+vn -0.0000 0.9024 0.4309
+vn 0.0000 -0.0028 -1.0000
+vn 1.0000 0.0000 -0.0000
+vn 0.4189 -0.8046 0.4210
+vn 0.7071 0.0020 0.7071
+vn -0.0000 1.0000 -0.0000
+vn 0.0000 0.0028 1.0000
+vn 0.6366 -0.7712 0.0024
+vn 0.4322 0.9018 -0.0014
+vn -1.0000 -0.0000 0.0000
+vn 0.1589 -0.0004 -0.9873
+vn -0.9985 0.0039 -0.0555
+vn 0.7071 -0.0029 0.7071
+vn 0.0524 -0.7346 -0.6765
+vn -0.6635 -0.7469 -0.0434
+vn 0.7071 -0.0016 0.7071
+vn -1.0000 0.0014 -0.0007
+vn 1.0000 -0.0014 0.0007
+vn 0.1062 -0.7327 -0.6723
+vn -0.0001 -0.0001 1.0000
+vn -0.0000 0.0001 -1.0000
+vn -0.6920 -0.7204 -0.0452
+vn 0.0000 -0.7408 -0.6718
+vn 0.0016 1.0000 0.0028
+vn -0.0000 0.9024 -0.4309
+vn 0.0000 -0.0028 1.0000
+vn 0.4189 -0.8046 -0.4210
+vn 0.7071 0.0020 -0.7071
+vn -0.0000 1.0000 0.0000
+vn -0.0000 0.0028 -1.0000
+vn 0.6366 -0.7712 -0.0024
+vn 0.4322 0.9018 0.0014
+vn 0.1589 -0.0004 0.9873
+vn -0.9985 0.0039 0.0555
+vn 0.7071 -0.0029 -0.7071
+vn 0.0524 -0.7346 0.6765
+vn -0.6635 -0.7469 0.0434
+vn 0.7071 -0.0016 -0.7071
+vn -1.0000 0.0014 0.0007
+vn 1.0000 -0.0014 -0.0007
+vn 0.1062 -0.7327 0.6723
+vn -0.0001 -0.0001 -1.0000
+vn -0.0000 0.0001 1.0000
+vn -0.6920 -0.7204 0.0452
+vn -0.0000 -0.7408 0.6718
+vn -0.0016 1.0000 -0.0028
+vn 0.0000 0.9024 0.4309
+vn -0.0000 -0.0028 -1.0000
+vn -1.0000 0.0000 0.0000
+vn -0.4189 -0.8046 0.4210
+vn -0.7071 0.0020 0.7071
+vn 0.0000 1.0000 -0.0000
+vn -0.6366 -0.7712 0.0024
+vn -0.4322 0.9018 -0.0014
+vn -0.4321 0.9018 -0.0014
+vn 1.0000 -0.0000 -0.0000
+vn -0.1589 -0.0004 -0.9873
+vn 0.9985 0.0039 -0.0555
+vn -0.7071 -0.0029 0.7071
+vn -0.0524 -0.7346 -0.6765
+vn 0.6635 -0.7469 -0.0434
+vn -0.7071 -0.0016 0.7071
+vn 1.0000 0.0014 -0.0007
+vn -1.0000 -0.0014 0.0007
+vn -0.1062 -0.7327 -0.6723
+vn 0.0001 -0.0001 1.0000
+vn 0.0000 0.0001 -1.0000
+vn 0.6920 -0.7204 -0.0452
+vn -0.0000 -0.7408 -0.6718
+vn -0.0016 1.0000 0.0028
+vn 0.0000 0.9024 -0.4309
+vn -0.0000 -0.0028 1.0000
+vn -0.4189 -0.8046 -0.4210
+vn -0.7071 0.0020 -0.7071
+vn 0.0000 1.0000 0.0000
+vn -0.6366 -0.7712 -0.0024
+vn -0.4321 0.9018 0.0014
+vn -0.4322 0.9018 0.0014
+vn -0.1589 -0.0004 0.9873
+vn 0.9985 0.0039 0.0555
+vn -0.7071 -0.0029 -0.7071
+vn -0.0524 -0.7346 0.6765
+vn 0.6635 -0.7469 0.0434
+vn -0.7071 -0.0016 -0.7071
+vn 1.0000 0.0014 0.0007
+vn -1.0000 -0.0014 -0.0007
+vn -0.1062 -0.7327 0.6723
+vn 0.0001 -0.0001 -1.0000
+vn 0.0000 0.0001 1.0000
+vn 0.6920 -0.7204 0.0452
+vn -0.0000 0.0000 -1.0000
+vn 0.0000 0.0000 1.0000
+vn -0.0035 -0.0104 0.9999
+vn 1.0000 -0.0000 -0.0002
+vn 0.5696 0.8219 -0.0001
+vn -0.0745 -0.9972 0.0000
+vn -0.0000 -0.0000 1.0000
+vn -0.0000 0.0000 1.0000
+vn 0.0033 -0.0104 0.9999
+vn -0.5696 0.8219 0.0001
+vn 0.0745 -0.9972 0.0000
+vn 0.0000 -0.0000 1.0000
+vn -0.9999 -0.0109 0.0008
+vn -0.5875 -0.8092 0.0009
+vn 0.5875 -0.8092 -0.0008
+vn 0.9999 0.0111 -0.0004
+vn 0.0803 0.9968 0.0001
+vn -0.0593 0.9982 -0.0000
+vn -0.0027 -0.0118 0.9999
+vn -0.9999 -0.0102 0.0001
+vn 0.9999 0.0103 -0.0002
+vn 0.0029 -0.0117 0.9999
+vn 1.0000 -0.0000 0.0001
+vn -0.1034 0.9946 0.0000
+vn -0.0593 0.9982 0.0000
+vn 0.0803 0.9968 -0.0000
+vn 0.0634 0.9980 -0.0000
+vn -1.0000 0.0000 0.0001
+vn -0.0000 -1.0000 0.0000
+vn 0.0000 -1.0000 0.0000
+vn 0.0000 -1.0000 -0.0000
+vn -0.0001 0.0000 1.0000
+vn 0.9999 -0.0104 0.0035
+vn -0.0001 0.0000 -1.0000
+vn -0.0001 0.8219 -0.5696
+vn -0.0000 -0.9972 0.0745
+vn 1.0000 -0.0000 0.0000
+vn 0.9999 -0.0104 -0.0034
+vn 0.0001 0.8219 0.5696
+vn 0.0000 -0.9972 -0.0745
+vn 0.0008 -0.0109 0.9999
+vn 0.0008 -0.8092 0.5875
+vn -0.0008 -0.8092 -0.5875
+vn -0.0004 0.0111 -0.9999
+vn 0.0000 0.9968 -0.0803
+vn -0.0000 0.9982 0.0593
+vn 0.9999 -0.0118 0.0027
+vn 0.0001 -0.0102 0.9999
+vn -0.0002 0.0103 -0.9999
+vn 0.9999 -0.0117 -0.0029
+vn 0.0001 -0.0000 -1.0000
+vn 0.0000 0.9946 0.1034
+vn 0.0000 0.9982 0.0593
+vn 0.0000 0.9968 -0.0804
+vn 0.0000 0.9980 -0.0634
+vn 0.0001 -0.0000 1.0000
+vn -0.0000 -0.9972 -0.0745
+vn -0.0000 -1.0000 -0.0000
+vn -0.9999 -0.0104 -0.0035
+vn 0.0002 -0.0000 1.0000
+vn -1.0000 0.0000 -0.0000
+vn -0.9999 -0.0104 0.0033
+vn -0.0008 -0.0109 -0.9999
+vn -0.0009 -0.8092 -0.5875
+vn 0.0007 -0.8092 0.5875
+vn 0.0004 0.0111 0.9999
+vn -0.0001 0.9968 0.0803
+vn 0.0000 0.9982 -0.0593
+vn -0.9999 -0.0118 -0.0027
+vn -0.0001 -0.0102 -0.9999
+vn 0.0002 0.0103 0.9999
+vn -0.9999 -0.0117 0.0029
+vn -0.0001 -0.0000 1.0000
+vn 0.0000 0.9946 -0.1034
+vn 0.0000 0.9968 0.0803
+vn 0.0000 0.9980 0.0634
+vn -1.0000 0.0000 -0.0001
+vn 0.0000 -0.0000 -1.0000
+vn -0.0547 -0.9980 0.0314
+vn -0.0263 -0.9978 -0.0603
+vn 0.0547 -0.9980 -0.0314
+vn 0.0263 -0.9978 0.0603
+vn 0.0547 -0.9980 0.0314
+vn -0.0263 -0.9978 0.0603
+vn -0.0547 -0.9980 -0.0314
+vn 0.0263 -0.9978 -0.0603
+vn -0.9945 0.0939 0.0469
+vn -0.9945 -0.0939 0.0469
+vn 0.0000 0.0976 0.9952
+vn -0.0469 -0.1106 0.9928
+vn 0.9980 0.0430 -0.0471
+vn 0.9974 -0.0543 -0.0471
+vn -0.0000 0.0419 -0.9991
+vn -0.0199 -0.0471 -0.9987
+vn -0.9945 0.0939 -0.0469
+vn -0.9945 -0.0939 -0.0469
+vn 0.0000 0.0976 -0.9952
+vn -0.0469 -0.1106 -0.9928
+vn 0.9980 0.0430 0.0471
+vn 0.9974 -0.0543 0.0471
+vn 0.0000 0.0419 0.9991
+vn -0.0199 -0.0471 0.9987
+vn 0.0375 -0.0870 -0.9955
+vn 0.9983 -0.0354 0.0471
+vn 0.0162 -0.0377 0.9992
+vn 0.9945 0.0939 0.0469
+vn 0.9945 -0.0939 0.0469
+vn -0.0000 0.0976 0.9952
+vn 0.0469 -0.1106 0.9928
+vn -0.9980 0.0430 -0.0471
+vn -0.9974 -0.0543 -0.0471
+vn 0.0199 -0.0471 -0.9987
+vn 0.9945 0.0939 -0.0469
+vn 0.9945 -0.0939 -0.0469
+vn -0.0000 0.0976 -0.9952
+vn -0.0375 -0.0870 -0.9955
+vn -0.9980 0.0430 0.0471
+vn -0.9983 -0.0354 0.0471
+vn -0.0162 -0.0377 0.9992
+vn 0.0469 -0.1106 -0.9928
+vn -0.9974 -0.0543 0.0471
+vn 0.0199 -0.0471 0.9987
+vn -0.0375 -0.0870 0.9955
+vn -0.9983 -0.0354 -0.0471
+vn -0.0162 -0.0377 -0.9992
+vn 0.0375 -0.0870 0.9955
+vn 0.9983 -0.0354 -0.0471
+vn 0.0162 -0.0377 -0.9992
+vn 0.0281 0.0492 -0.9984
+vn 0.0141 0.0591 -0.9982
+vn 0.0101 0.0563 -0.9984
+vn 0.0163 0.0408 -0.9990
+vn -0.0000 0.0132 -0.9999
+vn -0.0000 -0.0647 -0.9979
+vn -0.0000 -0.0867 -0.9962
+vn -0.0000 0.0535 -0.9986
+vn -0.0000 0.0380 -0.9993
+vn -0.0101 0.0563 -0.9984
+vn -0.0163 0.0408 -0.9990
+vn -0.0141 0.0591 -0.9982
+vn -0.0281 0.0492 -0.9984
+vn -0.8612 0.5083 0.0000
+vn 0.0000 0.4847 0.8747
+vn 0.8612 0.5083 -0.0000
+vn -0.0000 0.4847 -0.8747
+vn -0.2731 0.9620 0.0000
+vn 0.2731 0.9620 0.0000
+vn 0.3867 0.9222 0.0000
+vn -0.0000 -0.0000 -1.0000
+vn 0.3124 -0.9499 -0.0000
+vn -0.3867 0.9222 0.0000
+vn -0.3124 -0.9499 0.0000
+# 244 vertex normals
+
+vt 0.4672 0.7287 0.0000
+vt 0.4672 0.6812 0.0000
+vt 0.5381 0.6812 0.0000
+vt 0.5637 0.7287 0.0000
+vt 0.4511 0.6743 0.0000
+vt 0.4498 0.6669 0.0000
+vt 0.5101 0.6669 0.0000
+vt 0.5101 0.6758 0.0000
+vt 0.4531 0.6758 0.0000
+vt 0.6996 0.8663 0.0000
+vt 0.6083 0.8663 0.0000
+vt 0.6083 0.8881 0.0000
+vt 0.6996 0.8881 0.0000
+vt 0.6083 0.9203 0.0000
+vt 0.6996 0.9203 0.0000
+vt 0.6348 0.6259 0.0000
+vt 0.6348 0.6557 0.0000
+vt 0.5033 0.6557 0.0000
+vt 0.5033 0.6259 0.0000
+vt 0.4860 0.7374 0.0000
+vt 0.4587 0.8045 0.0000
+vt 0.4433 0.8046 0.0000
+vt 0.7663 0.6259 0.0000
+vt 0.7905 0.6258 0.0000
+vt 0.7905 0.6557 0.0000
+vt 0.7664 0.6557 0.0000
+vt 0.5578 0.5104 0.0000
+vt 0.6319 0.5104 0.0000
+vt 0.6319 0.6024 0.0000
+vt 0.5578 0.6024 0.0000
+vt 0.4411 0.6748 0.0000
+vt 0.4531 0.7357 0.0000
+vt 0.4411 0.7357 0.0000
+vt 0.5654 0.8042 0.0000
+vt 0.5654 0.7371 0.0000
+vt 0.5169 0.8663 0.0000
+vt 0.5169 0.8881 0.0000
+vt 0.5169 0.9203 0.0000
+vt 0.7344 0.2540 0.0000
+vt 0.7344 0.2807 0.0000
+vt 0.7215 0.2807 0.0000
+vt 0.7215 0.2540 0.0000
+vt 0.7532 0.2524 0.0000
+vt 0.7532 0.2800 0.0000
+vt 0.7370 0.2800 0.0000
+vt 0.7370 0.2524 0.0000
+vt 0.8440 0.5063 0.0000
+vt 0.8440 0.5248 0.0000
+vt 0.8307 0.5248 0.0000
+vt 0.8307 0.5063 0.0000
+vt 0.7344 0.3486 0.0000
+vt 0.7215 0.3486 0.0000
+vt 0.7215 0.3237 0.0000
+vt 0.7344 0.3237 0.0000
+vt 0.7532 0.3506 0.0000
+vt 0.7370 0.3506 0.0000
+vt 0.7370 0.3238 0.0000
+vt 0.7532 0.3238 0.0000
+vt 0.8440 0.5570 0.0000
+vt 0.8307 0.5570 0.0000
+vt 0.8364 0.5997 0.0000
+vt 0.7950 0.5997 0.0000
+vt 0.8096 0.5854 0.0000
+vt 0.8364 0.5608 0.0000
+vt 0.8663 0.5452 0.0000
+vt 0.8798 0.5570 0.0000
+vt 0.8093 0.5451 0.0000
+vt 0.7959 0.5570 0.0000
+vt 0.8620 0.5854 0.0000
+vt 0.8784 0.5997 0.0000
+vt 0.6756 0.2660 0.0000
+vt 0.6505 0.2660 0.0000
+vt 0.6505 0.4622 0.0000
+vt 0.6756 0.4622 0.0000
+vt 0.6058 0.3002 0.0000
+vt 0.6440 0.3002 0.0000
+vt 0.6440 0.4741 0.0000
+vt 0.6058 0.4741 0.0000
+vt 0.6280 0.0055 0.0000
+vt 0.6545 0.0069 0.0000
+vt 0.6548 0.0671 0.0000
+vt 0.6284 0.0865 0.0000
+vt 0.6000 0.2239 0.0000
+vt 0.6163 0.2239 0.0000
+vt 0.6163 0.2472 0.0000
+vt 0.6000 0.2472 0.0000
+vt 0.6822 0.1033 0.0000
+vt 0.6903 0.1033 0.0000
+vt 0.6903 0.1767 0.0000
+vt 0.6822 0.1767 0.0000
+vt 0.5852 0.2472 0.0000
+vt 0.5852 0.2239 0.0000
+vt 0.6098 0.1405 0.0000
+vt 0.6145 0.1405 0.0000
+vt 0.6140 0.1724 0.0000
+vt 0.6093 0.1724 0.0000
+vt 0.6552 0.1246 0.0000
+vt 0.6681 0.1246 0.0000
+vt 0.6659 0.1454 0.0000
+vt 0.6571 0.0825 0.0000
+vt 0.6723 0.0885 0.0000
+vt 0.6279 0.1193 0.0000
+vt 0.6279 0.1037 0.0000
+vt 0.6681 0.2453 0.0000
+vt 0.6552 0.2453 0.0000
+vt 0.6668 0.2246 0.0000
+vt 0.6507 0.1850 0.0000
+vt 0.6636 0.1850 0.0000
+vt 0.6018 0.0674 0.0000
+vt 0.6015 0.0077 0.0000
+vt 0.6903 0.2501 0.0000
+vt 0.6822 0.2501 0.0000
+vt 0.6135 0.2044 0.0000
+vt 0.6089 0.2043 0.0000
+vt 0.5834 0.0885 0.0000
+vt 0.5987 0.0825 0.0000
+vt 0.6955 0.1208 0.0000
+vt 0.6955 0.0105 0.0000
+vt 0.7028 0.0105 0.0000
+vt 0.7028 0.1208 0.0000
+vt 0.7028 0.1808 0.0000
+vt 0.6955 0.1808 0.0000
+vt 0.7028 0.2409 0.0000
+vt 0.6955 0.2409 0.0000
+vt 0.7028 0.3501 0.0000
+vt 0.6955 0.3501 0.0000
+vt 0.6375 0.2580 0.0000
+vt 0.6331 0.2581 0.0000
+vt 0.6322 0.2120 0.0000
+vt 0.6366 0.2119 0.0000
+vt 0.6312 0.1659 0.0000
+vt 0.6356 0.1658 0.0000
+vt 0.5834 0.0179 0.0000
+vt 0.5987 0.0169 0.0000
+vt 0.6903 0.3459 0.0000
+vt 0.6822 0.3459 0.0000
+vt 0.6822 0.0075 0.0000
+vt 0.6903 0.0075 0.0000
+vt 0.6571 0.0163 0.0000
+vt 0.6723 0.0179 0.0000
+vt 0.6242 0.1418 0.0000
+vt 0.6307 0.1417 0.0000
+vt 0.6247 0.1661 0.0000
+vt 0.6256 0.2121 0.0000
+vt 0.6265 0.2583 0.0000
+vt 0.6335 0.2823 0.0000
+vt 0.6270 0.2824 0.0000
+vt 0.6047 0.1405 0.0000
+vt 0.6042 0.1724 0.0000
+vt 0.6038 0.2043 0.0000
+vt 0.6365 0.1297 0.0000
+vt 0.6367 0.1416 0.0000
+vt 0.6305 0.1298 0.0000
+vt 0.6240 0.1300 0.0000
+vt 0.6681 0.1144 0.0000
+vt 0.6552 0.1144 0.0000
+vt 0.6037 0.2097 0.0000
+vt 0.6088 0.2097 0.0000
+vt 0.6135 0.2098 0.0000
+vt 0.6145 0.1351 0.0000
+vt 0.6099 0.1351 0.0000
+vt 0.6048 0.1351 0.0000
+vt 0.6552 0.2555 0.0000
+vt 0.6681 0.2555 0.0000
+vt 0.6272 0.2943 0.0000
+vt 0.6337 0.2942 0.0000
+vt 0.6395 0.2822 0.0000
+vt 0.6397 0.2940 0.0000
+vt 0.1601 0.2593 0.0000
+vt 0.1601 0.0045 0.0000
+vt 0.2454 0.0045 0.0000
+vt 0.2454 0.2590 0.0000
+vt 0.2838 0.5470 0.0000
+vt 0.2838 0.2690 0.0000
+vt 0.1765 0.2690 0.0000
+vt 0.1765 0.5470 0.0000
+vt 0.1150 0.3564 0.0000
+vt 0.1150 0.0538 0.0000
+vt 0.0116 0.0538 0.0000
+vt 0.0116 0.3569 0.0000
+vt 0.0100 0.6667 0.0000
+vt 0.0100 0.3673 0.0000
+vt 0.1291 0.3673 0.0000
+vt 0.1291 0.6667 0.0000
+vt 0.9942 0.1083 0.0000
+vt 0.9942 0.2099 0.0000
+vt 0.9659 0.2099 0.0000
+vt 0.9607 0.1083 0.0000
+vt 0.9942 0.0068 0.0000
+vt 0.9659 0.0068 0.0000
+vt 0.3004 0.5798 0.0000
+vt 0.2911 0.5701 0.0000
+vt 0.2911 0.6124 0.0000
+vt 0.3004 0.6124 0.0000
+vt 0.3004 0.6450 0.0000
+vt 0.2911 0.6547 0.0000
+vt 0.3334 0.6547 0.0000
+vt 0.3334 0.6450 0.0000
+vt 0.3663 0.6450 0.0000
+vt 0.3757 0.6547 0.0000
+vt 0.3757 0.6124 0.0000
+vt 0.3663 0.6124 0.0000
+vt 0.3663 0.5798 0.0000
+vt 0.3757 0.5701 0.0000
+vt 0.3334 0.5701 0.0000
+vt 0.3334 0.5798 0.0000
+vt 0.2876 0.5671 0.0000
+vt 0.2747 0.5537 0.0000
+vt 0.3334 0.5537 0.0000
+vt 0.3334 0.5671 0.0000
+vt 0.3793 0.5671 0.0000
+vt 0.3922 0.5537 0.0000
+vt 0.3922 0.6125 0.0000
+vt 0.3793 0.6125 0.0000
+vt 0.3793 0.6578 0.0000
+vt 0.3922 0.6712 0.0000
+vt 0.3334 0.6712 0.0000
+vt 0.3334 0.6578 0.0000
+vt 0.2876 0.6578 0.0000
+vt 0.2747 0.6712 0.0000
+vt 0.2747 0.6125 0.0000
+vt 0.2876 0.6125 0.0000
+vt 0.9513 0.1060 0.0000
+vt 0.9513 0.0044 0.0000
+vt 0.9230 0.0044 0.0000
+vt 0.9178 0.1060 0.0000
+vt 0.9097 0.1060 0.0000
+vt 0.9097 0.0044 0.0000
+vt 0.8814 0.0044 0.0000
+vt 0.8762 0.1060 0.0000
+vt 0.8814 0.2076 0.0000
+vt 0.9097 0.2076 0.0000
+vt 0.9230 0.2075 0.0000
+vt 0.9513 0.2075 0.0000
+vt 0.8658 0.1132 0.0000
+vt 0.8487 0.1132 0.0000
+vt 0.8445 0.0044 0.0000
+vt 0.8755 0.0044 0.0000
+vt 0.8445 0.2221 0.0000
+vt 0.8755 0.2221 0.0000
+vt 0.7801 0.1104 0.0000
+vt 0.7912 0.0058 0.0000
+vt 0.7576 0.0058 0.0000
+vt 0.7611 0.1104 0.0000
+vt 0.7912 0.2151 0.0000
+vt 0.7576 0.2374 0.0000
+vt 0.7362 0.1124 0.0000
+vt 0.7464 0.0064 0.0000
+vt 0.7139 0.0064 0.0000
+vt 0.7182 0.1124 0.0000
+vt 0.7139 0.2409 0.0000
+vt 0.7464 0.2409 0.0000
+vt 0.8231 0.1080 0.0000
+vt 0.8044 0.1080 0.0000
+vt 0.7986 0.0056 0.0000
+vt 0.8316 0.0056 0.0000
+vt 0.8316 0.2103 0.0000
+vt 0.7986 0.2321 0.0000
+vt 0.3996 0.1076 0.0000
+vt 0.3999 0.1680 0.0000
+vt 0.3755 0.1681 0.0000
+vt 0.3751 0.0799 0.0000
+vt 0.4002 0.2285 0.0000
+vt 0.3758 0.2286 0.0000
+vt 0.4005 0.2888 0.0000
+vt 0.3761 0.2890 0.0000
+vt 0.4008 0.3494 0.0000
+vt 0.3764 0.3495 0.0000
+vt 0.3512 0.1683 0.0000
+vt 0.3507 0.0641 0.0000
+vt 0.3515 0.2287 0.0000
+vt 0.3518 0.2891 0.0000
+vt 0.3521 0.3496 0.0000
+vt 0.3268 0.1684 0.0000
+vt 0.3264 0.0801 0.0000
+vt 0.3271 0.2288 0.0000
+vt 0.3274 0.2892 0.0000
+vt 0.3277 0.3497 0.0000
+vt 0.3025 0.1685 0.0000
+vt 0.3022 0.1081 0.0000
+vt 0.3028 0.2289 0.0000
+vt 0.3031 0.2893 0.0000
+vt 0.3033 0.3498 0.0000
+vt 0.1505 0.9738 0.0000
+vt 0.0042 0.6813 0.0000
+vt 0.2968 0.6813 0.0000
+vt 0.9446 0.3902 0.0000
+vt 0.9268 0.3902 0.0000
+vt 0.9268 0.3744 0.0000
+vt 0.9446 0.3744 0.0000
+vt 0.8974 0.3747 0.0000
+vt 0.8974 0.4922 0.0000
+vt 0.9065 0.4922 0.0000
+vt 0.9065 0.3747 0.0000
+vt 0.9924 0.3882 0.0000
+vt 0.9924 0.5080 0.0000
+vt 0.9766 0.5080 0.0000
+vt 0.9766 0.3882 0.0000
+vt 0.9160 0.3747 0.0000
+vt 0.9160 0.4922 0.0000
+vt 0.9924 0.5202 0.0000
+vt 0.9766 0.5245 0.0000
+vt 0.9160 0.5041 0.0000
+vt 0.8974 0.5041 0.0000
+vt 0.9268 0.4879 0.0000
+vt 0.9446 0.4879 0.0000
+vt 0.9446 0.5038 0.0000
+vt 0.9268 0.5038 0.0000
+vt 0.8789 0.3882 0.0000
+vt 0.8789 0.5080 0.0000
+vt 0.8630 0.5080 0.0000
+vt 0.8630 0.3882 0.0000
+vt 0.8789 0.5245 0.0000
+vt 0.8630 0.5202 0.0000
+vt 0.9268 0.4391 0.0000
+vt 0.9446 0.4391 0.0000
+vt 0.9277 0.5235 0.0000
+vt 0.9277 0.5442 0.0000
+vt 0.9356 0.4391 0.0000
+vt 0.9356 0.3902 0.0000
+vt 0.9356 0.4879 0.0000
+vt 0.4150 0.4926 0.0000
+vt 0.3619 0.5102 0.0000
+vt 0.3617 0.3568 0.0000
+vt 0.4148 0.3567 0.0000
+vt 0.3087 0.4928 0.0000
+vt 0.3085 0.3569 0.0000
+# 327 texture coords
+
+o turret
+g turret
+f 1/1/1 2/2/1 3/3/1
+f 3/3/1 4/4/1 1/1/1
+f 5/5/2 6/6/2 7/7/2
+f 5/5/2 7/7/2 8/8/2
+f 5/5/2 8/8/2 9/9/2
+f 10/10/3 11/11/3 12/12/3
+f 12/12/3 13/13/3 10/10/3
+f 12/12/4 14/14/4 9/15/4
+f 9/15/4 13/13/4 12/12/4
+f 15/16/5 7/17/5 6/18/5
+f 6/18/5 16/19/5 15/16/5
+f 3/20/6 16/21/6 4/22/6
+f 4/23/7 16/24/7 6/25/7
+f 6/25/7 17/26/7 4/23/7
+f 10/27/8 18/28/8 19/29/8
+f 19/29/8 11/30/8 10/27/8
+f 17/31/8 5/5/8 9/9/8
+f 17/31/8 9/9/8 14/32/8
+f 17/31/8 14/32/8 20/33/8
+f 4/23/9 17/26/9 20/17/9
+f 20/17/9 1/16/9 4/23/9
+f 15/34/10 16/21/10 3/20/10
+f 3/20/10 21/35/10 15/34/10
+f 10/36/11 13/37/11 22/12/11
+f 22/12/11 18/11/11 10/36/11
+f 13/37/12 9/38/12 8/14/12
+f 8/14/12 22/12/12 13/37/12
+f 5/39/13 23/40/13 24/41/13
+f 24/41/13 6/42/13 5/39/13
+f 17/43/14 25/44/14 23/45/14
+f 23/45/14 5/46/14 17/43/14
+f 6/47/15 24/48/15 25/49/15
+f 25/49/15 17/50/15 6/47/15
+f 26/51/16 27/52/16 28/53/16
+f 28/53/16 29/54/16 26/51/16
+f 30/55/17 31/56/17 32/57/17
+f 32/57/17 33/58/17 30/55/17
+f 34/59/18 35/60/18 25/49/18
+f 25/49/18 24/48/18 34/59/18
+f 36/61/19 26/62/19 29/63/19
+f 29/63/19 23/64/19 36/61/19
+f 28/65/20 27/66/20 34/59/20
+f 34/59/20 24/48/20 28/65/20
+f 24/41/21 23/40/21 29/54/21
+f 29/54/21 28/53/21 24/41/21
+f 33/67/22 25/49/22 35/60/22
+f 35/60/22 30/68/22 33/67/22
+f 32/69/23 31/70/23 36/61/23
+f 36/61/23 23/64/23 32/69/23
+f 23/45/24 25/44/24 33/58/24
+f 33/58/24 32/57/24 23/45/24
+f 37/3/25 38/2/25 39/1/25
+f 39/1/25 40/4/25 37/3/25
+f 41/5/26 42/9/26 8/8/26
+f 41/5/26 8/8/26 7/7/26
+f 41/5/26 7/7/26 43/6/26
+f 44/12/27 45/11/27 46/10/27
+f 46/10/27 47/13/27 44/12/27
+f 42/15/28 48/14/28 44/12/28
+f 44/12/28 47/13/28 42/15/28
+f 43/18/5 7/17/5 15/16/5
+f 15/16/5 49/19/5 43/18/5
+f 37/20/29 40/22/29 49/21/29
+f 40/23/30 50/26/30 43/25/30
+f 43/25/30 49/24/30 40/23/30
+f 19/29/31 18/28/31 46/27/31
+f 46/27/31 45/30/31 19/29/31
+f 50/31/31 51/33/31 48/32/31
+f 50/31/31 48/32/31 42/9/31
+f 50/31/31 42/9/31 41/5/31
+f 51/17/32 50/26/32 40/23/32
+f 40/23/32 39/16/32 51/17/32
+f 15/34/33 21/35/33 37/20/33
+f 37/20/33 49/21/33 15/34/33
+f 22/12/34 47/37/34 46/36/34
+f 46/36/34 18/11/34 22/12/34
+f 8/14/12 42/38/12 47/37/12
+f 47/37/12 22/12/12 8/14/12
+f 52/41/35 53/40/35 41/39/35
+f 41/39/35 43/42/35 52/41/35
+f 53/45/36 54/44/36 50/43/36
+f 50/43/36 41/46/36 53/45/36
+f 54/49/37 52/48/37 43/47/37
+f 43/47/37 50/50/37 54/49/37
+f 55/53/38 56/52/38 57/51/38
+f 57/51/38 58/54/38 55/53/38
+f 59/57/39 60/56/39 61/55/39
+f 61/55/39 62/58/39 59/57/39
+f 54/49/40 63/60/40 64/59/40
+f 64/59/40 52/48/40 54/49/40
+f 58/63/41 57/62/41 65/61/41
+f 65/61/41 53/64/41 58/63/41
+f 55/65/42 52/48/42 64/59/42
+f 64/59/42 56/66/42 55/65/42
+f 52/41/43 55/53/43 58/54/43
+f 58/54/43 53/40/43 52/41/43
+f 63/60/44 54/49/44 62/67/44
+f 62/67/44 61/68/44 63/60/44
+f 59/69/45 53/64/45 65/61/45
+f 65/61/45 60/70/45 59/69/45
+f 53/45/46 59/57/46 62/58/46
+f 62/58/46 54/44/46 53/45/46
+f 66/3/47 2/2/47 1/1/47
+f 1/1/47 67/4/47 66/3/47
+f 68/5/48 69/9/48 70/8/48
+f 68/5/48 70/8/48 71/7/48
+f 68/5/48 71/7/48 72/6/48
+f 12/12/49 11/11/49 73/10/49
+f 73/10/49 74/13/49 12/12/49
+f 69/15/50 14/14/50 12/12/50
+f 12/12/50 74/13/50 69/15/50
+f 72/18/51 71/17/51 75/16/51
+f 75/16/51 76/19/51 72/18/51
+f 66/20/52 67/22/52 76/21/52
+f 67/23/53 77/26/53 72/25/53
+f 72/25/53 76/24/53 67/23/53
+f 19/29/54 78/28/54 73/27/54
+f 73/27/54 11/30/54 19/29/54
+f 77/31/54 20/33/54 14/32/54
+f 77/31/54 14/32/54 69/9/54
+f 77/31/54 69/9/54 68/5/54
+f 20/17/9 77/26/9 67/23/9
+f 67/23/9 1/16/9 20/17/9
+f 75/34/55 79/35/55 66/20/55
+f 66/20/55 76/21/55 75/34/55
+f 80/12/56 74/37/57 73/36/57
+f 73/36/57 78/11/56 80/12/56
+f 70/14/58 69/38/58 74/37/58
+f 74/37/58 80/12/58 70/14/58
+f 81/41/59 82/40/59 68/39/59
+f 68/39/59 72/42/59 81/41/59
+f 82/45/60 83/44/60 77/43/60
+f 77/43/60 68/46/60 82/45/60
+f 83/49/61 81/48/61 72/47/61
+f 72/47/61 77/50/61 83/49/61
+f 84/53/62 85/52/62 86/51/62
+f 86/51/62 87/54/62 84/53/62
+f 88/57/63 89/56/63 90/55/63
+f 90/55/63 91/58/63 88/57/63
+f 83/49/64 92/60/64 93/59/64
+f 93/59/64 81/48/64 83/49/64
+f 87/63/65 86/62/65 94/61/65
+f 94/61/65 82/64/65 87/63/65
+f 84/65/66 81/48/66 93/59/66
+f 93/59/66 85/66/66 84/65/66
+f 81/41/67 84/53/67 87/54/67
+f 87/54/67 82/40/67 81/41/67
+f 92/60/68 83/49/68 91/67/68
+f 91/67/68 90/68/68 92/60/68
+f 88/69/69 82/64/69 94/61/69
+f 94/61/69 89/70/69 88/69/69
+f 82/45/70 88/57/70 91/58/70
+f 91/58/70 83/44/70 82/45/70
+f 39/1/71 38/2/71 95/3/71
+f 95/3/71 96/4/71 39/1/71
+f 97/5/72 98/6/72 71/7/72
+f 97/5/72 71/7/72 70/8/72
+f 97/5/72 70/8/72 99/9/72
+f 100/10/73 45/11/73 44/12/73
+f 44/12/73 101/13/73 100/10/73
+f 44/12/74 48/14/74 99/15/74
+f 99/15/74 101/13/74 44/12/74
+f 75/16/51 71/17/51 98/18/51
+f 98/18/51 102/19/51 75/16/51
+f 95/20/75 102/21/75 96/22/75
+f 96/23/76 102/24/76 98/25/76
+f 98/25/76 103/26/76 96/23/76
+f 100/27/77 78/28/77 19/29/77
+f 19/29/77 45/30/77 100/27/77
+f 103/31/77 97/5/77 99/9/77
+f 103/31/77 99/9/77 48/32/77
+f 103/31/77 48/32/77 51/33/77
+f 96/23/32 103/26/32 51/17/32
+f 51/17/32 39/16/32 96/23/32
+f 75/34/78 102/21/78 95/20/78
+f 95/20/78 79/35/78 75/34/78
+f 100/36/79 101/37/79 80/12/80
+f 80/12/80 78/11/80 100/36/79
+f 101/37/58 99/38/58 70/14/58
+f 70/14/58 80/12/58 101/37/58
+f 97/39/81 104/40/81 105/41/81
+f 105/41/81 98/42/81 97/39/81
+f 103/43/82 106/44/82 104/45/82
+f 104/45/82 97/46/82 103/43/82
+f 98/47/83 105/48/83 106/49/83
+f 106/49/83 103/50/83 98/47/83
+f 107/51/84 108/52/84 109/53/84
+f 109/53/84 110/54/84 107/51/84
+f 111/55/85 112/56/85 113/57/85
+f 113/57/85 114/58/85 111/55/85
+f 115/59/86 116/60/86 106/49/86
+f 106/49/86 105/48/86 115/59/86
+f 117/61/87 107/62/87 110/63/87
+f 110/63/87 104/64/87 117/61/87
+f 109/65/88 108/66/88 115/59/88
+f 115/59/88 105/48/88 109/65/88
+f 105/41/89 104/40/89 110/54/89
+f 110/54/89 109/53/89 105/41/89
+f 114/67/90 106/49/90 116/60/90
+f 116/60/90 111/68/90 114/67/90
+f 113/69/91 112/70/91 117/61/91
+f 117/61/91 104/64/91 113/69/91
+f 104/45/92 106/44/92 114/58/92
+f 114/58/92 113/57/92 104/45/92
+f 118/71/58 119/72/58 120/73/58
+f 120/73/58 121/74/58 118/71/58
+f 119/75/93 122/76/93 123/77/93
+f 123/77/93 120/78/93 119/75/93
+f 122/72/51 124/71/51 125/74/51
+f 125/74/51 123/73/51 122/72/51
+f 126/71/93 127/72/93 128/73/93
+f 128/73/93 129/74/93 126/71/93
+f 127/75/51 130/76/51 131/77/51
+f 131/77/51 128/78/51 127/75/51
+f 130/72/94 132/71/94 133/74/94
+f 133/74/94 131/73/94 130/72/94
+f 134/71/51 135/72/51 136/73/51
+f 136/73/51 137/74/51 134/71/51
+f 135/75/94 138/76/94 139/77/94
+f 139/77/94 136/78/94 135/75/94
+f 138/72/58 140/71/58 141/74/58
+f 141/74/58 139/73/58 138/72/58
+f 142/71/94 143/72/94 144/73/94
+f 144/73/94 145/74/94 142/71/94
+f 143/75/58 146/76/58 147/77/58
+f 147/77/58 144/78/58 143/75/58
+f 146/72/93 148/71/93 149/74/93
+f 149/74/93 147/73/93 146/72/93
+f 150/79/95 151/80/95 152/81/95
+f 152/81/95 153/82/95 150/79/95
+f 154/83/96 155/84/96 156/85/96
+f 156/85/96 157/86/96 154/83/96
+f 158/87/97 159/88/97 160/89/97
+f 160/89/97 161/90/97 158/87/97
+f 162/86/51 163/91/51 164/92/51
+f 164/92/51 165/83/51 162/86/51
+f 166/93/98 167/94/98 168/95/98
+f 168/95/98 169/96/98 166/93/98
+f 170/97/99 171/98/99 172/99/99
+f 173/100/99 158/101/99 161/102/99
+f 161/102/99 174/103/99 173/100/99
+f 175/104/100 176/105/100 177/106/100
+f 177/106/99 176/105/99 178/107/99
+f 178/107/99 179/108/99 177/106/99
+f 150/79/101 153/82/101 180/109/101
+f 180/109/101 181/110/101 150/79/101
+f 161/90/102 160/89/102 182/111/102
+f 182/111/102 183/112/102 161/90/102
+f 169/96/103 168/95/103 184/113/103
+f 184/113/103 185/114/103 169/96/103
+f 174/103/100 161/102/100 183/115/100
+f 183/115/100 186/116/100 174/103/100
+f 172/99/104 179/108/104 178/107/104
+f 178/107/104 170/97/104 172/99/104
+f 152/117/105 151/118/105 187/119/105
+f 187/119/105 173/120/105 152/117/105
+f 152/117/106 173/120/106 174/121/106
+f 174/121/106 153/122/106 152/117/106
+f 153/122/107 174/121/107 186/123/107
+f 186/123/107 180/124/107 153/122/107
+f 180/124/108 186/123/108 188/125/108
+f 188/125/108 181/126/108 180/124/108
+f 181/127/109 188/128/109 189/129/109
+f 189/129/109 150/130/109 181/127/109
+f 150/130/110 189/129/110 187/131/110
+f 187/131/110 151/132/110 150/130/110
+f 190/133/111 188/134/111 186/116/111
+f 186/116/111 183/115/111 190/133/111
+f 182/111/112 191/135/112 190/136/112
+f 190/136/112 183/112/112 182/111/112
+f 192/137/113 193/138/113 159/88/113
+f 159/88/113 158/87/113 192/137/113
+f 173/100/114 187/139/114 192/140/114
+f 192/140/114 158/101/114 173/100/114
+f 194/92/115 154/83/115 157/86/115
+f 157/86/115 195/91/115 194/92/115
+f 171/141/116 192/142/116 187/131/116
+f 187/131/116 172/143/116 171/141/116
+f 172/143/117 187/131/117 189/129/117
+f 189/129/117 179/144/117 172/143/117
+f 179/144/118 189/129/118 188/128/118
+f 188/128/118 177/145/118 179/144/118
+f 177/145/119 188/128/119 190/146/119
+f 190/146/119 175/147/119 177/145/119
+f 196/85/120 162/86/120 165/83/120
+f 165/83/120 197/84/120 196/85/120
+f 176/148/98 166/93/98 169/96/98
+f 169/96/98 178/149/98 176/148/98
+f 178/149/103 169/96/103 185/114/103
+f 185/114/103 170/150/103 178/149/103
+f 156/151/54 193/152/54 192/142/54
+f 192/142/54 157/153/54 156/151/54
+f 157/153/8 192/142/8 171/141/8
+f 171/141/8 195/154/8 157/153/8
+f 195/155/104 171/98/104 170/97/104
+f 170/97/104 194/156/104 195/155/104
+f 194/157/121 170/150/121 185/114/121
+f 185/114/121 154/158/121 194/157/121
+f 154/158/121 185/114/121 184/113/121
+f 184/113/121 155/159/121 154/158/121
+f 164/160/122 167/94/122 166/93/122
+f 166/93/122 165/161/122 164/160/122
+f 165/161/123 166/93/123 176/148/123
+f 176/148/123 197/162/123 165/161/123
+f 197/163/124 176/105/124 175/104/124
+f 175/104/124 196/164/124 197/163/124
+f 196/165/54 175/147/54 190/146/54
+f 190/146/54 162/166/54 196/165/54
+f 162/166/54 190/146/54 191/167/54
+f 191/167/54 163/168/54 162/166/54
+f 198/79/125 199/80/125 200/81/125
+f 200/81/125 201/82/125 198/79/125
+f 202/83/126 203/84/126 204/85/126
+f 204/85/126 205/86/126 202/83/126
+f 206/87/127 207/88/127 208/89/127
+f 208/89/127 209/90/127 206/87/127
+f 210/86/104 211/91/104 212/92/104
+f 212/92/104 213/83/104 210/86/104
+f 214/93/128 215/94/128 216/95/128
+f 216/95/128 217/96/128 214/93/128
+f 218/97/58 219/98/58 220/99/58
+f 221/100/129 206/101/129 209/102/129
+f 209/102/129 222/103/129 221/100/129
+f 223/104/129 224/105/129 225/106/129
+f 225/106/58 224/105/58 226/107/58
+f 226/107/58 227/108/58 225/106/58
+f 198/79/130 201/82/130 228/109/130
+f 228/109/130 229/110/130 198/79/130
+f 209/90/131 208/89/131 230/111/131
+f 230/111/131 231/112/131 209/90/131
+f 217/96/132 216/95/132 232/113/132
+f 232/113/132 233/114/132 217/96/132
+f 222/103/58 209/102/58 231/115/58
+f 231/115/58 234/116/58 222/103/58
+f 220/99/5 227/108/5 226/107/5
+f 226/107/5 218/97/5 220/99/5
+f 200/117/133 199/118/133 235/119/133
+f 235/119/133 221/120/133 200/117/133
+f 200/117/134 221/120/134 222/121/134
+f 222/121/134 201/122/134 200/117/134
+f 201/122/135 222/121/135 234/123/135
+f 234/123/135 228/124/135 201/122/135
+f 228/124/136 234/123/136 236/125/136
+f 236/125/136 229/126/136 228/124/136
+f 229/127/137 236/128/137 237/129/137
+f 237/129/137 198/130/137 229/127/137
+f 198/130/138 237/129/138 235/131/138
+f 235/131/138 199/132/138 198/130/138
+f 238/133/139 236/134/139 234/116/139
+f 234/116/139 231/115/139 238/133/139
+f 230/111/140 239/135/140 238/136/140
+f 238/136/140 231/112/140 230/111/140
+f 240/137/141 241/138/141 207/88/141
+f 207/88/141 206/87/141 240/137/141
+f 221/100/142 235/139/142 240/140/142
+f 240/140/142 206/101/142 221/100/142
+f 242/92/143 202/83/143 205/86/143
+f 205/86/143 243/91/143 242/92/143
+f 219/141/144 240/142/144 235/131/144
+f 235/131/144 220/143/144 219/141/144
+f 220/143/145 235/131/145 237/129/145
+f 237/129/145 227/144/145 220/143/145
+f 227/144/146 237/129/146 236/128/146
+f 236/128/146 225/145/146 227/144/146
+f 225/145/147 236/128/147 238/146/147
+f 238/146/147 223/147/147 225/145/147
+f 244/85/148 210/86/148 213/83/148
+f 213/83/148 245/84/148 244/85/148
+f 224/148/128 214/93/128 217/96/128
+f 217/96/128 226/149/128 224/148/128
+f 226/149/149 217/96/149 233/114/149
+f 233/114/149 218/150/149 226/149/149
+f 204/151/8 241/152/8 240/142/8
+f 240/142/8 205/153/8 204/151/8
+f 205/153/8 240/142/8 219/141/8
+f 219/141/8 243/154/8 205/153/8
+f 243/155/58 219/98/58 218/97/58
+f 218/97/58 242/156/58 243/155/58
+f 242/157/121 218/150/121 233/114/121
+f 233/114/121 202/158/121 242/157/121
+f 202/158/122 233/114/122 232/113/122
+f 232/113/122 203/159/122 202/158/122
+f 212/160/121 215/94/121 214/93/121
+f 214/93/121 213/161/121 212/160/121
+f 213/161/150 214/93/150 224/148/150
+f 224/148/150 245/162/150 213/161/150
+f 245/163/115 224/105/115 223/104/115
+f 223/104/115 244/164/115 245/163/115
+f 244/165/54 223/147/54 238/146/54
+f 238/146/54 210/166/54 244/165/54
+f 210/166/54 238/146/54 239/167/54
+f 239/167/54 211/168/54 210/166/54
+f 246/79/151 247/80/151 248/81/151
+f 248/81/151 249/82/151 246/79/151
+f 250/83/152 251/84/152 252/85/152
+f 252/85/152 253/86/152 250/83/152
+f 254/87/131 255/88/131 256/89/131
+f 256/89/131 257/90/131 254/87/131
+f 258/86/93 259/91/93 260/92/93
+f 260/92/93 261/83/93 258/86/93
+f 262/93/149 263/94/149 264/95/149
+f 264/95/149 265/96/149 262/93/149
+f 266/97/51 267/98/51 268/99/51
+f 269/100/12 254/101/12 257/102/12
+f 257/102/12 270/103/12 269/100/12
+f 271/104/153 272/105/153 273/106/153
+f 273/106/12 272/105/12 274/107/12
+f 274/107/12 275/108/12 273/106/12
+f 246/79/154 249/82/154 276/109/154
+f 276/109/154 277/110/154 246/79/154
+f 257/90/127 256/89/127 278/111/127
+f 278/111/127 279/112/127 257/90/127
+f 265/96/128 264/95/128 280/113/128
+f 280/113/128 281/114/128 265/96/128
+f 270/103/12 257/102/12 279/115/12
+f 279/115/12 282/116/12 270/103/12
+f 268/99/51 275/108/51 274/107/51
+f 274/107/51 266/97/51 268/99/51
+f 248/117/155 247/118/155 283/119/155
+f 283/119/155 269/120/155 248/117/155
+f 248/117/156 269/120/156 270/121/156
+f 270/121/156 249/122/156 248/117/156
+f 249/122/157 270/121/157 282/123/157
+f 282/123/157 276/124/157 249/122/157
+f 276/124/158 282/123/158 284/125/158
+f 284/125/158 277/126/158 276/124/158
+f 277/127/159 284/128/159 285/129/159
+f 285/129/159 246/130/159 277/127/159
+f 246/130/160 285/129/160 283/131/160
+f 283/131/160 247/132/160 246/130/160
+f 286/133/161 284/134/161 282/116/161
+f 282/116/161 279/115/161 286/133/161
+f 278/111/162 287/135/162 286/136/162
+f 286/136/162 279/112/162 278/111/162
+f 288/137/163 289/138/163 255/88/163
+f 255/88/163 254/87/163 288/137/163
+f 269/100/164 283/139/164 288/140/164
+f 288/140/164 254/101/164 269/100/164
+f 290/92/165 250/83/165 253/86/165
+f 253/86/165 291/91/165 290/92/165
+f 267/141/166 288/142/166 283/131/166
+f 283/131/166 268/143/166 267/141/166
+f 268/143/160 283/131/160 285/129/160
+f 285/129/160 275/144/160 268/143/160
+f 275/144/167 285/129/167 284/128/167
+f 284/128/167 273/145/167 275/144/167
+f 273/145/168 284/128/168 286/146/168
+f 286/146/168 271/147/168 273/145/168
+f 292/85/126 258/86/126 261/83/126
+f 261/83/126 293/84/126 292/85/126
+f 272/148/149 262/93/149 265/96/149
+f 265/96/149 274/149/149 272/148/149
+f 274/149/128 265/96/128 281/114/128
+f 281/114/128 266/150/128 274/149/128
+f 252/151/54 289/152/54 288/142/54
+f 288/142/54 253/153/54 252/151/54
+f 253/153/54 288/142/54 267/141/54
+f 267/141/54 291/154/54 253/153/54
+f 291/155/51 267/98/51 266/97/51
+f 266/97/51 290/156/51 291/155/51
+f 290/157/123 266/150/123 281/114/123
+f 281/114/123 250/158/123 290/157/123
+f 250/158/121 281/114/121 280/113/121
+f 280/113/121 251/159/121 250/158/121
+f 260/160/121 263/94/121 262/93/121
+f 262/93/121 261/161/121 260/160/121
+f 261/161/121 262/93/121 272/148/121
+f 272/148/121 293/162/121 261/161/121
+f 293/163/169 272/105/169 271/104/169
+f 271/104/169 292/164/169 293/163/169
+f 292/165/54 271/147/54 286/146/54
+f 286/146/54 258/166/54 292/165/54
+f 258/166/54 286/146/54 287/167/54
+f 287/167/54 259/168/54 258/166/54
+f 95/169/51 294/170/51 295/171/51
+f 295/171/51 296/172/51 95/169/51
+f 296/173/94 295/174/94 297/175/94
+f 297/175/94 298/176/94 296/173/94
+f 298/177/58 297/178/58 299/179/58
+f 299/179/58 37/180/58 298/177/58
+f 37/181/170 299/182/170 294/183/170
+f 294/183/170 95/184/170 37/181/170
+f 300/185/51 301/186/51 302/187/51
+f 302/187/51 303/188/51 300/185/51
+f 304/185/100 305/189/100 306/190/100
+f 306/190/100 307/188/100 304/185/100
+f 308/185/58 309/189/58 310/190/58
+f 310/190/58 311/188/58 308/185/58
+f 312/185/93 313/186/93 314/187/93
+f 314/187/93 315/188/93 312/185/93
+f 316/191/171 302/192/171 315/193/171
+f 315/193/171 317/194/171 316/191/171
+f 318/195/172 314/196/172 311/197/172
+f 311/197/172 319/198/172 318/195/172
+f 320/199/173 310/200/173 307/201/173
+f 307/201/173 321/202/173 320/199/173
+f 322/203/174 306/204/174 303/205/174
+f 303/205/174 323/206/174 322/203/174
+f 324/207/54 301/208/54 300/209/54
+f 300/209/54 325/210/54 324/207/54
+f 326/211/8 305/212/8 304/213/8
+f 304/213/8 327/214/8 326/211/8
+f 328/215/77 309/216/77 308/217/77
+f 308/217/77 329/218/77 328/215/77
+f 330/219/77 313/220/77 312/221/77
+f 312/221/77 331/222/77 330/219/77
+f 308/185/58 311/188/58 314/187/58
+f 314/187/58 313/186/58 308/185/58
+f 312/185/93 315/188/93 302/190/93
+f 302/190/93 301/189/93 312/185/93
+f 318/195/175 317/194/175 315/193/175
+f 315/193/175 314/196/175 318/195/175
+f 320/199/176 319/198/176 311/197/176
+f 311/197/176 310/200/176 320/199/176
+f 322/203/177 321/202/177 307/201/177
+f 307/201/177 306/204/177 322/203/177
+f 330/219/54 329/218/54 308/217/54
+f 308/217/54 313/220/54 330/219/54
+f 324/207/31 331/222/31 312/221/31
+f 312/221/31 301/208/31 324/207/31
+f 300/185/51 303/188/51 306/190/51
+f 306/190/51 305/189/51 300/185/51
+f 304/185/94 307/188/94 310/187/94
+f 310/187/94 309/186/94 304/185/94
+f 316/191/178 323/206/178 303/205/178
+f 303/205/178 302/192/178 316/191/178
+f 326/211/77 325/210/77 300/209/77
+f 300/209/77 305/212/77 326/211/77
+f 328/215/77 327/214/77 304/213/77
+f 304/213/77 309/216/77 328/215/77
+f 332/185/51 333/186/51 334/187/51
+f 334/187/51 335/188/51 332/185/51
+f 336/223/94 337/224/94 338/225/94
+f 338/225/94 339/226/94 336/223/94
+f 340/227/58 341/228/58 342/229/58
+f 342/229/58 343/230/58 340/227/58
+f 344/185/93 345/186/93 346/187/93
+f 346/187/93 347/188/93 344/185/93
+f 348/191/171 334/192/171 347/193/171
+f 347/193/171 349/194/171 348/191/171
+f 350/195/172 346/196/172 343/197/172
+f 343/197/172 351/198/172 350/195/172
+f 352/199/173 342/200/173 339/201/173
+f 339/201/173 353/202/173 352/199/173
+f 354/203/174 338/204/174 335/205/174
+f 335/205/174 355/206/174 354/203/174
+f 356/207/54 333/208/54 332/209/54
+f 332/209/54 357/210/54 356/207/54
+f 358/211/8 337/212/8 336/213/8
+f 336/213/8 359/214/8 358/211/8
+f 360/215/54 341/216/54 340/217/54
+f 340/217/54 361/218/54 360/215/54
+f 362/219/77 345/220/77 344/221/77
+f 344/221/77 363/222/77 362/219/77
+f 340/227/58 343/230/58 346/231/58
+f 346/231/58 345/232/58 340/227/58
+f 344/185/93 347/188/93 334/190/93
+f 334/190/93 333/189/93 344/185/93
+f 350/195/175 349/194/175 347/193/175
+f 347/193/175 346/196/175 350/195/175
+f 352/199/176 351/198/176 343/197/176
+f 343/197/176 342/200/176 352/199/176
+f 354/203/177 353/202/177 339/201/177
+f 339/201/177 338/204/177 354/203/177
+f 362/219/54 361/218/54 340/217/54
+f 340/217/54 345/220/54 362/219/54
+f 356/207/31 363/222/31 344/221/31
+f 344/221/31 333/208/31 356/207/31
+f 332/185/51 335/188/51 338/190/51
+f 338/190/51 337/189/51 332/185/51
+f 336/223/94 339/226/94 342/233/94
+f 342/233/94 341/234/94 336/223/94
+f 348/191/178 355/206/178 335/205/178
+f 335/205/178 334/192/178 348/191/178
+f 358/211/77 357/210/77 332/209/77
+f 332/209/77 337/212/77 358/211/77
+f 360/215/54 359/214/54 336/213/54
+f 336/213/54 341/216/54 360/215/54
+f 364/235/179 365/236/179 366/237/179
+f 366/237/179 367/238/179 364/235/179
+f 368/239/180 365/236/180 364/235/180
+f 364/235/180 369/240/180 368/239/180
+f 364/241/181 367/242/181 370/243/181
+f 370/243/181 371/244/181 364/241/181
+f 369/245/182 364/241/182 371/244/182
+f 371/244/182 372/246/182 369/245/182
+f 371/247/183 370/248/183 373/249/183
+f 373/249/183 374/250/183 371/247/183
+f 375/251/184 372/252/184 371/247/184
+f 371/247/184 374/250/184 375/251/184
+f 365/253/185 374/254/185 373/255/185
+f 373/255/185 366/256/185 365/253/185
+f 368/257/186 375/258/186 374/254/186
+f 374/254/186 365/253/186 368/257/186
+f 376/235/187 377/238/187 378/237/187
+f 378/237/187 379/236/187 376/235/187
+f 380/239/188 381/240/188 376/235/188
+f 376/235/188 379/236/188 380/239/188
+f 376/241/189 382/244/189 383/243/189
+f 383/243/189 377/242/189 376/241/189
+f 381/245/190 384/246/190 382/244/190
+f 382/244/190 376/241/190 381/245/190
+f 382/247/191 385/250/191 386/249/191
+f 386/249/191 383/248/191 382/247/191
+f 387/251/192 385/250/192 382/247/192
+f 382/247/192 384/252/192 387/251/192
+f 379/253/193 378/256/193 386/255/193
+f 386/255/193 385/254/193 379/253/193
+f 380/257/194 379/253/194 385/254/194
+f 385/254/194 387/258/194 380/257/194
+f 388/235/187 389/238/187 390/237/187
+f 390/237/187 391/236/187 388/235/187
+f 392/239/188 393/240/188 388/235/188
+f 388/235/188 391/236/188 392/239/188
+f 388/241/189 394/244/189 395/243/189
+f 395/243/189 389/242/189 388/241/189
+f 393/245/195 396/246/195 394/244/195
+f 394/244/195 388/241/195 393/245/195
+f 394/247/191 397/250/191 398/249/191
+f 398/249/191 395/248/191 394/247/191
+f 399/251/196 397/250/196 394/247/196
+f 394/247/196 396/252/196 399/251/196
+f 391/253/193 390/256/193 398/255/193
+f 398/255/193 397/254/193 391/253/193
+f 392/257/197 391/253/197 397/254/197
+f 397/254/197 399/258/197 392/257/197
+f 400/235/198 401/238/198 402/237/198
+f 402/237/198 403/236/198 400/235/198
+f 404/239/199 405/240/199 400/235/199
+f 400/235/199 403/236/199 404/239/199
+f 400/241/200 406/244/200 407/243/200
+f 407/243/200 401/242/200 400/241/200
+f 405/245/201 408/246/201 406/244/201
+f 406/244/201 400/241/201 405/245/201
+f 406/247/202 409/250/202 410/249/202
+f 410/249/202 407/248/202 406/247/202
+f 411/251/203 409/250/203 406/247/203
+f 406/247/203 408/252/203 411/251/203
+f 403/253/185 402/256/185 410/255/185
+f 410/255/185 409/254/185 403/253/185
+f 404/257/204 403/253/204 409/254/204
+f 409/254/204 411/258/204 404/257/204
+f 412/235/205 413/236/205 414/237/205
+f 414/237/205 415/238/205 412/235/205
+f 416/239/206 413/236/206 412/235/206
+f 412/235/206 417/240/206 416/239/206
+f 412/241/207 415/242/207 418/243/207
+f 418/243/207 419/244/207 412/241/207
+f 417/245/208 412/241/208 419/244/208
+f 419/244/208 420/246/208 417/245/208
+f 419/247/209 418/248/209 421/249/209
+f 421/249/209 422/250/209 419/247/209
+f 423/251/210 420/252/210 419/247/210
+f 419/247/210 422/250/210 423/251/210
+f 413/253/193 422/254/193 421/255/193
+f 421/255/193 414/256/193 413/253/193
+f 416/257/211 423/258/211 422/254/211
+f 422/254/211 413/253/211 416/257/211
+f 424/235/205 425/236/205 426/237/205
+f 426/237/205 427/238/205 424/235/205
+f 428/239/206 425/236/206 424/235/206
+f 424/235/206 429/240/206 428/239/206
+f 424/241/207 427/242/207 430/243/207
+f 430/243/207 431/244/207 424/241/207
+f 429/245/212 424/241/212 431/244/212
+f 431/244/212 432/246/212 429/245/212
+f 431/247/209 430/248/209 433/249/209
+f 433/249/209 434/250/209 431/247/209
+f 435/251/213 432/252/213 431/247/213
+f 431/247/213 434/250/213 435/251/213
+f 425/253/193 434/254/193 433/255/193
+f 433/255/193 426/256/193 425/253/193
+f 428/257/214 435/258/214 434/254/214
+f 434/254/214 425/253/214 428/257/214
+f 436/235/198 437/238/198 438/237/198
+f 438/237/198 439/236/198 436/235/198
+f 440/239/199 441/240/199 436/235/199
+f 436/235/199 439/236/199 440/239/199
+f 436/241/200 442/244/200 443/243/200
+f 443/243/200 437/242/200 436/241/200
+f 441/245/215 444/246/215 442/244/215
+f 442/244/215 436/241/215 441/245/215
+f 442/247/202 445/250/202 446/249/202
+f 446/249/202 443/248/202 442/247/202
+f 447/251/216 445/250/216 442/247/216
+f 442/247/216 444/252/216 447/251/216
+f 439/253/185 438/256/185 446/255/185
+f 446/255/185 445/254/185 439/253/185
+f 440/257/217 439/253/217 445/254/217
+f 445/254/217 447/258/217 440/257/217
+f 448/235/179 449/236/179 450/237/179
+f 450/237/179 451/238/179 448/235/179
+f 452/239/180 449/236/180 448/235/180
+f 448/235/180 453/240/180 452/239/180
+f 448/241/181 451/242/181 454/243/181
+f 454/243/181 455/244/181 448/241/181
+f 453/245/218 448/241/218 455/244/218
+f 455/244/218 456/246/218 453/245/218
+f 455/247/183 454/248/183 457/249/183
+f 457/249/183 458/250/183 455/247/183
+f 459/251/219 456/252/219 455/247/219
+f 455/247/219 458/250/219 459/251/219
+f 449/253/185 458/254/185 457/255/185
+f 457/255/185 450/256/185 449/253/185
+f 452/257/220 459/258/220 458/254/220
+f 458/254/220 449/253/220 452/257/220
+f 460/259/221 461/260/222 462/261/223
+f 462/261/223 463/262/224 460/259/221
+f 461/260/222 464/263/225 465/264/225
+f 465/264/225 462/261/223 461/260/222
+f 464/263/225 466/265/226 467/266/226
+f 467/266/226 465/264/225 464/263/225
+f 466/265/226 468/267/227 469/268/227
+f 469/268/227 467/266/226 466/265/226
+f 463/262/224 462/261/223 470/269/228
+f 470/269/228 471/270/229 463/262/224
+f 462/261/223 465/264/225 472/271/225
+f 472/271/225 470/269/228 462/261/223
+f 465/264/225 467/266/226 473/272/226
+f 473/272/226 472/271/225 465/264/225
+f 467/266/226 469/268/227 474/273/227
+f 474/273/227 473/272/226 467/266/226
+f 471/270/229 470/269/228 475/274/230
+f 475/274/230 476/275/231 471/270/229
+f 470/269/228 472/271/225 477/276/225
+f 477/276/225 475/274/230 470/269/228
+f 472/271/225 473/272/226 478/277/226
+f 478/277/226 477/276/225 472/271/225
+f 473/272/226 474/273/227 479/278/227
+f 479/278/227 478/277/226 473/272/226
+f 476/275/231 475/274/230 480/279/232
+f 480/279/232 481/280/233 476/275/231
+f 475/274/230 477/276/225 482/281/225
+f 482/281/225 480/279/232 475/274/230
+f 477/276/225 478/277/226 483/282/226
+f 483/282/226 482/281/225 477/276/225
+f 478/277/226 479/278/227 484/283/227
+f 484/283/227 483/282/226 478/277/226
+f 485/284/234 486/285/234 487/286/234
+f 485/284/235 487/285/235 488/286/235
+f 485/284/236 488/285/236 489/286/236
+f 485/284/237 489/285/237 486/286/237
+f 490/287/238 491/288/238 492/289/238
+f 492/289/238 493/290/238 490/287/238
+f 494/291/58 495/292/58 496/293/58
+f 496/293/58 497/294/58 494/291/58
+f 498/295/93 499/296/93 495/297/93
+f 495/297/93 494/298/93 498/295/93
+f 500/299/153 501/300/153 499/292/153
+f 499/292/153 498/291/153 500/299/153
+f 492/301/93 491/302/93 495/297/93
+f 495/297/93 499/296/93 492/301/93
+f 493/303/153 492/304/153 499/292/153
+f 499/292/153 501/300/153 493/303/153
+f 502/305/239 503/306/239 504/307/239
+f 504/307/239 505/308/239 502/305/239
+f 506/294/153 507/293/153 508/292/153
+f 508/292/153 509/291/153 506/294/153
+f 510/291/129 511/292/129 512/300/129
+f 512/300/129 513/299/129 510/291/129
+f 509/309/93 508/310/93 511/311/93
+f 511/311/93 510/312/93 509/309/93
+f 505/304/129 504/303/129 512/300/129
+f 512/300/129 511/292/129 505/304/129
+f 502/313/93 505/314/93 511/311/93
+f 511/311/93 508/310/93 502/313/93
+f 502/305/240 514/315/77 515/316/77
+f 515/316/77 503/306/240 502/305/240
+f 508/310/93 516/317/241 514/318/241
+f 514/318/241 502/313/93 508/310/93
+f 516/315/242 517/319/242 496/320/242
+f 496/320/242 495/288/242 516/315/242
+f 491/288/243 490/287/243 515/316/77
+f 515/316/77 514/315/77 491/288/243
+f 495/297/170 491/302/170 514/318/241
+f 514/318/241 516/317/241 495/297/170
+f 508/305/244 507/321/244 517/319/244
+f 517/319/244 516/315/244 508/305/244
+f 496/322/170 517/323/170 518/324/170
+f 518/324/170 497/325/170 496/322/170
+f 517/323/93 507/326/93 506/327/93
+f 506/327/93 518/324/93 517/323/93
+# 782 faces
+
+�PNG
+ + + " &
( ""((133;: '#
&$ %+,'(!(/;"8)=7###%&('('&(()%#(&(+(&+++-/0.0..010'%0)&1-,0/030.333568686689955868;86:;;<?@=AB?GH?HHAEEHKNQRYYC$B&F(D)H&H'I)L,G+M0C<U T.P. Z [! S3V8X6Y8R6Q1U8X7[;[;L4#@>=[<"`"b$e(
h&k)l,d<
`>`?h?s+r-y0`?!@?@G@^@MF!C@>UK$^D2\S(n@bAeEfHiCkHiIsAsLxRfF'kL2e[-nS>yV%uU9i`/lb1uj5}q9CCCDGHEIIHFEHGHLIEJKKFOPMNPGPQMQQNWXNYYQNKPNPUQMRSSUVXVXYYVRXWX]YTZ[[]_`^``a]X{[A`_`gb]bcceghfhike`nicjkkmopmpprlgxrlzvr�H�M�U�Z�[ �c�|�d$�x=�_�i�q�g�q�{*�{!�_C�fJ�kQ�}@�nR�uY�|u�{`�|_�}a�w����)��7��"��$��6��A��F��J��{��M��P��j��S��M��WÉ#ɨ2ʬ@ò]˹aпd��h��l��n��q��v��v������ +�'�eQ#F�Q��M<�B�!�R8�U +i�8#&��ɦ�em^9���=h`�"h䗙�/(��ڬ�/۳����7������|N�)ɒ��;�H��SŪ�|>���S�ƶ�-�Chj��FhJЊ6��A�Z��{�BSZ����BC=������Q�s7�ɤ*)j���*Sja��5�Z\a)��j-����6j�+*$�#M��B��d)J����w������8��\�0�_~��t�>�-���D�nq�[8����R����[��O������ �O>�&���Dn�×:��9����#�|�`�/5w:;[;;;�7l +��맀�
�� +;��W���/�C�ņ<f +N݅ +��e]w0 + +���ws�p�K/@��2�Kc���6e�E`*�` +`5� +`0#c)�����&z�+ +�s* +`�j�C@�V�W +�9k�F +�3�5�)���� +Lc�Rv���ڝ�b +�� +w�. +�7') +��b + +��X�A0�2�) +ଵ + +`t-@�p��* +�!����� +�><pB-@��j��c +Ь�I0�u��j:�?��Y�qB��uߏ�K��H�p1 + +��Ĥ��m�GC�t�0i��g�H7� +@�T�Z +�$��W +�8����ykzpɂ;6�* +�\��UO-�� +@{��) +@���P���6!S + + +&� +��� +@ �(�)pv@�]�i, � +@?��NP0��R +������) + - + +�3�-;wZ;���� +�[�8�+ +��t|3�P�k����uP��7õ`��b�T,�ff��R�\.�A����jP]V�z}-DɿY���+�J4�u�� B�`e�ތ�t�a=\�D�փ��D�3���h�T�eof��| +"�P�4Q�ri����V_[�y�w!�{����x `�p9���_�*מ� + �3Y���v� 1P +��ѧ +��)�/?���GpN�/ ����m�P<ɏ�: +0�]�a, +���j��_'P�H��!��E����yT�vu��;a����$�F#|}-��P�bu2@���@�P��r�y��gv�P<7�! +��`�>9/y�i`?��� +@S����= w�v6��9p�:p>���xR}�9���.Az��� +@��_�{� {�]Z:\I��]�!�AG`����L���@�ƌ�b�S��� �b��ʱ��JA�����0S�ÿ�F�l��f��#w�����9�2`�}ƭ8^�?�h���J����AԤ^� +?:��K�d +<~9 +b���`u��B5d3 +��`8�x�? +��2���KG���ʺ����
�r� +@�VSl��� +� ��iO_|���]��#���*?� {@��J d�a�Me쬴 0� +C�\CkK3X�}rE�k�ȦQB��!&���C�X0�=t����v���۩���Mqq:���%�����2�'�?Wa�__�JM5�<$����.�T2s3�Gٞ��ApCbµ$`"�t�`�����B�0^�/�����{^�|�����z#���Բ9)��BÇ��!@_� +V/ +d���\�9�Ȍ&��*ٖЙ����~3|0w9`INc�\��I����NI3 +Xz5���\B��*�l���������.�2�9^F +�Gw@U����l�P�D�;�\eJ0 +ϯ�@�Bp�4������
(�S_� +0�,b{[����3x����֟{g(���Y +�z�&� ��zÇE�,�髁`� �g� +�7<�!�!w)��U�𭎃{�I@�g�U�Mk�+Z +#�~�OO� +x� +��&CR"��ʳ���|�ݷ/2�/mL ;)[9p��� +ࣾz�4Ɠ��� +d�6����CI]�8>����Ujp��p������4#�*J1P���>�0Y{����v?�r�q_��S�j�</�lx��|�'�k~�fL5�Y�g���;����vA���x�s� +��$���?���k���>��-&]�������T}��6k*��W1p�
�9���L�Nm�s�ְ��?d<��2G2�ȮK�ut���ɵ]Ùh ^���Ύ��q�z#��� +���� �.H��� +X��Gi +����Vм@�)�r^� $� +��G���ـ�ܰ�vn�&�r��dW���P7� +`E +xeaao�u +{�cL�eO�ir$c����3��L�*[L��6Ɯ�R�����#��Q�&����DQ&��t'����ڐMs:�-&yB9:yv̞�j�Q�bl��BwD�����E�۸Č+�j/���X^�����̈́�&���6�Y��������4&h-�Ӽ���ţq�Z����J%�P��F��h4� +)X���˗^�x�G?������}k��V9`����G���6��P�R�����W���qp%">�/ +� + ���
�����M��`���hp��Ac3�2À���� +#c +��p�Z
a�OҲ����N@�p=��_[�_� +j([�5C!�0�vL�'���ߦ2pA�)-3�]�>'��! ����b��g��O�|y~�T���)�˥�R�<Y��B�E���u'N���_�kb����qX����$.Uq�g�W.�� +a>�i�$��'�����1�@x�7n0���gz��r�[˾�X +ߑ�_�h� +�'�y{����ɭP�}�M��~�p5��@�P;�A0P�������mD�pc#NVy�_�z����E`�뜃2�}���)��'a���n�R� _ ��YoZ��4���D)\��2XO.^�q�;��| �r�G}��/.>�����R�����`���c"��Xȟ��QB'>��%�����ÀD�V���Մ0 +x�X���&��(��k����קq�3u�ZԈ�p�}o�� +v p����Dڬ���3Z�Oh�e�x�@�&��"K��a*����L��g +��Ր�/�� +�@ +�Ǣ._֩�f�ο��B^'�I��$�B��36�_�E�����������,����� +0p,��? +���ǽѠG +0jw*Ň��L�'w?��� �_�uǕ��W�Lw�.�������dݣܒ�˾z7�F�� +�ȑ~���p�Q�U|=��
0�O��c +���qz�4����U@FC���g���'�*�z=��y� +ʻ���$&�g�Dɍ#�+d��� �Y�A��W��b����Д��Y�����Z&����,����Xsyd��O�77]��Q0Ұ��_��_x7�!� �Y�G
��{
Gf ������O���e�s��r�,����,���6����J�b�ʘF�������D<6U�}�_���r3�lr۰षj� +�O���#���;~�u��;|��z���9T@�c����GY��q�|�(>�M�����f|8+���w�������BqH-����Y��n"�1�x����e��}&@\�M�\ +��n7@��2�&��X +~������h�i:�U誻i�J�
8�~)�+8�b��"��9�Ҟ�K�Oh�gDw� ~k��*ƞI����kmA���э���Gz�M&��ؠ����-�J5L���B p�v +K��������s� 5#¶|�Bc�]�>�v� +hw:(l��:m� Γ����F���S[7A�� +@t&tR��a87��'��8�Zf7�'�I� +y9ss�η��m؇ =��Qn��UIr��g"� +��� +�3l�z`@��"������_�ñ�����Eq���f��o�'�X� +(,noC +�������Q�6���������
�$:���/�>@ގ�$J�8��Q�)��Է�&�f|[�����(�����כ� +��k� +w63�3��o���G#��j�\�s +��"_�f��aX�����π��7{�Q����E����g%��`���S��̠��]t���m�C�܇���=�����8� +㠢�����&]k���N +���ى|N'�B�FB�0����Ĝ}�����`J�X�3^,j�����Ѥ�{�"���F%�]�0�_ȟ,�v���؟�U�Y���+<M�k��O� +�Pn�ߪ� +��tR^�Md�l�
c��i*�;�t�v���ӟ���p|%~.�mŲ +��!6��1 + +�/e��"@� +����T +��Z + �H� + + +� +@F�D0�M���
�S +��zl��h���㫗� + +��;v��� +�������?���^y�Q� + +�PR!@`��� +�:
+#��� ��>��Xϟ���%�+>��?��2��1�`|n�ǁ�S + +�M +�T�`Bd +`a�� +�����:k3 + o` ���q�D�cR��ұc`�PX +���o���D��z)�M��jkE�!Ƣ>���ܥK�?�ٻ2>~�*JŢ� +��\kvAv�d�D(N������@@�^,�a��0��c{���F�G�E + Zl���|�����j�-���uX���>s18F�ޤ5m4���n��b�荬](��{eoO���pyΟ��7,�gnٟ[E�e|`�"V�,�`� +��Y�2�v�<�W^��"|�n�0� +|r$E�|�F �,v��~6��@G�u���� yR�>��h�IBl�6��Õ�7W8�G`=�xx٪S��#l$��~tT��8����8n�
�ō�@g� +`�:�y�8�B�XX���N�ϯ��"�oc2�U+e�ƞPQ$P�?��Fr�wݫ�'0]�J +J�b�,���-F�x^G���J��V + F����O��,#�7����� +�=`��Π.hom^{�쮾�;p�8(!Ёҧ��*���NV�`%�!ޟ?mG�㘇��w��Qy�Ri�.9�G��B~$���88� +��ryr�� +�܅@[�llT���8�Ca�2���. +�_�|��˘ ^x�M�'8y3�~�0Q��g'�r��DVi)�cW�"̩����Sza�X��ZxAxn��+8>��옗9��t�c���r�7,-�''J3嗗^��Dž���ť����/�ˋ��z��Ju����Q�RH�W�}���I�\~yeiqa,�w��r)!�*Ұ%--�e���SqX²N+��j}e}��N"y�E&���y0��sl@�Ȋ +$�͔2탊 �h2�@��4t.[[�
"����+ �W�Y��J:�W=�b�$]��Ӈ�k�BH{C|֗�_Ø�OQٹ~rە�G~��A�l��%k�c_5�����7������u�|s�N��N뼴"����W�|*��Vj�J~�����cv�e_Evʎ !����ܼ�M�(�C�����:O�Xf�88�����̦�ScWX~�R�}}�o�� +`0ˍ��
� +S��
�)Lտb������- +������t0��ioz�q kM�\�
�/� !(�bW|HpF�\�?���4 +W1b��p� +,�� +� �c*�ek�n��j#�?,uy(�GI�k�䎿�+n��-�P��ӵm{@��;`���o2��k���<����,#�hS� O.x$�5��pρ@y���l��|R��b%`���z���k6 +��c��P +#zy&?��ߴK��0Z��gߋ�f�ϼ{�m�웮נ�9��%5r6`��#�����H; + +���0�����A +��z=\qg��2����W��b%`���z����Q�C����Ȍ���OC���ؚ%�L�.� +�� +@E +�X�@���;\?Қ֯��n�����er|��9�Y<_�X�<` +��D#�������7 �7��$���hh|o�)o�����ϸݬF0�*�o�Xm�3{R��a��1,a��L�Fm̎����'��a?e�_q�U��#clc���X�>��D���v̧���!K�j#����Ϋ��^����Z�V +�?Ƭt=�0l&a�l<�Í��T����h�=yY��}� +<�C�Li��eV�����o�|������ϣ��5�[D��yD�+�0��r���o��������!���Gݘ��[��'�&_Ek8�f�l)h +�y�c�M���1`�A0�/�C�ې:w�) +���e��{~ܵ*a+�����)��(\�U`��e|J�@��K�_p�ߝw +^��!����<J��r��7w0'<jެ7������(*4���6D��f��a��ڏ��k�� +��u'R��Nܼ��I�|
�+Ef�y�`G���ž�Ě8����rLW�k��ՑT����I�X�ךw�no�̽�4cd�dc��9����ڣ�u�J�����8R���a�?�3����� ��b� +l�v�0-�d��O(U|�p�ܔ�Fph����C���r�0�@����n8��M7i��V:�0 +|��.����i@nڿ0>Ǘ�@��Q R�c����46YA�/ +Iԍ|��t�z>��I79�v�ä����(Bl>~|��m�)�
�mx��Ŀ>�X^� Y���T�H��G��'P�O��ݯP�g�8�z�-$+��q�V cN�x�~p�=���������#��pGB�|�0�?:xB�DA���^
%��������_w�I�A��>�>��`��?���R������*��u��0��@���X +2�kp�c�������~[�������j��ap�֭���0jŢ�b�h�"�G_J����d5d�!��//%8�ʬ�z���9����9��$���w��p��s2���=Y +��@O�kn�9��
�0|���ZMx'k�������9���#=�����nm,3 ���(<�7�`�2]1;�њ����s���8�g�_� +PB����ǐۓ�M_�25�3 �
���cS�?C�|��X��4@pl�v�`$k0 +Y�ig��+�Ɗ<7���Y�A�!R� +�`l�| +�
Ry\������>F�����D�+�L��4�`� +=$ f��9{�F% +*!� +�F`�l��=;(4����S� +Q7�nP?��}e��bU4w���* ���?;b<�2�6i������E��?v��F0� +��'�kA���x� +��e +O�G_�R�Ńz�%|�\�l�h�'��0%l���+��b\�Ue5�� +`WE�R�&\�D�Qxq��#�'��q���B��|��a��~���^�� +�?�B2%O4z�uU��� +�����l������٥!0�8 +�հ+�(�G�؏9���cp� >(Ŭ��C�k^Z�V� +NJ�C���W��[S�@����`/�0����c���s�">H}�\��)q!-h
� +�<?H
?ؙ�q��u0r�I���@b����� O����o9Hn%��`
�n�qR~�t���R���]��U��D���O�bэ*�4���0DK��p3�|��p&��Dm�2 +r�� +`��ՔR���� +�����'8J�T3���75�ӥH�0 +p�$Jp$��I2��s��`G��S��`=$Nq�5h�2��$�M}i?�ä�?�E��o�KIT� +����0���/�;�m��a! ��{�b#� +�ưv +VQ+^��{�c�y���c$���>O���5&G��I�Q�}��o����~��}�m�� +���Gc +��77I�����ހ�����0�Pz9ᅦ=\' =0tVC�dإ�֚�[i Y��, +�!*���T�̯(��T�,.��_���|+��\�:�zE?���[�:��c��O�E슩E�Z�.z�ޢW^T�2������| �ܨVy�R�0SV|���JG��L�N��D�h5��2"3(����� +��uqм����3�/��BVVn�_^����Ju-�ףG���f��Gk~�T(�q4K �X��*���S���`w�
�!��"��nc�
X@ +@���v +��ق���z#�o`��3Z�:;�V +�TxW���� +����'[/qF`��ύC���Z��_���<X��v/4Q�.��E8�b���`̱�)T�yc��<���m�,�2�&���������)�f�!��2@���K�]��cC
LV���w�/�.�Ш��n:�� +�pi���y�`:_^��;��B��i +� +`F`���;(�����Ā�����SC��=BI���wW�?��D��ޜλO�~0�X�س +
��v��`; + +:��4eb�+�?=ej�6�Ѱ +��:���28�� qv�m4�`#c +f`gow�Gl��&�b��=�����u��ޮ��)*|fv`�U�H��E����m +��X
�����Ko�aO wv���{������֝�$�[[�,�$X��`wa���Y���[;�-
R�#��=��u�z����V��~���E��9D�4�c +���>!GM�LL�yO=��S|ސ����Ԛ���^_�"���4�ZB`��$
;d��}C��s|�aJԻ�\�H<K�gK�m +>�� +��@��#z�P�8<�Ζ@o���M +��w�~J��S� ��p����j]� +�3��^`.V֛)-"_�f��\��V]��^uYn�4Q�<1��ç�r���T�)� +�����˿>9���0��h_*��)4oQ� �.z~9���Fֺ?�g�W��#�Qfv�t�ª� r�)�&��8� +����݇�4Xƒ� +d�)�հ�|9J0MJ5�C����>lt������,EA�Wf�ݻAZ(�Q5H`�Տ���e��}F11~��}r�=�9i��7�v2�u���-�bCH��#�FoDq���Qn�S<8l�h=d$nEɓXFDՒ�u�X]���ʺQYdTv�!�)�u�,(Jh���E{)G�&��pJ +�N +�UɂIp0,y���u� �yi�0�'^}1U?�Ņ�U +]�(�JቫWN�\��}Ff��>:� G�:\��ɸ +GK�^��V_�3�u�9�h�
x݀��K0�|��{uV�����[����M殂�Cj�Ň�㷏ף�1�F�����N��(��4�� :_�%K���>џ��A��d� �������մ�1*!����f+a07Wi�|�D�M�t���E�3����d6�P��H��z6�ᘰ-���7wX�g�Q�߁wG�Jً�B����3�U�l�� +��_ ٧��v���i +�Bs���+y.�-1ʤ��ga����B g���n�~muR��o&`nι;�fZ훎73d -��l.�vM����p�@H"�����~���g*8���Hi�v�߳�P + �%yP�0��-ڧ�_�,�X��Q��&����b�H��y6*@���`��Q�Z��m�ڬ�'��b�Pk?��
PRu;I�C@�x`?- +��oR%�m; ��px�DXh�lȮ�zb K��9�~� +����i��ka w�����@H! ��n�m��8�@��b��y{~f��
��x���r��?J'z1 +����*����e�D�ra�����.�a +�x0b��ܵb-�ހ�7����R���^)6 � +� r߰sA� +�t�8&���*D;��
�A
��� +X�σ���]�Q�Q�Iq��� +�n���)�Fj +|���D�;Ϡ� +`�� �Q߀���ѐ�Y�� 0g#�["�՝<�hǤ�$�ϵ�R,��A��aKD3��4 +��Y��ƍ�j[d��-�Z�X�T�+Up�Z,x��+�9DGK]}��cҏ[�U�'U�a�F��0 + E|P�fϰ%KA��|y�A�ۛ�v]a�x1�Ӈ �E������v��x���ÜX\�:�?m +���/�5���Q��ˆ�� +��~�ɀB��`��!ԇ=7�:FVLn���VE�����Lb�"dV�I�̎�0Z�ޢR� +��
z�(����0�p�q+�k��1NY�7��|rɟ��/\��2Y�7?y�����(�����V�0�~����`ا�/G�׳��=B @o��,�z�(
+�I8xK��,�������o��n�D��? +���8������0�c��X���n���J"6�d���tD�~���UFB!�/"��7�Ԉ�K� L�+�I��� +i�<����1�-v�@n*�S-2(��t�q��?� +�ق �@��{ʨ!NG�K��C�����hH �3� +��B\\� +�I��)jWeeC
�Ư��0�14�,E O-����� +2F,��!��Ey +���2 +_�0�-����"�e�^{M�UK}� 5S[���fh +�
Pz�݄ �-DO���]~B�`%�j +�3T.?ϣiKYd 2��Ӂ����ݹ�9�͏q���p�`5�������Uy;�;�O�����:k��4 +�,���=`<�}7�>5m���6�l�>�E��Gh0K����\��35N��y�_b��n��|��^��_ovr\ +���.����P�����������̇�b��wF�o�����}uP!�b�� � +_w:�G'��m�
� +��mؒ���F��<�����$�mF ���3:����k�*�0 +]���l��a +`�]�! �M�~;�`��30�*��� + +��5�d�8��؟� +`h � +@1�� + +�>_���{ӌ��x Yњ�̰��e�)��f�|ե2��pۓU{�N��X��&��ry��wHUKa=X���!���'�G����x��-{����2`�+��pF8 + 0 +�p�8U�̔�/����������-�c��|�T'���b�~]�*8 +�ެ�8����px�߰�;��E{��/�'p?��*�!(�`ki�M�A�����v�Uj!��2��j��w�V��j9i���� +�� +�TR���\L�)g��Ι��"��f��>�pK�w�Yßi6U�\�#���ST�W\��ĸ?=Ug����u�j�p�Ja �bc\"F��"���#p^���.�vA�W^jon����D����>)��� +i�����66�ƺ}��dLd���&�E2|��lm�m��8�] �(*�����v���X�* +�O����L1�(������^������Ǘ�G|]V�*l�����a8�X��gX +�3X'Pp���Gz'X�Ag�M��=�ڔ�_�9%Í�0�̂��|ܸq�� +�@�O��┞2�g +E�/%Q +�����&�Z��w��f�,�S��_��(PG� +(J�ȹޕ+EW�_�J�M
�rɋ�'���s����uH����3W������v� +�df� +�"@ +�q�>� +�h+�K� +���Hv +��m� +���[���./-���<C�o��:��7�v�X��2 +@f +�� +�� +`3���� +'�����SG��ٹ8Ko����) +��T�Z�[��R���;O��ϻ(�����s��~��p�DP��}�bm�\-��`���r�?���]1�.���@*��gG�u��)�c���L� +���W�-�qJ���V��p�F%�Sy���%�X�FX���U��#�<��
o#�@+��?�Ԙw'���Yh�!4��n��;���;B7嶂��*���� +hG��;;]�ر}�O9^1苖)$ +3�hX�8y�H���*����� + +�[����,s%I6L4οy + +�Ԗ��Q `�����[i��E���`��R��2EL!�bgLp�`=�w�P̵�Rަ��mc�9����6��
.����A��
0�S��]-!��F�� +��
-`8n���f�������̈́히 +��f�NLL�g������><43P� �3����H�̷����ՙ@ +��1��34(�6���jbt�b"1����%�M�|������k� +���ry-7��<�j���k��a�W}6R�Q ǗUMB�Ps�Tn��Q�FZ^^.�˚a��Z��e��ݻ�p�j�Do�ڑ��>˵����p&�o��% +��� +`���Up�SМR +@0Q +z^���������*���+M����/�1z�y�B��f'>�0� +`mU +���7��#\�Wá�������0�K�UZ�H� ��q�L��bR�}������� I��>��p&Hg�Ў�����gi��ẩ����#��o�v|7yu�+��7t�dF�#6� G5��Wl�5�v��cK��:g���ط��t�?��$���p�|�d_�����q�u�,��92�6�ϭ�4�Hӄ�q�s֥��g�l5潨�]��� +��( +(u5���m������F�Ѐ�����+�z�y����}��!������8���*�����)�
{hȰ�Z�r���<UQ��?"��>���r�� &�5���Q�(q�I�~3}:���Q��V��TP5��8ҰB9�\iͩ���ޯ@|a��x���� +*�p����7�\�"*�ԑ.,��/`O���$S��"��9�~�[�x�%x[y���/[¶YS���������8J��K�V+r�WZ$��hn�+L>���80p��j�?���e1����c[�,�n<���" +��������$�����sa�E�)��4&��tg�O��n;�6Dԣ�Pm;�&$ki�.�O~�FnK�`��Nq{OR<U�v���Xꮩ�{Gn���'nE����k�3eQR;*S$g��O�/��"
H{�N�q���9��ئT�# +���n+���wE +����:������~g�: �q���z��W��t10@�0�0�C�����:{-Nm +@ ��t�
��-<��� ��(PR�o����m`!��(�b +�z�S�6��R +�h4��qI[į�0K�t��E��MD��`�;X� +n� +�"QaaYU�25 �����cuv��3�['�/����?� +�v +O
�py�-O�˜u���Y�@M!I-�67&�������n�T�w� +�$_���@�����ߔ�^�Ѱ��&���+ڈ���r��Ml[r�z����$�U�?W��'��Ͻ�'v���6��?�P�J��Ee�Ue��d9���[�-o)���������"�_T +B����f� +��pH��� +'q�l�S��"���Gc{{��Q�mK��L^x���Wtڕ;+����Ԗ�l���[��nwG��C� +�/{)��a� +��Q�D��Jjdk<�8[N�5Dy$�y�m �%��$�
����" +�$pM�,G�7�u�k]� +�@:�L�K����^���c<����Z(��4�����WZ�SR����4:�y|�$yA[�ω)�9�[�a���'f����\��P:1�QG��������e5^�80�鏡�?�y�����������d-��3h� ����# +�4��O�be����ή���ann�����|sE�;�������q�øА���MDA8�� E�_�h\��0��&�Xb�lj>H��9�5#K�wH�`���m�2묩=
���T`���I�g���g;�s���2�;Y�� +�F�g�P�F3��o�R + +@C�*�/0�E��d�|L'QѼ�f�n� +��\�ШC(W8�b�ݾS +`ů��Їl]b���oX��k<d�����f�#�V믛�ګ��PKek��ˋj��� I�q�c��QZ�k8���U�Ϛ�uV��k��,� +�H��'-X���-��%��B�)6��G���&���kc�W�M;�s��O! +Qͣ�!:hk�����eo��J�Y��x�yS�z�������k�������Z���uK�� ђ�5NG� +��c +��f�+8��|������S
"`�aN��!�{�����d�at�/�~�N�U��a��7�>�t]��k�jX��kw�{�_f� �,����U`TV?o{�eA.�`U��K�9�9~��K��/7����;�\Lb +_P�~KѠ_� +�0t]h0��(]�j���҆~[�V�YH���L��p-�y���k�h��@J�<���M�P�ע��8�<������b��ן�}��}N[�8}��b�|�˂���Br_��4�vl)g�.�ju9J +�yV%�����X\FN +7#��$v|!�i(�uo�W/V��f�y%R�'u/�eõ4ZW�$(�M�iT�����1����i&bS +G�g�� +�a� +��V]d���[���P�.���p�rd_��)���yj�ߵ�卅���<�� +�O��+�f� +�H�m�מ +[�b +� �*�Y�P�'���2s� +xs�Zz�Q +@Հ +ڨ�p��
���~���( +����������zF�v���%�@މ����h[>��I��=zt!�@�H�~6b�L m;>���������moxK����;���Ȯ� +��KrKsL��-tUD��R������+�fXN�����_���rd��5�H:� +��y +x�X@Ϧ�3�@f� + +�d;e��G]�>.�i`���f_ +˪d�\n2�y7U�ص���~�Zh��Z֟�6R��՟��[����lV5�D�7�T�s�����}���嗛��?���U�a5|���a�aX]{���!� ����f3��Z�
�x���7�Z}�"�Vg?(��I@�n�zJF��%.UՉ�n�����qު�#t�f��Z���>Y�����oJ* +�)s-�Ѳ�Kt�����\9^s�+ҋ- +e����l�+������6,U�~����2W��ke�)Ӡ�����w�X��]u��(H +s��.D�j��� +�ke?���b�����H +����� +�����9���4D��k���).�m�M"�:�<u��m��aTE��S�0���k�x +�-D +v�-��eS +�� +@ +D���R8Z���<��V+w�zq|��o�%2�
(���2�wL����iƚ����d�6�?�y��y=ۨ�,o���䤋�A���%M����-�����nè����̟����e7�� +n��� �*���ek>m�vG�á +`�$���8C + ���k�~.�� +��m`*����j�b +��r�Q�Zw�P���k�L �J���xu�-W��@:O�%ʉ?��\�L�O� +%����?��Ꟁ�8Z�}�9Bh�T>8�Fz�h!�7X(ܘ��>�0) +�Q�wS�� +�c��8ۭ��z��q~� x��]�\n�B�U*��Rg�+� +@�����ilԠ(@� +����5�$�����ٜ�ܭ՞*���TE +�TZ-�����������±YA�OE�]�}�]�\\/�6 �?�Y��%0�L��?��74L��@�E^��Z7c���_�S������\��6����l�����|��=p�R�@�}����:y����E +�]"����Vc}��1㭕VCՐ~�e��z�)`�9����k�i�� +8�b_�(�c�����yלv{�ގ���)n�5`;T���WHB� +vE�� +�J_��u��N^��^$�UWC���76�1�?�ٶ�}��[P�_��T���!H���['��/5.HFs���,�}�c%��o��Dq_�E��BA�@�bɆ�.���l��fV���60� �Q[^���m���A��hJh�� \��m5Vv�]) +E�(� ��+ ����~jpT� �WV�sƒ��Ś6". +Y��T'�&� +j8Z��8y�&>|��aGC�xo�ԝA��Y�tXR��I+��F��)���� + �P���?FV�J����(���
J�6P�<�u���;��Y���
���f���%����*��JKk�Гף�q�u���F�$ۭ��(5��6�-ﶗ������iH0J�wT20�E +
�0$j��&��6���U�~�kw�n ��'Q���BkH�O���G�~�������G����Bܥ6�*�H���L�WfO4�'�g�� K�c�1'���q��f'�X���?$�q-U�������' �b�sL��j�5%�&<��0���LH�-ygӓ�8��V +옹��e��P*�25�٦���c��h��~P.���6��6�I��9B����4�<wgq�� +m���a�Ks�Y�^[�F���M�9����w�tcRҿG, +s?�����&�B���z�=�o�Hړ�Y��%�i��З+�����ݲ&��m���C���ȋ��̐���y�2'�~Y�i����f4\�Z�%㮮z,-k:6��j�������g��J��6���j +� +��)��ߣ��S����{�V
(�V=_�q�?�:X���|���444�.�c%����n1�����ʊ������&4|ʭˑ���q�S�a�Iǩ�P�|�������f�$*�7Y��ze� �
I)��GX(��9,�����%�$q + +�,+�"�Ճ�ꎕ��ʪj�ȷ�٨��`S6q����p7���z>�� +C���U�M�����ш�⺪����<m�(M��. +PE �yK��ʎ�T��Q� +'�)��ٵ�����u�qT?�]�3w�ۖ�0� ��U�� +qM"�����l�+��YS�WO��F�hJ��U(t?�u���Dؗ�,D�lS���ߨŠ]�����
��������ӓ�nD�
��KX������������D��w��CM~���)kps���Guk>�W�Ź�h]���-{� +�d�K��%��� @���+Q���v�J7�0��m �-�j�� + ��~�D��X��h�ݧm� ��N-��S躷��t�;��S�a-z�h����*L����A'�N�=й%�U�+��}���a�1P +Yх�z�V��b�[E6��6HL�/�@>�_&;x�y�� Ye�{UN|X:��B3�?����hP�M�o���$/��e���.�[/�IJ�2o�X8�Y�f����DI�C��Ѣ���XzJ +�ؑ_n��Q3�W���㹈 +��Ւځ*S�k@ ��Q� ���ov�M��������7��U�U@��4N��֔_'3ˤ +��}O\T��c +�Z� +�@��Z�w�ZA + H�5u������R_7g> +G�74���|�� +r�-�EQ+@�)�I�u�{|�ž�����,]�o�mx�� +�-V[���&���_U�y��x�~r9" +�i�~�E6!�< +��*,h�{Q��� �U +��S�?ٹ�؎��%CX�S�.��e���F"�+rӂ�hW`_ujJ*�k,Y�22�����{�/U +��_�C�\ +8U�jP��\ۙAJ��V��0�}e�Hf¨�j�lO�,���twm�`��������V�g�Y���`�;.�gWaD��DQyIϒ���y�hxН\�L��K9:o��o���,R�Tm�:2Lb�8ar��?���%��1���,Q�^�W��cA6)K�j_e&E�gK*����^e������z�F,�����ƼiV�,;z�Z�U����ICٜ���4.�|�j�����k���MY��e-⽥a��Hl]��|/�t2ֆ� +VJl��T�~��m�\K3�m� +��lV~��Z����#P���}�O +�H�r����o +���/-��9�,�Z�@M$�\�嶹Z�i?o���,p��ٙ��";�E�Z�]e���oO��?�?��^��Z��6�e�6��V˼{|��Iit�UUCj��;������"v�^�Ӥ3��s�W�<5�N�Ԉ���ε��� ˇիb +�y�7p����2�~��e��.���F�%���eeL�]]��c��O�_���]��}56�rή2��蟃����P����@��9�js(�E�N�~*��&�kj���5��:���a<J+"�}G � �N��58�c\V۲t������i�u)�S����R +�-{p��j��KE�a���z���k���/� ��s<�H�b��8H^��C +�RK��65�%X�De�B�*�������ey^�ͨa?�c��]^�R�{fKjU6��/�7fo��r�����m�$�M-E�8��h+�)���� +�!;c�3!��Dl�M�I��ɨ�Cϯn�����g� +����t1���Q�5k���;M���ӊw3 +qd�+��._ar��B��Ì8�6ߺ���H +bdb��j�Ɀ�����MN��\euunq'o����xtz����-�j�4 +uw@w��:�5l]�+b +�9!�h;a)����k�������a�;) +��$ub-_�c��k�%��⍀�R;��G8p��b)���Z{��/�P���:5����z��=6$���n�6 +`fV5K�j/`1��L�z:��)�����[������kn�m8<qrk� +��W�Nh:��(�k��h�Y�-���mW���Ҩ�c~D�L·*����H�@+���[���eQ�]��Y +��kq�~ۭ#
��R𢡞N驞-&��O^�dK} m�, ��:���-Zr�ޭU�U��TE��!N�� G��d�[?��wF����������h���P3��� �S�P�0SD�P����-T�Hb Nda�cFe�[��W��I�����8?[ �ϙF���k��O4��en9�� +PYX"�o*;@��$��W���|�_����������E��G��Taƥ�ƚ�w"��br��jR��e:%yh=��Z��l?���k����c�����nٞ��-�����[�x��f_ +?m��.EIC�HV5�%_,y�j�ch���Y-�~�s�9��s�'3?1���ݼ9?_�X_���o��!�h,/�J{��`����a�1⠝6"��|��l�-@ݥ۳n圹a�/S���'�e&���m���[�Vl�0��?# +�A��22BR�8���S��A.���DF��B-�I��_� +��zV���Ɔ�B�UϏ�f��m(i��t+Jk�������gq�i�*�?��*��7p]�����)���\� +�K�N�{�kK�xZ�h������y�� + +�ԭ +p���F��Fͽ�{ +�h�O�-s�'���?�r�+��'O���0VY� +�88T���.��}����^< +Ա���� +`�B �s���u��^�� +�9�� +��K ����u���±�%\�`}��P���﵂���H5��ľyS������&����m���0.W��j���8��cJ�,��@�E�A�*�a9��(m +>'/�}.Ld��Hn� T�pSt���$��@%�LLj�*��( +�hY +:�#C����M��\�Ҫ�q���d5�Ѧ@��W����;�4U�9���v7npY�(Q��A��`�X]@^�SԷT�Væة�F�ܸ�S5��s�cy���W��t�#ݮ��({hZ~�� +hZ����S; +4,�=����r�( +���{fn?��Z������w�����W�r�@[n�ϩ��V,O��r[�4����75��4�����������J��h��Z���s{��J���X1@@> t +���2~�Q�� +�J/ fq���I��$��%�>���� A'��)�=[�O}?Y�P�/rKΔ|� 2ы�# +���oz']����$����?������f�����3��Ͼ}�?�����������>�O�v���P�H.�����|0�3��`"ʇ��w�?PS-,��W���y�s��(�pA�Mیk#| +�q� +�b���z���I�b��ᦢ�
a�mU?�Pޯ��7�z��_���� �����������]I���0fN�dw����9��������8�*I�T����AS��ݤ�Ѱٌ�q��+����sL�ؤ��{�\�@gc +������9`'M�u��Ђ]+�{�
�����c�5�8q��t�df�}�ǭ1A4�N����q�O��n�-eU��`� +���=piCM3�7� JA�ig����6���^a9�����A_�:KX����D���q��_'�l�m�=���=ٔ���d9}a.�0�T¸3�������qz�����5���1�w� 8[`vټ���.ۺ��ď�`f�@�&7N����I��ŭ��5�1����+;�w�]<Up��������<�ԋ�� +���ސ��H�c����8�:fS(`qqV�J4�3h@ ���F���� +�ٸ�ʐ��ҭ���%��
�I�/몽��C���P՛9K +'�]���]�����
v��>�*�Ln�C���!Y%�� NlIz5�7[�+T빢 +�P�# +`S�[��rܟڪU�9�O�fʿ� +}]�@"�\ + +����������@PZ�` +@�q�?��1�l������D��喣�����՛�G�[0b+R/t�3��]9��G��k��U}ʬ.�7��G[����Χ��4���*���01}�՞�M�%ڊ��m��s�� +psu��Kn�%�q�L�yi��8��5�`�+����֫����ʤ��z�\��6�\��/��@� +p�������@ + +D�dMd��O>9k�!�
����y�7Ga``��I� + +@���52�P�ˉ�S= +HC�n� +vi ��W
ܠY|y۠�MI߳@�f + + +@D5�y� �F���P8�� + +���. +`��6�x# +@e?��ފެ?ђ�s� +s���M�+B�3���Hϕ� ���������9�,∻�������$' +�� +���\-�����@���� +@.��z��G'1 + +����( +��vaYs/����ߤ p��6��R�j�npQ@ۅ��f'��� +���# +� +�b��WЌ����f��ܝw��y��O@�okJ_`_���
W�v�>�m�����p���N +`��MV��H�w����R\PO�E5�s����/H�G��:$٦���@���x!6/�F)�@�)M��9{r�� + + +�KŶ��_��U����[�� +� +�����N[�̍ӣ�"[Z�ގ<��g�,s��4����'-a��t@����Qy�?��� +��
ߤD8� +�a�;W��>j}��p��v)ε��.��e�4��.�$\lT�fA<�Xʅs�y���owU�������K����ʲKZ�Q +��\_����Q �+���N}�/�����H`���O}��=V_ +U�-H3�i�n!�D�g� +�n�јq +�� +@1���i� +�������$�b +@� ̛��엍��]v:=G + F��0|�X��7c +~&(�'�6H�lfg�^�d��@�j��Ir��BD�P��7��4�\��Ϝ +�*�Mz�F0��� +*�e�<���" +@C��%s�����Q^�O�6��]_Lb +שּׁ��0��r_T����:E��G��\�}�Po "t\�.��E�� +�V�i?���\��B���@��
}w���\�r +�0K>��}��r����cm�K�֓���"�\�^�5�-�lJ�U�fy����tV��2�[�08L��O���� +;�˅�i�0�!��s� +�]�3qU�'0 �*Š�&7$*��Q=F薂 1~��'u8\�
�즿��@M��s�� �0�vB�4�ܜL�^J��R:�|�:`��'<0�NJ$M?v��;�PS=����khį�����}X��||�s��lS���F>Up^Ȼo���TSu�ÿ�3��I"�J�������R +\M�h����B�����4����v �� +�Su66�Jޭ����J=V��QQ�*�� ��``�W��q0�������\L�<f���'8�i��bm.�����v���YӍo����|SԂk�#0{��k���LĂ�\��{
�\��Kb�8M�a����hk�����`�� �Ɇ�f
+����`~���p&�l +`��f��W +��F +�]����=�8�_e0 +��HR+�c�����Y3��@�p[�W� +R�kw�~���j�_�˓������!k����Y�����!gY][
l���NP�9>/���ʓ�ɭ��Y����CН�>jm˳�<��Y��ݷ=|[���|��`��v��\儚�U6#�� +p�ߕ� +@�b +��Yﮋ�x� +����i�ӣ�F�ɍ�^�ٞ* +�(�h��L��&��"_��9%i>�خ���W���(�3.=7��'�����\�_�������}�R>g��%��4����o���q����$���r���3�[��<�W�.X��&�(,�����gf����Ǡ�!�@7��h�1��J�5��*�Ye~B~��d����!��Ç\�S��8G_XrP;��L&��A�ֿ���C��i� ܭ�����i� 9ld��������ݗ~AM~�3� +P��{\*�+��P����1 +��#���� )�(S�%5Wp��h�9���#����q^ +r����P�-�.j���ҚT#�C}��2Kashq�$����I���MÍ
x>�JW�1`���i��� +��\��~�X
d)(�&�t�vU��T���iHo�Z��o���/��3pA@� +������8�%%��ᛳ�� e�;���� h�I�{�mʓU�����_��z�J/V�Ӏ����ǫIdɄ�Ϙ���T��S!a�ZO�$oS� +@��>N�3#�^ge�^����~o�U +�@~�;� + +��(�L +@D��j�.H`R��Q)���b +:Pd�\�ʎ
D��i +�̸�(��@'W>��A9�ļa�ej�+]��u ��������G��8*�֯ݫ +즽�J��
zӓ��` +�vwz9��S���;p度=��-q��i +@# +� +ȓq�V]<�����q��!v��$���T����\��m��� +�$�~���������M]�^��V� +��u-?�ٖb +���z� ��ur�V�^�|���P��LC� ����X*��10��_o�^BQ�-<�WV�;[*�.�ۡ\#�KM*؝� +���8
������k(��5�{�C%@��M�^�Ϩr��.;�*h��) +��T;Q_! +zok݈-�q����2c +#��T# +���[j�VEBa�B�Y.͕ +/о>;[C�+M�wd�]�V.5���9O'+�`�@Mr�<��a8�i6������1*�|��p��P��z�sS����Ƿ�b;���ɓ'�5��Vw�O��[ENVCntmu!Rs?��jU�#�J�/QX�o���ٞ#ƀ�5���3*�ΑI���\/�
+p*@?4X0 +��7��Cp���M�7T��</-&��A����V9�P��2���b`��6փ���=/��M�E]>Ot]� +l�
h�fK7�6 +�]ϸ�7�Յ����+>�bI���A�<��@��M�Ϯ�#��'�� ��?=�]<���B'������y| + +Y��`9^v�����.��=@�����?��S`����uDjAA@����S�sX�Qu�W�P�ȉ +`6�u�jE�֘�%Za#�i��$FI�B/���'yK���X�D��"3<KƘh�]H� ����ׯ{_�$�K��'�Z����W�z�I���������?{""����~(��@蜇+ �*��$d�a�����r*P +�b� �7�M�[��4hy���̋�+�%���9�����e��^K�����]Ƴ�Y��]�
*':b�*ʅ +�XQ�TMk)��YS�ڜ.��������ō�8��1���n�)�����*
��0�2��5��:��� +v��ԃ�6a +�R�a�{��xq�D,eQ�7�$�� +@�:�'���o���_Z���{� +P��+�|?�Y�/�W�~�?�� +���' +�&W�o� m���6ɨg]���B��UK�
s��MU��aW%O"
����^QQ��� �{` �*�Dž�9/�� +x��:/�ɰ�P��\�$b�vh���e�W +�k�V���qc( +�
��Z��T?=�N��0 ��w*A�^[L�ND�@�D{�c����68b����%~�����W�(�]}��3m?��?�^���a +�}w��_eaJ�i +��4�0 o[�^��*})P+���� !4��-���Sb�n +@6����R + +D�����6�w���Yn�Y/:�{ێ�������_'�������؋f���� jM2oO��Uw�?H�h�
m����M�I�-�;%�M��d��|?ܵ�6#(� +@�fǏ� �s�q�.�*�_Y��U�[z�A�Vm�RޔT�Ւ�EY���GG����=,2�믕n}
ba�W�ďQ(�ǿx"F,� +�q��Y#P��4�Rb�o}��~3;���p� +��S(sb +�0�o;}wg +^n<���V�p��\x�u'*�-�j.�t��w7��#�Ç�i��! +@�VJ��z��L)�T�B�1y���T��o�����P3!�@ +��x����|����N?O�*�mP��^�!>�+κ^t�`����f��@��t��,'��#y��k&)aP?;� �5d�k���H�$��( +��n6�� L
� +>�ƩU�
mN�Ox�Ј�x��Cx�� WRA��[�'�Z`Q��) +�#f�b +�����������W�e�i~��_ +�zA����������P��'?�~�$:DZ`[�]�
�8R +����J���k�'O��|��� kȅ�m���.��������G�C�t�c +��ۊ�F�(�_m�����5��Y*3��v%0|����}C�L#et�śI� ˶Z2�I�bU�@�0�?�4�� +aD�5�N���q�&I���DwD��+A���_0c��4���٠.yO���L��� +/���c�YRm�^���k��[O�-� +�C >�w��y �\��L��r�WiZT]��F�K˙]�G3q���bQ:8K�s���!�N.��DK�������H+-S*]R^Z�⊋�t�Z,G?=�W�1j�"K�o+)��h
�$�a�p��]���8�Cs�ky�i> +k$����ޫ�Gwܐm��V�� p-�Wj���v^4�5����Rͪ�/S���6��N�¨����C$�(rf��}-X���i��5��V()����d,)�^h�~� +��QpN@3|Y`��Q1hJP��z5�t�����q�$��gU��9�8���8c:yk���-۲*˯�C�n
4@����+Vh�NP_ +�b�4a + +`msss/�S� +�� +�F+��P +�0�� +W?s +���אg�@
� V���ʡQ|qt;��!��
�N��}�r��ŊF\�]�cз�+��$9���!� +(߱�`��C`*@�y�Ra�V�t^\T��P8S�/}�Du�viu�>^�"͏���/W�4�&��I�u@]Nq�A j�8�D +�4( +��{��ĝ8�2���`)����
�ڲa�{�ҕC����,�Õ4�bN���P�M{ؤ�����+�V�<x�ƳM�r��L�����r}���@^v�z�ɏ�$��op��g=�ԥP�#�5�c��X=mJ` +�� +�`Yk���#Aa���i�5`�m���~fC��sm'�v�4��q + [\X(�s����T�t�A})F�)�x���҈>-���� +a0��ln�a�2L�͂ +lھ� �o3U��k}i��h +�w���J��vW�V +�yyX@�>�����m�0(����1 +- +� ���>�ϔ*�3��ȑ�Ǐ��-T���3 + +@�bs#��t�tzr
� +�
�5�Y0i +@bտ���%'�;��ݷ 8�w�Cٿ�j����ϲ�B��0" �l���5ҿ���D� �DZ�*C�o{�A 1�8 { +�o�!4��ɾKS]R�t��艴�� +@�R�gǡ]"b�
��� �/�?l 8��� +�C\�V�����b�M��j,ʞ$�D��ZC0
�=��#��Jz�:'��Z��P��%? +�^i0�ʒ����� +�oh�ԓ`
��t���`t>č{?�~�V{�y�dŠ�ㅦ@DgH�I� ��
m~���8�?� +&��2�D�K��9SY&�zV ��~?>���� �g���,��B��.�&�n��g�Q�,��^?�2F�������r*@���=�I'��ˬm& +D���"Z����H���)��m�w��5s�X[T�9wUG��*�u�D��i�*�Ґ搱^��ĵ�o:3�Q����l/ J�����~�����a���ݻi�����A~�];M������t +�J�8��t?_�1���&��֭�60�h����3�8F;�+'�-Z�@h�gr֤آjXն�A.�(HQvՊ���E$)�'��\vÄf����NFO>�J�lLv߫ +Bx���������h��k��@���T�_�Հ�`
"1RQ���_��p�'�_X1 p�6������5��݁d������e[b�i��=������a��Y�-ف"u�%\v(S���v~M����f� +̈́yj_��dג���\�D�GwxAaa�i�, �¹8�J��n���K��}�V��j��w�ds�m���/�M���2 +�R���* +�A(������7k�ͥ�xu��Oe����c�C�tq��\�j�7�(���m^�1���0���m������g��g�0���]A\i7��<88:ҝ�m'�~�{Y�,�M�����;:�_?��1�s�ͨ6YI�������gq�}��U�V& +��|�8����/ +p������/;��]�~7�
�}��'ށơ}����h1g�O��W�l����B +R����*����UIO܉v +�* +@��f�P2�*�[_K�h�ց��X��~6b�<��@=����*
����86va:�� +�(/����ŋ���/I0=C�M4�nJ'��A,�/�(餺a{�s�o#h-*P��_�&�4�� +�f��M�W�v�ֹ�U�މѸ�-/M�T�թݤnD +���!Z �~��P���[T�] + +��6{=�`k�B$��������=(UL��.��0�\#� +�p2:0då�dǟ?9��_� +�1��*p�D +��9�����yB� +HK�,���'_Q�Xk
��XhN����r�4e���)��� +@L�2�F+�n�#�� �������
��~������� ��/���Rؖ�g�a�R��`��]}�3�\. +�����U +��w�B�Ec���!�/�GŠh� +y�����"�0�'����jO�Bd�\P +�8�P + +u�C �t�5�TUB�z� +�j��"�k0��\��҅R�^��_����t+�� +�����k�� +u��^�IY_�b4�@�s��8
`+���X) +�眈����4�;����k?|, kW� +����Z�o4�a*_V��$KNQDQf��_��aw�� + +t*U�ZT���x�$Xoc +�O +`�l�m���=�"�q�ѽ|�}�8�l��_���g�������
+� �:" g_P� +��g +@p� + +���-�á:8) + +��>( +��`�1 +���!8G�` +܂�:+�9J4�a�>�3 + + +@�5p�` +f��)��C*�.�f�����4ܢ����1���8���yM�0d*_��F� +@��d +`M9��U�.[[-��c��{�p���I>�k��e�f+�;�J{[�N���Ae�#���w���l���^3w�IGhp}_��5���U�pwբ�B�8K�v�5��ݨ�b�����S�+U[R�>{���ciiyU����z3R�[.�A�����p$h�� + +���h��1 +Rz�K�iMqP +��{� &iJA�r�uo8w�_�ys5ވ6���Mw��`
�j0�����Y.����ud�i�?�8(�����1)����%{�>B���L�� +��U��W9-��1���n��3�'d3hl����:7a}m�ڜ�L#�VhOπzB�����۷���t�2�`�2��-�M?��Y����b +��ku��q�nE��-�
�k�CtU��CG��e�"( +m~M�L�� + ��'
`�_� +�Hb� + +�Y0 +@��A� +��Z��) s�J�` +:�r�K��T RMg�\J�V��J�~��vု9\t[լC�B�s��3�T"�O�6LkX]@} @Sa�<��bA�3���� +|���Wr�H��/0ۯ|+�B�i +�<��i�?\��y��J��������{��Ry��ǃ��@�{{���������m�mi�ӊ����][�,������8�:k�>0 +��+AM;�8��j�T���Z[��^���u2���=���Q
�*oWj�Wtg�3@x�'����$*;����h\"=���K��S
��e�QQ��X�XN:e�-���I�tA��&R5��d�9��4��>��sY� �u���K�C`9!��sNc +�l�t>-�c�r(ĖG +Z����sDžP؟�K۹�q�N"z��u�` +i3/� t��Y�rYx��-�
���@����M8`�Nc +@"2n� �Z�j����[�B�@�<�x
(�C��z��e�9������.�0;?��@�;|դ +1�f��l뵳V��'��}r��+ +���g� +��� +��%jX_J�c`�.���=��
�QF���g�ţ���0��9���M�+n ����( +@z�ʀD��c +���i��Gj$�\O?s`�� +�� +��$��@��`�) +�
1 +\��M:�Q�O�=Ý�2�@�+�?�X�ww����_`�� +����/��]�n퀌X�����������ï�� +�v���P��J��?n�z��.Mڇ*a�錥h�$�kX�f�/�%��������2�+&+��ʎE1���?��|�ȁ�ԁaW��Ԏ*�S��e�/��l���!���ِ�8�>��������^�xA���\ +��1V �f�#@ +�3��\47U2�:�@jA�@uW� +�Qd ���R +O*��Ot~D�(�BR�&6'���A,�F4*F")9?,`lb(�R��4N�������"2:�����ט����$�����ُ��ܖ��9K3HWajXn�B���ʖ��X�Ԥ�5i���ǣ±����)���ڬ��X��! +`3��X�Gp�倃�gu+�cZ[��@���;��l*$n��� +�-)�%��S8c.��i�H +@���ۖ�[�P��:�Kv��� �_0�1 +�b +�n1 + +k&ʓ\��>���+ܗZ���3��L}��&�Jib&X�j��*��'"mlB��Th��{u��շ��A:�$Bu��d����F��x�I�Լv L�����x!,��B��,Nۇ)��������z�=�'�^h&T��oY/7\�U�"Wy���N�lɭ_�P�T������i����+�� +08����)��ws@ +��M�P��t���� +�`�,���:h�C7��ʔus��`�ʄ8j�4�H����a��
�#җR���TM��H�H��O��>�}*
Q��'��F�o�O�Z�ge!BC����g&��#U ���"�m��g���(
��(�����%�(��O}��2��H�����x��[�±�h-��1 +@��e +�F$��dX���(�����w~�Ae�yC{!6�R]�c���%�}�R0��MI9(��ơ�!��QL��LH#��>8H1�$<J�l&{{���_}�H��Z�%���[��a/�ȠIҿ�^|)�G�Pxd�f����-\�0�S�o_� +�ΨJǰ��g� + �]+���N}@���b +�q +� +"5�����y�d���� +������M�0̴!iK�̟�0�e�i�Lբ+��ؘ�ʀ +��Q9M�R����: �/��Sf����$L��$6_�< +��t.x�F��q��/�SI�rb��C�=�o��7�{E�rN��+p��:�e�!k�x +/D�S3�߾6�tE��c���%$���V��fu�U�2`'��kq#C%���=�BP�d�?���'-id[� �4I���U�������Зb�} +P����z��іi +n/�����!s>L%�D�Yk�N+�W�`�aT�b�vB9����1�^P�����0�c�������r\��+!|Ys��`�$�jH�$����[�[UT@�)�u���JqԊ����gx�Q@ +�� +��7��8.�+� +A��u��2W����wp�d�2vW�$Y��_d��dU����c\%�Z%��R�2.e��gf�Kq}.*�_�j� +���P���i�斈:BC�ln�X +H��S��`n��ȿVKl:�`vZ +�C`]�J�����r���9���C^ � +N���+�%1
�C�X\�F��x*��D�+�u)�����t�rQ�� ;�m`�{^����Ɂ�tQ0��] +>��}�V�2���ߤ�vӄ��Q.��Þ�'�r�2�;&:`�}��?����<�3>������\��<�$���8�q���`J�8�Yb���R,S�T���Tz��h��̴�T��/I}\Z�c���%) +R�s�f��gYzm=I�����0;���Hs)K����)V�����z�xu��V��I��%�n3�qs��o��&�aķ�v3˺��<jn@�;���+W�{w���존��s�:g۳��`��<�̥R�]H�>K�.~�j�$ +�E}
W +���9FO�˲+gG����ri�t��*�Ű���(��F�2ϻ� +dx�@Z��[��d�l=���.Ͱ܊~��
g�~aV4!
>K�p��>DR$����35����fW5F��פY�&�U��o���l��dkk��1O�Z���!��8ਘ[�������������������k+y��3G^�;�6��U��b +�ΛwP4�r/_� +�v�Y7��|�y������@09j?aG��g'IsF|cWL0�� +8k�(�t��8�*M����FIȰ?��&�5�׆ ���ĸ�+ �$iN�V�*,]�֒4�k����L���:�����@�08 +���]�l0?nR���Q�?��F���å$��%ת
��pyۑU��6�_��avg����=��/e�%[y3�Q�R +�z��n��ɶ�2��|+����e�����8R�� +NN���kt(k`j���$
p����ǐA�ӏ�~�m;������{=k7-�B_�SK�!D�0���~nt�}=��~��wQ/��^F~h�$١#�ɱ̷\�{��;���A��bG�[Z:~wd�2qۆ��m���t7�./�˼s���v��� +B���2?�������o����56� �C��[��:1�Zm�Y�фW���,#��e���v�~
S':P�&� +<��cR����������E�~�*�9����� +=�@L6~� R����o�Ɖx�A�0�ؐ9�+W�,ig6^���C����RM1h;�/��.�m�.��J�P��:��r�v��dR�(_�RR�'���J�t�ߚQ[~�;R+�Z�$i�)��ͮ +�S���:G�y�`{��Q +O��t�2o�l|��p�42�c��&i �pQ�2���Ø���Ni�v ��%��^�(�H��v���v��3���^3@�]*D��s�`fZ��`����F�$c +�4���A��l&�&���1��d�΄�1AJ��Va�l?�^) +@��yw_��z�Y��@�UN���Z��e>|�/�aw2%�ش}�p�0�����������^�c��j`�����[/�zt�P�O�O�s���alB +7Bw��M�ƌ������ +�rōb���& +D��m,ff���@)s��g&�R + +���:�:�.Mr��E��� �_����2:P�4h��9;Wt�hi<A=�f���� 䌪n��L��_�G"�b +�ڹ��>� +:�8m�A�2w�@������̇#�����Q�{m��o��N���v-��5���n��l�ӆ +@�7%!����IPY���v;�7���;���A_t*.O;�1l�4*�vD7D��9S� +1��o7K���<����q��8W�e(�0g�˴���N��.2"���Ji�v=.��y�'qSr/\ +�'V��@��l�ȫ����!��5@�a�� +�G�G���!E&��] +��~�m�m��Ҕ�=��f�!
t�7�$��O��~�E_�}_�'��n���7o�w��D��N�O�-t���̻��<?zu�J��P��IeT��f�:�ݮ����]z{�{d�紽��n��9EQ�K\�J�?�/��OU�y��_���g~!��~�����WT���z�h��:]m�g~�l9-�k��Dul�F?��+57\�ۯ"�}���f�P\�ڴͶ�v�hD�� +�r`|�ݫn�ב<*4�Z +@_�,�]Bl��2+J�M=�C�� +�e@E ����� ˈ�\K����f�?M`�������8�RZI\�e>���!6� +��`����6��%J@�ZZo�z�D���֙�."@偟B�ZN����T�̞ 5�6�v+��j� +��.�7h�!PĔg +���;�Y��R.x��geE`�!��"HJ +h�@j��^�����U=~�ִ�ŽQ��E���f +��R�l}�=S����R*1�;Jݸ�PO� +;(tyz 7\=�2�e��vp�R +"@�խ̞��|����{Ng���Ǜ��T��ăP.�Z�UN��%�^�@��O� +嘧�B}��ҩ��0� +�8 �xd��:���Nǿ�^<퓇�[P�@1���h�l�4ĺ +�w�H�f0��Ж�9J������T�c +�Q�y����@`�K�iAz��5q���wr��Ӷ[+=��Ҙ�/�' +¤�7�2�I�Z*���ɳ�=���u�b[ڲ*��|Nj�$]l��`�}�(4�T�M�l˷����̱̺�G��,��Rz�(�x��$��YS�4W�ţJb1 +��I����+��(KC�߬�"&�� �����1H���0��L��N��1=qx��P�VȔa�I�/Oϝ�(4�MB�ݸ�AeR��� +@.کrm@��÷ +�����NV���w�)��a�SW��?f^)�%��|�@��k@�sܮ_��u|ۦ��ROV��%f�M�j���`I�`�_e�kӇ� b��~Ǵ�D�0-���,�\
�&+�Z��� +0�'�{������- +@�?���w <����1��+ep� +�p�z�`������1�Q1�S)�@�4��c +��jEc�j���Y��&�3��ıM�/T��K�s�R>�-��0������sXP���ӥ��py~�������ryn~n�*_���������6�>[r�����6T(Rk�\1?80t�:���=��9!n[7/�O��v�;�Gя���W�܄�c +��h�ٿ � +�c>���k|w�T�=� +���2 +�)�����O���������r��ǚo$�5Z���N �N��E�(b�R�8K ��09�(X�¤껈��Ҽ��!1��p П��NI�`L��#,l���r�E�{�����q��z�0�D�s��c�q?o?�W����� +��g+�l-#�Ѕ{��!n�R���r�� +A� �B5���#�TW8)U?㋀,���Uؕ�K�C�$n/���G���{���>�m�7��0�<���̳ɳ��$ A&
��d� +���a�4V2
�h_\�v� \' +���@��9��)�!;s
&��%u��R9�P%�d�-e��Z�r�eumWx�f3A��Ł��BU<ki�pjD}��@Vb��4������U�����#7��[[q��~��gg�F<��K��s+}�[c +��Wퟬ��'f�%��@+�0N +� +��1�n +� ~�&��B�B����\]W�� +L U~�F��_1����LӉ�>�����kQ��E��
tF��m�'�iL@p�.s��/`�>!��ڜ�W�Γw�"���q�S�}�; �����!�x�� + +�1 +�p�_Y��� +�}��a��(�6�ʻ�|!����-���IK��hKł��@��F2�>G[^,�G�bf�T� +E�p�X{�ڣ��9����X�>����WR�7;�a+��x̿T�����-�9V:8͊����ŁW*�y�X���ІN����pc +>�~�R�x9�Vj�/Qt7j +�� +�� ���_�><�`�9�9�x�W"�_���RX��O�P����f������ +�IM����Ā5�ya��[w8�5\,�L#�����L3'c +dF�E�<]�T +.����+ g�<"?�8�6�K��,���V� A�g�g�L�`!���KEk3 +�
��_.�u�
��� +��c
l�}�.�^`*0��'�. + ���ۧ:`$PA���� + ��lzjp���#.��|$��ޢ(���s��x��YoG���� ZYbB�LJ�W8=0d�ND��8�{��������IZ���v �SX~qm���>��ߦ�@� ���\�����#b +@&j"쿩 +@���*�� +���_� � +l��B��:��j��S +~Q4�5>�oЄ!:�(�z@�>Dh�M��d +��@~���t�� ��?4�k(�W:� +�nI����ݸQS�ze(�} +6Lhi��ĝ��y0 +�r6�1��qo_ +b����}��g)�C���������� + +���}� +@�_ + �JvXC�o�Aq���b�&����V��wȖ�I�G��p��Y��O�dk +`?�� +&���6�� + �����?{���_;����+�D@���"�*������Ǡ +��x0�b�� +ΙV��r�ru��5"�co�c� +%x�_״�O��jy^��������P|{����� +�z
�x�>0 +"�h�����#D��h B�6b +�����O +�<����a��((���܂�2_�p�a�L9�$X��� �'�� o�Lj���J���~��%u%\��,�����8@�8�s5�᧲�z���4܃�'SrX
����9�4��05�~������R� +�l�t��,wd +�; ��8��4�R + +��A�����o�*z0���6�v��Μ<�
��S +�|^~�!>^ +�F`K'�ٽ( +����XH�L��x�ɏ�G�����N���� +�8W���''''����� +�}t5�ƿw�O`q�ϝ`)@/@0S
�#� +H +5 +��%{d{ �~ +�̛X�k��� +@��}c�!* ��hr��ehy;��}�� +F�J� n�Q'i)�V\��SI�K��sc +G` +�����;��u(�t�� ��y��#�� +�ۿ5`{��<�k�C6��nvߩ��3�W���J�~1��g���z +@!c3��8�l�v�Bq��m�� +Y@����4��/V/�i��� +�D�>
��������_\���_~���b +�_}�2��!��O'�߀�2>��`D
bRc���.Rb��-�n�.�&zTm<��O9��ֿ>L�0���1�ʍ`�U�p���+dRV�O��0O�D�o� +�
�
�4Ǭ��`i�a@?wz�,��r=�6 JG(�#��K�ʩc�HG����?�bxDU���8�2 +`*�[ +�� + +�z��hx02��lH��¾,?�����I~��o�J�>(;5�+d��� +� +�Z�w�j�֨��? +(a���(�%�9�Eh�E�X +�m��0�$I����_��j�M�D����� ;َ�u"����$ +�0�@��v�n�ڍG햺�H8���OI܊I#�N:�o�{{�F#n�l +J��xQ{��s��C~�Ҏ�%��#v-7�I���H[�g + �G�Qi�X +rQ6p�N��c +�S�]Y�S +�21�W�w'�:@�f@"؛X +34���2'"�o%��a�M�+W�-(+qxP|��$x +�O� +��]�_%�?] +#Ö�a�i��+k�%VL���W�K�iJA�����O��bKl�.Wd�`�@�$+MK܃?y?��/.8<̥畂%v=8.+A
�,�s�q\d�@=8w�V>O���_��Ԁr�"�i�ם��� +6>���E)��Z +2��lhE O@��J +��!|X@3R,.QX@l��*��!�5��_֨�Q_��V�#�Y���/UP��K +߲�3���* +` +^c��x�y�� �~��W���! +� +^�z{���.U�i +��`�pC����o�p�GϜ2 +{�X���D + + ������Z�8 +�n��8��Y#�~@�,7ة��
,�[��R����rA�X� +�U���~���P��ڨ��`P�(��9�_�� +��gV���TU�����94P� ���;����� +�l+��+�����-��(���l�%���h +�Q�`��� + +@ +n���Fn߷�l@�ڻ�h��\�jq��}���Z�� +�y7l��QST�j�N�Wѯ���8O��ϗ�lu�{�֍����_��9��t5j���˥�9���������|�|�¯�e�?���r��L��e��{Wԡ/��msHv��=J*ݠTD?��61���l�#ѭ��/�iυcm�� +S�Z���6We��ĵ���±�� +6W�J�a+ +�o�`,l����x{�-L��z})��dHڒ���yk/@�s&k/�C@��y��w���\��@.��˒!y[-���[�@gp�혲�g���t�m��b}�Y!�#Ux���3U �����sU�eG +�� 9�T?�+��a`�Wl�3$��r�I��K������2q��+x%%XdwaHx^>7V,�� 7<�<zr��� �}��~�m'���ǁ���1��A���l(r<\q�l�D�.����{%��SXߘ=q��1��R +&�+��`r�0��u+Ԍ�{n"�%1�DB����6�7J�&Z1T+�E�Z�%q�=1g7o��w�4�5x����^�ډ�X#@��h��@������2��� �j@������v��"����D.+�s1��B\���a�K;{ƞ"@U��M��v +�T�ڲߛ���ǒfM���ww�<y�����_>{�_:nƀ�(��dO!����@�Y�,�D������{���C�
Xh��>x���{�~P� + +o�%go��%%�N�1k�tOF��Z�ʪ����ݧ�����>�j�8���@^ +�JA�t�1���U(�7��5�@[���³�P��:
p*��"� +>�W�g1�`�c��^۹R����"��
�U�Y}1 + +��� +@H����`,d�=�V4�F+Jj!�+�RC��_
�1�&�b⤬rL� �h6�="�SX[��Qs�Gae~��f�`�ZX��63�e +� +&��'��yq��i��w
9 ���0[�"�6P�[��1 + +�z^JR�~��D<н$�sd���ho9�.��5�SE��V�q
���|ځ�*CT1<�cSV o���pۭ�� +�۸=��?0Pp``�g�]�g�A\�q1 +���� +`J*��� +8���p]5���(���W�x�;:DI\��(@<��_q=l֛��`��\n���)7!�< +�z�6$������F�x�1�i�2 +�e +��V + +�ބ�o��� � +L +d +�Op� +�� + ��6i��61���=b +1�2 +p���Y�`v�"p�����������<h��]~�����_�� +�|�5Xh�c�=x��@��� �Xg�����5 +|�� +�_�w�� +��&������ �߃?`�#���bX���叨#ذ�I�(%�j���?8���%2{���p��\~�ĉ +`��*,QO�5�Hp�f�1��������� +f�lo +���m �+b +���3������JsPY���=�U���a��V��t�.�����1�T��~��~4���������X�Y9|�ܹ���kp2�� U��> +� +�Pg= +:J�C�Ż�=���o]iݿ��R�4B�SL �)L��'n��W�X����6�?<~���:�$��3@$f��Go�9qb�Cޤ��ҟC%��a��"K�����B��z��)�����A��H?9��N!��JI,W< m�p��$��(�u)��,��1 +z�X���?(+�V�h�����'�i)p��`_�F����������C^Q�#��1*�o��"�Waۂ"�z-}ud�uX�4��{9 + +���}����G`V�k���Ͳ� + +EZ���0��3�,94�ٳ�ì��� +�����'�2ϳ��.��L���V^�( +.K��Wh�� +��V�(���S��Y[��M�"���G�S]���q7�����<!�q+��p�v��-;0� +�j��0 +����l��m@�������������l��<.�(� +X�$O�jp��: +g�?����c@ +�ol�.\'������0 + +2%�°sV��͞�O` ��D��O}���$���(b~!�
�a}�x���"7��qu�(
6��F��m��HpX @�����wnSl�^ �67�*4p�\�~���~
@�sGF���0 + +�k���}��) +��}!���Q�`�l:��//i��^nrL�w��HX�H@=���u�|b�U`�[��aꑗ8��8�������2@>ԩVv�_�g}��s +`f�[����[�n�0�-�Th¿��ݔ�8�~ua�6� +��� ;N��@��y���Z�_�������|�!]ҟ
`%@�l`�1ƕb�y�cK<c +��f��S��2^ +`������3EFD@�<d�y��6�r�W�`é����^�" +`���2�`F!G�O +�� _� _����i�>�zy.7P���Ȉ��D�Gon�B�2�<��Y/\5P�@⊇S10gc +�e +�� +4l8U��/��j��� +��!ANzR�[�V��d +@� +�
v�}5R�r�E����k�籬�خX��j�zA` +إp@@�[ +@+���Eƫ�s��]� � + x��u�� ���#�B�X3��.ѭ{�c)�;�=��^���l?�/[6@�R +�� � +|���g���gP +��ذ@J$o�n?���������\e0��LG��s����uLu�~1���w������s +0'`�* �W��a�@��=��ݞ +�BϺe��;N��r@��ݥ�VÒnc�L$��_� +��ڰ9 +�����i��E��;Q.�x9<�?g�$�O�x�� +�� +X5�%��K@h�Y�� +�4@,�΄��;���w��J�B2<�=liL%�>,��&��;�Hp%vA�@S��+o�}6fa�ؼJp�_߾u��"[�!�[@���:�D-,�� +Ng$��B�>+��j�~�ģ��u�?��X� +��!�ey&+���^ +O�+͞q�imh���p��X�+ +Gt�1�=���Mgz1 +�c<؎ge6���?� +� +^ X�&.��[�~{1 +���t�\cJ�[C�W�M�o�q��(:���� +�� +�J�m@Pw�ޖC��:�Y��:Qa�@���NA��N��O� +���g��Y0���g�5�Z@e$ɀ"�x��ǘ�C�#NXhØ��v縏-!�1�9�( +��X!�kUf�kʚeT4���b��#���DH�h��TY���T +^�'���$�� +��/ ��4a�S��!al�;���֑�ps�V�����%�0���8y����.� �#� +�bp�O{��T�>��L��a��+ �!��pRpq��zF`�g�� +�i��# �ŝtC +�@&`חFWX�Y�]�� ,������1�} 8H�@�?��̥���J�Y� ���x�[6�h7�S2 +~D
+���/�0�;` +T�*�k��ms+j�}�b��!!G֖�19z�f�!�D����p
CpE�qU��P ������'��Qݝ}@t���� +}o�F0`I�cΚ����t��D?�W��J����0���b��J�&��JR���fXe��z�CEX�p�z +x�OA +@���� +\� ����B +M� +@� +` +�_Q��{���?��<��2{-('l���$�n�<�1� �����{��ҺK\J +�56���~�) +B�b�Ka�_�q*��
�_�$U�͠,%
�e�@h r��ތ����^�<c +�2�b��2��XU��T�s�8`m��o�"� +�s�����C//T��+0��Y�Z^6Ld�� 7�eRp�)G�c +���<�^��VE�v���Q�����i���e! +_��~��9X���x�ϊ�(,�ٱ!Wv`��Zl�~���� +�g�q +m�(@nĺ�Wo$
���I� +��߭p��DT79� +���l�C*��ܓ�uwt\��@�� +�Q�.`g�6����}��gȼ�)\��դ�B +z +R��{a�C���J�/��:X�� + +:\RyQp1���@VYT-�6`��3�{�Ys��p1 +p����O1ܞ�p��r5 ��&��jq����m��( �% +���(`C �%��&�1%��A�1@s:�� ���^@~��0��H�O�y��l� + j��GI
��aS�5'��Ǖ%�(6R����Wh�Y��$��
`�č鹹�\�'�,�lG������V�h%XZ\�(�N�,�᧫k;� +��������>�46��?^�s':��˵�u +�� +) +'�po��z� ��SO���7�4�r�@E���ЬWVh�!!�G�w��j��I���ʧHҌ�j(R +���;�o���̝;P +�p�t�W�v�G�(����A��'0�P2p�ړ��V�7Q+n%���6|��_�Wn���K���KX
��3�
xK^;;1�aw�m�߃��p�f��֏��?���� N� +PŏZߐ�j�e�<h`��`;Iv�{�AٵE|�� ��n�o�c���ĭ(��a�0���6�^2_K��Zܺ'2�C�}����� +�ܴͫ�ų�#�%��qo��Cj� +S/��G+\��= +g'�Z�ȟ7�c�Ճ)�I��;�Blm}�*��)��?T +���ȉg|A��*P��A5 +?�f-�z��W��<�I��������V��x�J��[;�թ�Ƒb����%��DXk��s����i�0-p�a��J�4�qK�m� G +²�5�x�����u\�, �n����|;����~��Nn��J�_�V9X���Z��5�Z�Z� +��2�\Ad@����tb9q\a + + +#*��p]0߅��{)B��>;��ȏ��uI + +�;pk��}؆�v�&$A�{�]���¸x�ߵ�@6��0ɷ�8��r���s�D�(�o��o�n��z����=�é���l@�wA@bm^"�Ꮶ +d]��p>�N�����o� +�<2������M�\x7��@��}RȩY� 4 +C8���P�����Mh�� ��~.5 +l0L +� +��$�z� ���H�2��c�̓.�a�=��!.w���5�*x +ε��D3�����@ +a��br�;(� +�6��I���%aA���BT˦ +}����v���I\�somA4���F�Q��E + +����:���|�vD�r5p)���H�7/����A�� +�����������V 0e +`sfvƞP�g ſ1 +�wY_���JU���p� +ඡr�f� �R�V�����(����J�L +�t�*���S:��7"�GQZ��kx�5>�t�I���������_\l%Q0�㨁��� ,x�~#8�E���^��k'�n�ӉO���᭣G%9�Կ����D��i�l�w�� +0cT�&V^��"��0h�����I�)�Э4� ��@�3Nu:D�R������,����x����)��M +��?����@���d�Ùܙ�C6@nV��Ns������AFf�ۋ%�y�J��<�:ޥ���]��g���r��h��sX��_8�+�im=�\h��U�l�ST�吓JjX��ek�TnL7����� +Cv��ѐ�u��y;}E96.�
<��$k
�b�=Dn�l�N�����.�z� +���)T +v�^�a�l�#i�ow�q#Tc�*�B����-�6)���7Nڝ�^�Zmǭ�$����
���2��.y!�����}�^��}8 +?�"w�r{���~�p�¾Ω�tp��� �����@e��l@�h�/�Ҏ�����M�֫����c���;����ȁ +<�BmP���P��G����!8�܄]�/4@���J8��q\�� +`�H �Jyf�)7�����.�M_�h +�X�Ǎj�2�~�y�k< :`���{E'$i)@7@S�2�� + +� +㟥��T + +�;Wȍ,.ZG +�� +@��S��텼EJg�q���N{&�'���a�+a`�A���ka��OV�Xoc0��[ �g!� �(���+�X��:�P/�9 + +@��d2��G�j +���S�>3SF +��f�YW���Vu =���`r�U��% k4�#�Y�R5b�!j�� +4U@�FU��� +@����j�L'@��/bc �&>�Pz���e^����wk������ߓ�L[�ih +��(yp��O)����}od���?�l3,&¢:m_⑥I��[L����/r +��qpwq�z�� +���!l?� +t�6}1�_� +@��'��ZUq +�O�Oa�O���i"5a�t���K,�����`1`� +��>�ĖL�%�Y�r�I���:@d +��ϮP
��$O8gc +�?���A��` +|��D'���( + +p��'�0�\ +���6��Z�N�z�V��� +�qp�f����Ö�fܕl%�������� +�(�.NE�@~v��ht��?'ɳ��_X�q�.?8<i���}���H�N����A l�gT[j��p��W>04mt������$i7���N{;i�~�$�c�'���^�h&����`�m*l0 �hO�jq!�S�N*��ߓ��� +�|�,���[�_�1�.�7g�f��H�̓w�z�b +����}���ŷ` +��y6�/�ϕ��/������4�;-�9�)�,qG�za~�CJ�K��U�7?��犅\~z�4}A�w�_��BH�vLU��t�l>5 +��j�I���n����f� +��� +��&�}(N�z�Hӏ~�.@�/��w�8Iq�D��-�b +�� +�$���wcUm-f��pt�Pk!8����YЩ������!p��+�5`{u�����5m�RT��8T_�-ƀ��#����5�Ei��&BP��=�}����!�9��7���'��֘i��1PR'|���3��A^'"����_�+�)���0C�p|
� +�)����B3"� � +��� a,�.�R +�h�������j���'��3�_�_���*�o�b + �� + +��^%�� +�<�nE0�����-K��p�Dd[ + e +`��;��Ir.���p<�8ӏ�X`Ho +3��U +@7��R +�B���t�4����y�9&��s�SO����V�G�(�v�vu����q*��O�_⮵~; AI�@f"��?�{�����gtZm +'' +�����(�� +*p�����k�� +��.(T:`kL����`xB�t�L� +@0e���Ot +��+U�F�Q
qC� ��5t��0�@f���J��4�����o��("w_潵��{�>!�G +�]'J~�T*��ͯ|��^%kl� +�� (��~�%���D
�|ѯ���ԋ���qů�p�Ap�������c.�+�[����1N��~T�}t�*��6_i��ǵ +��j�G0.>��J���ӈ�k���x��Z壧Q�_�����F+���q-[
+XQ� +����\�>ȏ���'6���"ڭ�X�%+S +���� +�2�zKǰ��b���K7�8K��Ϻ�A��t� +�->�K������D�߉~x�kp +�#��{~m��j��̿?a� +����V@}�K��-�z;2`%d� +�uzN�g�oo�K�3�i� +�r�=���|(b���������!�/L��j�za +�W] + +u`��IPfX���|f��Nc�)T |��cM[���p���+�_�H�0����d��z +ܘu��3�o� + ���ը�!��i[�?f]D� +� +@U� +����<빀���M�EW�e�c(T/pD���%8��E�u����2 +�G��C�J
�BT�Z��_�h0��;�Y�\K��e +� +��ĥJK���U��~��[0n}�1f�y��L����I��S+�R��A�t�X�3}(L�w�*��#�a\)����b�W�aˠ���<~��@e� So����tՍ�c�i�
&ܑ��??&e +�H��U�+`��O ��E��-� +�Q����7}���m�0rab�|��1w��,A �
+>��#$��'�����1w��_�."��: +�|�"���<NJd�ŁQ�Ʒ8N������p|�j�+���x�,���|'q����1�Q0�q
�qT�X�� ��0Q`�A�J"�H��B
~bN�ŵV[�l�G?�OT�S;^h���΄������n����=)O�g���;� +��<�;��۪����p�H�͠���!+hm; ���\s��o= +��� +�}��h�������~-D���n=����~��Z�
+?8���^��/��;�E����8:���OW��܃����NOO[�� /�u?��N��]ź�#ϫ����q�uT�=h��1_-�WҊ��E�����A��w���;ma'�U�wb��>���@�EW��6 +P�m�)��.�kw�Q���B�j�DžQ�S��O���f��MIu�#{?�Op� ���!��~'/�i�p����q^>{�*�-�� v� +7n��r|��7�ςjP�%o<ϑ����1�����_
��A|��cf��h�>`��{h�p��)���?� ��c�֍�\w����z +�b��u� +�Ͱ@�� +l/v��?�&�N�da|�����V" +�P0����SSK�SS��� �`cu��B +�,��|7ta=� +ﴞ� +D�]f�� +��gNr#㿿���&.WNՃ���|o2]Y�h��vC�ɠ;T��Z�9�N��~v��0�8���r\~thͥ[O�5�z� +�ю@5�@wX��Pe9e� +�u�)���Ո�h�5�@��'�T��7��j4�#%��0\�V7���AX,2�x��2�|*�?�����r5�ǥ������@w8�o�^����~\���A۹q�u��VK�ɬv��\���j4ߪ����@�Pj��!���k56� +�KUM�G���SS���������K;�e-eQ�+�v86_�G/��>sp��<�u��q +P(�,A,Z�S>@ +l�{�9)(������I������`�%�X#�� +p�p#������ᇁ(ɓq>?�@�˞W-�?�B��%�����.`>��٪�=+٨ta<c$���/��� �&B����O��V���R<�g���V�1����������M�opx5(W�S�$�<fY+,>0�TVb�ؽJ�R�f�d@r2T��$��_�C�K�,� +v���2|)���� +�,�zu#.���9�^e)�Ϣj�{�'j춘 +8ߘ���f� +�@����3�JJY�'As=j->bԈ�������H�[G2^:e9� �uN�q֟��I����B�/�X�\ݨW_<S��k,�Q�����M�>����n̿`���.nb� +/� +��� +!��+�Z��s��oZOD꾰x}A!��X���6�<�>�+��琡� +��!�8�7t�T�R�Z�mH5 +�[��v��ӝ�������ivR0d�`pAB:�����4Sz%�����^Ґ: +X +��R�np|�H���^���]�
MK++wk�i͵�?=w8�rkk�w���Q +. +�wIc��W-�����>��R��k��#Os]�B����o2ع�lBq���8n�ƭ�p�-�}�jާ�h��~��Ƶ�?�})sp�v�
�����?i#o�S�0�"l�8���8�>�}�"n���#S� +��j����?��q;��C3dg���
��B���/���S� +�,Pؠ�c@��$�1����ݴ�8 +�Xҟ(>��O�!�z��s9�L�U������Z����z�p��9��ry��z� (��H���0.U@u�1葮Tu�# Wel�++��@ +0:y�����W�N����(+�� �
�
6JFRt +w��;F�!� +�_�Ŕ>�� + +r��jP��"� ��*����A�W����)p�Sa|��{ͨ���� x���sWFrH�K�Wv���}�/�! +���M6�� 0m�%�6s;(���D��*8�>đ���,�!��/�"�>;H +y��4XB���9�*������"������a\y��("������xޟ�GL��v$�e����Ġ���;
H�
�j������qS=
-'���qf���V*H�ur��:���~�.1v��8����B�� A�a���n���q�.��!0��fj���ٻ-g +@�n��zۯ���� +�e�Õ("�yyˉ��R���V�R%D�?�!nEoʻ�3_��q�@�%r +Q�J�@#�'����FK��I�� `�-�s�t + +�B��?y��I~�����j�6x���J�!�%���/4>�*`����/-��+E]�[k������zp�0�xydد�Wl�]��c��L�+�@�H�}@o +Ѕ"[���p�'axqԝ8���V���ϞDa��V3z�k�4�a�ֶoDž\n�Px�fn�e� +�@f�{�����S���q>r� ��)311q�έ�kW�]�vu��D���;c���Q���]��v/���}�F +֢{E�]v���2�~ɺ���/b�~�§_!)e�ڨ~����n��7�q�7��/5zp{�y�p9� �!@����}���G��?D�\���,,��6[�a�0n�Տ�K?e˿b߱M"M�1�y6�
���TøV����0���@S,��0r�{�dQ����L2���9������{X +��|p����܍Ba��l�,�W�����c�I�U�9�a�����//��jy����*
���u���c>�(�y�+���ݕ�Ͽw����pP(0��`%�$3� +��l�5�P>�w
�o��K��x8�ѱn�N��p� +0��}�{z�׃k0���vl\A� +�j������&�$�/;�8� +���8�Y�q��P��I%�>g�i�\��e�H�S��+|��U�x"��<�FA� +}�@� ������ +���X9 +���W�~� + w�Q
�|�8H��Ob'�e8 + +��˼�Y + +�V�plɲ� +�E�'~�@�6VpH���� ��e +p��'��+� +�?�,�@�� +��&}>���������x��"@ +`,����;t +������h�<���q��鄐Gl���,0� +��~+��c@�@s��O@Ƅסl^� �� +8��F<�)�5��0���E;j��f�-y���}}E�v;�[�^��g[A~l4a�����ɋm�yl +P���r3|=k�DѷA��²������-�� +7�ui� ���||Ē�U�� +��9�Ϟ��� +��O%�J�Z!�݂��lB�q����|~҇��Z��qD�"6�W*+���ym-��2�kQ�o5��.����/` +�$^%G|6���_a;N�����ry���b�:�Nƕ� *�6���e��|+�a�buS��\@8($Z4 +�/h� +�Ɔ��k�_��'��$�ư�A�Z"U��_ߠ�N +0Ls + +��C�#��:���[���R%\ᓃA ��i=3'�:� +�%�O����7������9>S +_��p�)��Ҙ;�ė�H�
ѝ��ۙ��9� +�����?];m�Q�n���Z�ft��i�����1��p�}�Z�DaoE�?�"jEp����w-H@. R�����7@�+�w� �&� +��[Y�/oM��?�+k+++�h +R߲����ܧ����fR��CL +d
����n1B1�Q�H +�ոb�E@dfd��7 ���w}�O��9��O�'�_��5��sY��|V���� �����K} +�?xy�=�
���!?�B�+���|��H�ڇï+�<9 Ϻ�V����Ɓ��j��a����B.�8]������*x.�ۃ�ry��Ϗ�!��B������"C,M8B��[5 +�;����-��j��-�S����䘠����� +@b�;�q_/^?��7ü) +��0�?ʚ��x9 +�� +��L��}㷕v� +�S@���Ɇ� +0\����n���p�M�=S��0 +cr� + �X :�NA>(�G�}�ȏ� +� +��a��*QT��,@ +�n��T%;�G)�8�0��(�F��@.7r�#��͍'Ay��맅��rރ��he +##�e +@�6�������Q����y
Z�K%��;�؆IR�Њk��yV��[j=��o���F��v�as��,��U���O�/���;���qL�0��U�� D|��� +�^�h1j���O���{;GG +�ڻ�"}�7��G����"���<@�V��� <x�M>(f
7����F�{a��ݵ�T +��#��#��r�����1�|��&Sm +�*��4�O�KD��ǩݩ����[;>E⛨��0�� + +kO?z���b$���߰�h�; +���� + ���p +�q��I$`C����|\�<���.��p`a�1��`z�Sf +,��-�c ��x�Aèx\Y��|}�Å���݅��jb|�� +��`�N(L� +�2"�R�!����˂<-���D壈����R\�q���q�B�f�$��q���)Q�2��AT����H�ʫ ���3E���2�[p�L +K�}��y�0j��ܕ� +�?����������6XX����т�P��� +�X��b�l�`a��}v +�`��ѓ�z��dׁBX���q��u��y�1���n,ht����'���[��6�w��������6z&�n�s����*�/L� {���������g��. ���.�3@����ԟŃ,/H���L +�� + +r����9�4�O @ +����4���8��0 +�\�����)�*,L�LJ +g`L���]}� +�D� +�3p ���'�\��U + +@�uZ0B��� +|�����t0֙����?Q�|�?Soq�0 �#�_)S +gr! d*Xo�y�
+"�ŭ����`�Au���8����N�[��~9b +�{QHH�>H�G%*' �4X(�T&B������*^��s +�bq���e[�Ƚ],�Rц6�����&I��p"�T��̲>�@�7�_Y�R.� +�� q +�
w���� +S|��/?�ҌԀ�}�>�w盛�)EL�Yx�d��3�� +h�J x��O��W��� +���W��,��M���%�+NT8h@9�*,�Rv�pH�0UUϏ�G +\��PP��]g�{]�:E|�8 +�Q +����Z��c�<<�4ܯL��"���~��@8,^~�6���ְ����EJ���ŕB~����+�J���~���J�_)��]B��u�hB��d�/U�JiVc�_@K<����K�]�>�]u���"*����4�u$��1��Ԟy +���oP���w�.(p�b{@x+�( + +��+4���V5ఙtڬ�j�ȉ#�U�z=��S}k��n�9��r�_�,��5p� ^Y����3a1�o�a�k�Bfh���fq���(������s4���+%8X��瞗�
�D���]��� �-�o�R��� +�i�u�\DK� +h��� +���<�-�@�W�*!���8֫�f��m�lT��΄��RŮ"@ �P�%��Dz�P0�2(ݦ� +f%���Eh?�`(8���>����Q�i���)��q�n/D��2OT���g&s +������ss3��hwn�a���
U��|җ��;��%� �g! }�=� +�u +�0(\�i��5�H� + +�W�Y�)ϫV�A�(��\���+k!5���Z�y�����Z��t +�c1w�SEO�QD�Wq�U��M��r��� +)|'y*\���#��J-bE").���439a@�����FU +:YѪ��J^�~vnD�-p�@���.&' 7R�Ox�� +�� 1����mu|E,d� +�+��� �:�O� +�vQ%@V�6s +��> ��
C����\2~�C�����z +�At,9�;��Q!h����A d�;^yI����$u�BZ���T�v�2h�a�|�
\�*��'�C�NH����l��<��6�U�DN
l�q3;a����0Z������@(g��`[��pE�@g +�M�� +���O�Soj��-�� +�s + +~�t�mq=l@��Z��p.�@� +P�*eC�R�'���΄WE�.
VE�[�W'�@s6�������^ �t 8À�F_pX� K_������%���V�?.�+���Ju5̔���I~%h�n�A� +��Y( +����u +������|NA��X6�@�*�c}���[�D�@lK���B�T��Cap���� +j�F����{F +SF͜ +�u +��k$���D�����@ + +��jD%�)x�q� g�`��J��߄2�M���h��!O�|S�M��
��:]�� ��
\{婺4C|�k
�vwA� +7�0.�Za�V2�E� +�N��O!�as�,X.��e@���C�11�; +x�� + +@����6��NK�� +�M�@�D���H���/��;�kw*%o��G����#��[w��w8��F-���;�Z�4�QB8$h�TZ+~P�[�[����_Y��~6_*ο���������o��<-4j��gZ)��>~\��NJc%�����'8*�$�q�u��3����W~pw;q��|�����X.��p���ͱ<n��F@ō/p�����V���,�K�U�e���$p[_� +7;^� +�H����( �,} �Ahy��i� +�8| �% + +�Y) +�'!�:����>�L����X��D�5�K���Ad�Np�-� +��k�1�A4*��!�]�rP0h����a^ XH}G������ +��� +���|�M�YE���8 +gpd ��4,�0�[M�n�ڦd���O�z3S��q +�q +|t��]p��� ����wn� +� ++w��p1��Cبm +� ���(�>�� + +p�(��������ß?~03m�n�ś�@l��vf�� +�4��o��%?�ª��W>�'���A�j�� +�~�= +��7r +@���J�-�L�ُ0�@�}� Z���@��q�Ni� +�A[��d�$?��qu[�?2%I����K�P�N�m�(�1S>�gq@8����p.����8�$``�*��x�dnnZ�xgvn{�p1;s�) +a +�q +j~�� +�q +�hT�Z��� +�����,��8�G�����|tt��� +��� ���GFn��)�r�G�E��<��~��rX
d���/�qr����d�z� �ƇA̮Jsc�-#c����'��߭�f��^�{y +�����~x����L�� +�,���@��.XD��9 +�in������gk��hk&q +�� + +�lTа>���bQ�%���2 +����&�o,�=�]u�p�d'[ +p� +�������) +� �_ + =����=�U|��h~��hn�2��>:r
�AM��51Q���� +�rw�� +i��W���$�;<?���H!��od��7:�5:�� �d� ni��!hX�@�������9� +��s@���X���9(�,-�i��� +�S �s��l��h�wpp��}���D�?Y�@�� +[b!~� � +���� +��} +���Q?@ +0/g��mVn�Sv^.��`�����x�� >|A��gp���3�n�K���N����ޔ +�� +�Y$��B����p +��I����謸�At�S(-h��hp��+ +��.`�G��!Y���9�W���B +��b������Z����+�ɑ2�)������}�t��.�
\� +������W'!��+��@^���4�x�G�� +x#>�`W��� +@|�-�V +�"���r�͟��t�&v�� +�� +X�m�9 +�ܳ�!� _�r�� +�*��p +y�4�k��2�Ҫ�ⓥ�o���XbaCE +��� +���rB�Ә �p +�[(l��T�3�?�ܑ*
�r + ��%��\p�<�J���@�d�Xv� +sK +�>y�O����� +��QT>�����Fȭ�C(�p��� ����������٩���ٓ�|��^�g�KR9��a�ˣ��O�D#�ي�����g�!o�oG�/[ѣ�utt��=�<}�|����>���: +�e~s�����y���J�� �.G˗�{dR��b,n[�-��}�^��[���>v +��g�����J
�������"�GJ�i.ԐM��8�w�{����+;J��A���� + +�������?�_]p�� +˞���́W +a�µx��|�&��^.��X�y�?>>r!�罸�{t����٠9�= +C�g~� �*j�\����M6�Y�]��h�7��q��� +K)�i(� +~@ �����J��q�Ò���?=88(]��O�.����VVo��| +�V�}���岹�*��x;pp�|y`6��Rt�H�; ��{c�9�/�;RD<��5����?�����G��� +@)��l����l�PC�9x +.��� +��R�����}����� 28Z�<�C'g��
-L@-���q�ɀ����I�������0a6�s����� +��m��~Xs{$� +n)s!�`!����o����答��z�s�{��>`�z��@���I1��/���Z��C��%�
�3��{�a;�
g�;��lߣ:����X���u��R�?t�����W���T��Q@
+xנT��ʻ0)8Z�<��� +«���.Xm�_S}1/��V>���e-�)�ܸ�b;�y�$&?�ڹ T����: +���
0 OH�5� � G�
��n�}����˃u�H�K +lN�^ +�A������\m�>����o�0;2E�8���d"�1 +�������7{V�q�����<}� +�j�pоPp�|y +p��6>��>oI6�ҙ��!f�O٩�v]���ln�+) + +�+6pJPt�M�� +ֱ���d��gm��
�*a����-�2��P��4-_��;�P *8��� +���kA�E��Og��tCV +0�`!0p��]��ص( +���.�@Q�_ɚ��\��(�ߵ�bp�|�� +�s +d�ox��~]8#��+v��3N +����ۤ�A�I���ظ����,v��(�=�*P��<P���}�Z�J��p$?a�0x\� +A���_��"�}�ZRSN�$�,�3|�P)j�@��3~��p7`�A7���ا�s1=�!h6�-6 +���`� +x
0�_`� +�|������� @���n"
-)�j���>�2��J�$" +�*���5����'�A��ư@9�������� +�v�waA|u�Qt���=,Z3�jj$ +$y0�㝦 $/�_$� + +��w� ++P�ss +�+�χ%��n}v�7�#����[ �}' +�������'�8C�/P�}�' +m��fyS>4@&\\z���\� +Ŧ]p������+�#P�? +�d�c{�!e�=6E��$��#v�����W���L�;���v5 +Є +�<��?� +��Do��ai����i;�+�|��� ��#(�����e�s�cv���s~�Wȳ�/� eI����=q(OT����q�=���Cx��^�t���S�s:nVC/��kH�73'�Uޱ�)O$������r{8�_~ +Y-�q9�P����S���-�Y��(��[��J +L��}�����Z +·������mЌ-�xa_�п�-,% +����n�?}�� +�KY +�2����G���56��϶H����M�6χ��`��u +Hl� +��{.�NΖ��E����;��Fl' ���Y��CY��}VaFh + +��
��ை�p��|IC����c�K��㾐 +�R��oKM��{� +�@L���C��P@���q8� ~e��V�G��g�)4�1tmxD��&Z6�v��q���Ϙ}/l��� + �E3� +��A +�9���i�RYY�e���$ +W_S�ؒ�J�ӥR)ϱ}J��<����v�q97}u>7}9w5Ǒw�DZ�k����������80m��XCܳp�9X�9_��\Z�ǹ�����8���w�8�B�4]�^��5P����?�~[[Ÿ�_ğry||d�ܲw�wF/����H�A�jX�`����'0W#,����5���ٰ0��=M�Y�*�?��h>@��o� +�Wz��Ky�ο?~��g�o�O8V�L�d�O�� +��B(M9�si�1 +o�S=Z�t�g��6o�o���awl�l�0��gh�u�����ܧ"<�t���6��=��V�m?�~����y�<K?\��N�T��~n�ӊ�E�j��3�Y.��2?�ہ��::�͓�=u�C8R�D0h�w���o)ɔ�W9
\z����"@��.�G��ݻ���eI��@��- +�Y +�}q�7`{�o�տ���~��ӫ�ey��:��1G^f�>� +��$���a�}�u�]����rm8��Ϗ���h��O���� +�(#Y�WY;��?�|�ó���YP���8�?(��Y[���v������P +��Y���k|���UNȪCp��� +|��O�\e?T��RP +C��A��ǫ��/�=Է��=
�y�lv�O������O>�-��#�K�� + +n�7�m�Hz���b} +������ ?y �����Y<� +h +?�P-�B��V�屍)A��p��z�ֻ���S���H@]@l��YF5'�K��bq����+ףG8]AX���2~�7�Ϟ=����l�W�/a��@�����_>q�)_"����K�ג-K�H�J� jl��ir)�ҍS�{H~{���=b����\�P�� + �����[J|�` x������Xγ�ܛ�9���� +���G@e]tC�Z@�V� +�Z����i��ǭvp������ + +h +���z�� +=�� +��Յ9���;��@�Λ-�Ak����pO��~�E���9`� +��� 0J�~�ry��}� +���Uk� +��a���;�8.�-Ϋ�^�@�^�+������O����!��߄��<�C��{ +��BG�<V<jU���c-��
$Y�(��k���� �cqO� +�� +��Ja�I�Ӟ�D��x����0&kU��r�`ei^�ZǸܮ�O8R�L(y:� +r�9�G�p�:I�8 +����J +�!k��������?J^�]��<���0��2��%0B�r�A��H�'�L�\4�u� +^�����Biy�����n���D3� +�2��s3�b��5�j"�~�Gae|$�w��Y�]:>�O�D|�����m��:ף/!W��1\��) ���[�J4� :�ß��v�}�w��1����=b�5�5�E, +b�z�P�$���K(9��Y����Шo{y�0F� ��~���U�:ۖP+|�j@: +�/~}������x����� +X� +<�ez�� +�N��K��.���նb�_l! +��@�ۮ��o����gʡ�J���<j���|T
��G����zx��"i_������Ց1
�G%n����K��b�� +��=���T� +�'�<b{C5jz��B�o�����鍪0< �_�CM\�x�PZe,��Z�p�|�0.H�iH%�.��$�"]H3�`ww��<�f +` �1�a�+����p��m� +�a�g��f|�ѹ�a��yk�Edk8pv�<R��j`� +G���6��XX37p�����h�,����P��L������MV��"�o�U�,�{����Հ`,�yD��}ۀ�l��V���y��}̈́F9�W@�T~#f�X� +�ٕ���A1`�?2�_� |p������u�`��n�s���P +�oKm�4[�^��f��|P�r��dr�|����#M��M�-)� Eb���r��H$8 +����@�m���$�Ƕw�.�(y+j��;�=�3�FD�<�����^)���u�Iǁ������{�X��CP�Q�U��_��� h����ve���q��]xV
�l��g��4��-��7�V�bx�����ߤ��h�h���B�e�)_*T&F���9 +�
:��=0�=���U�@@ + �A�( + +(�U�� +���=�����kG��!��Ջ/��� +! + +��wY
H�7����� +X\)��P�M���t���v>-���~����Q"h��:;9d�e�d?v�$`"������ +5�x�o0i�X��~s����: + +�@��'�꽰���1<9�k��A + +L���f^ %�a)�1-H�4 +��~{\����5&(o`��w�m'�x�yUmk<�SL$H2��S� +4^�� +%�����J�r�+]�峗��q�e��hg2#�Hy +�DY?X�ע��Sf�?��g���=�$�F�� +�q��~W!K���� +�J + 8���a~���⳻��w�(�����G�٪a�1������>8�SP����ɤ�]����UW t +�8?x�� +��; +@��1Xp1 +���_������ 2�l�B��Gi�%�,Jk� +� +�q
@�������@�8�O������l��~!�'�^�6@�Q���C�8H(��xg�ѾU����R�R��{Ոw�X��H$7Xp� + +� +�� < +���5���a��>��W& +�rd�*�� +�� ���c#s +�� s +p��11 \�'�&��f3� +@���]����+��1]�覬9`������B+�h>�||5yd�W��w�ǯe�~������ +����@�{,�L�LwI@F�F���Pe�<f_V` +�3f�tӈ��������L�xy����_R +#0��|�Uг�����]��.����& +����� +wM�UHHLn��\b����Jc�^`�/�?������]d�Lf�ڄm���I���B�89.��N�[��=z@J&'gjr +&��w��IX + +�o@���V�T; +"� +p�ª�?j?Z���d�r7a��łA�
B��?�ű�좟��\�p�7�y�l��Y���4`�*{K�"�o�c-7r���<���A�O`=�?�9 +���s +�����Ѝ� +�w�<�T +ο�Ė�v�=$`���tc?�/��6k� �>؏r!o�[��K)( +`��`⃐2�{ +A��D ��ė�1�j�#h�t +�q'� +b�1����kt +���Z�yb���� ۗ�q�p��{08�~�?� +�!� +�6>>m +���� + �`�9 +�h�'z��|u��Y +>&%
�/�S_b�����F���F���ukÆA�ج����菧�%�;�� ֻ����& +���ƹ��^�rn�������j:7��G���%�O�q&Y��~ +%�kT|�T��5~���8_�� +��|s�4X�j?� +�Y���n(� +�P=�W#��{�g���_f�<6^>�5!����п�|���r� +��7����>d̐�� +v��{K8k���"�� +@9��ڨBf�0W +��Ar�Km{j�v;�he��Z�4pR��쫺��k�Z�̃'��(0 + +-��!�;�p +(�g�Y:�;� +Aˊ����� +�G�T�>��|í}�Y0�V� +͖��% ��T8�� +� ��hd@j�v�s��k�Y��Y��PO� +� +@`Q@�b���FuQ\���>t� +�X9sr���a�� +�"PNW����+PR,�g�`�b +C�]0���2 +����d@ +@��Ab0�kS���I�X +����p��8�7j5{Պ�ڦ��F�c �-� +%��ja~�T�\/�*��������\6��F���L8�� +) +�#�ڽ�7�Ì�;/��%�A�:"��}0��-ؙo���Z
֫���R� +��v�^��\!�
v�V�� +�i�k��&�ۯU:���~� +�T�#��_S��cK���{տt9�ip���� +����D�e�� +�9 + +�X�[���1����/��|G���[��V��y3��`�V9�f Q�%A@��|��pt�{G��!!h�I0�����<EE8 +ҁ���v +u{�']WVJ����o�+��p�6���1 + +���n�l��H�}���;xG��� +AE�y�?����
����P�����鿅�x�DT +�:��p|��v������G�*�$櫞JmDE�����-N��{e�S* +���p��sh�+=L����J�O� +�;*K�@��Av:���Ç�G������ӿ��)�?��Q��V<�x�G��җ�E +�'�^£�7�Y`ң�o��h�ӹ�B�c�zo���G��s�����(Z����>��ہ���:[�>p���3rq +�.�1��7�tL � +��>8g5�> �V����`- +���N� +��cu�O�䍇��j�j��\���f� +,@��@���P� ~��� �%� Q +)�+��(��_p����_b�����$�A�.<�|�8�� +�� +K�L�^��HN8����"@rT +��G�H7�=.��n��U.�%�#ɎL�� + +CZ7����a�%v|Q*����Džg�*Q+����[-h�����ݮf��QT(���',���Q7<���)�y6�~ +��D��܈�o +0'����
�`�&6����� +��������:{��v�� ��: +� +��A�-���yḷ��-�a4ϊ|֖�e�^�%��a��c���A��쯀��|�y�h>�}?�n��@W�07�f +�����u6^4u�������Xo�,�r��>���^͆e� +���ʛh#�� +0#ʞ�����;JE���e�+%P���& ~��h+�̦ + + +`y +��`���e;�����PU�Hk��`�=���*��� +iO��d���yߟ�%���(������fC���� +�ҟ
��*lۇ��V��i9r�b����K�=L`�S& �d���$� +�4�n���~@�U= +��P +{Ԑ��_�7A��B�ň�φ�s�B����7?�֧�<h� �C�p�ŋ����8��� +@�H�IK(z�% +����|>�1zrl��T������U�� +�`x�������gq� �V����z��ؚF}���=�q|��q(���nq��{/8:�&��x�O� +�9�T +�f���j�Y������r�
�N���Y��4 +͍����%0����H0�{��]�����ʹ�S�E��0+�e��@��?c$��AD��ǣ��.|�O#6D�qq���U5M�G� +��q�_�����W��D8� 0xeA����G� + +��x���y,�|�}j�����Y��#�˘�*�����i�%g����v���Z%�U���9��1�+^���?T���� +��X� ���q=_��7c�X<�{g�SG@��]�O(�%����QU2� +����L�v�c��$ +mf�8=���H6Yx9 + +�F�~��t�,���~}���X^�g���W4($�����a +�Ft7� +���^D�8{����� �V't�A�R�doC@��@���<!-V݃$���Wd v�v��>� +v�pu:���>�s��s +n +�~�D�\5���b�,I��@�� +����J��``�X��؏���s�� +��v[�A�J,��x��?s����j +��ﶡ(��Ac�5圤@� +��e��-�� +�<t&�����8 +�a<q�+�NS���Iw��<�M*�� �G{�E19�>��őFB:������� (@� +�m� }��y}�ry� O���LL�rI� ��H��9���X�g�ά���_�Y;{ݵ������*�1\�}�$p�|I� +������x���µk�f��-\�S�^<�f�L��ny7ER����*�V(\�Z��M<7~�%\c���p�;�G��� +�� +�2[��� + +u���吞Ѕ�7�`4 �k��c�"� + �/�
��]�JXh/��y\XW���.� +�!:Z�?����R�t� +�˯X����䀱?V��f�$�Y$�!ǹ�\ +�?Y)���������@�y��)�\"�U�Y��.c�"��c���7 +��� +�����X�e����, +]���x�t +9
�]����� h��� �a?�:��� +�B��S������~?z�
H�k4a/a<�aƃ�@C�D`��G���a�![!�����0j�!G%t7�s�^A8�?{�$�6%�lEg0��Mo1�������N������: V{�1K����R + ~��V �C�& +�Uv�
�h�Q���5�A#l�����cY���@`�.��PQ-��Q��0W���7��ҵj
� +w�k8�m���^�y|,�j�G���3��i�9@��G�����\�cg� +��< +��=,��2�j���G��m� VC +��R +:� ���! + +�m$̏ +@���H`�XM��=���M +� �4cr�B�L +����� ?u]
���yN�����,�v��I�JU���������/�Z�t8� $���e�s��W,�o�i���:Y�< +�뗧��f��"`�<�����_� +�E���{ +Y�< +W}?�x��wY +9�% +?����{H���Y���ǘ�8���s��cǽ3�� +ēq(ɿ��{p[�v���n) +�d4�� +KH�,���L�|�W��?1���Yv + +�:�?��F&! +&��� �%t�
�@�G����8M�fA≒�4 +v(g]�$��9�6f!�G@r}����6{���Vi�n�m�m��fx�R��t� +�}' +S�ό�.* P .I +�7Gz���Eo���ӂJd]��ǽ3��,���g������md|���R���j +J�����oo��m��ܤ8�d?�p7�����x�$��~�`�o@K��l��=� +#~u�?�C+�� +ey@Хt�$�`�� +gC��|ч=���1�~9�XA�]�ʳ5n�pP�3�y�=q�6�y@����k�_>l��G'u tb)�w�ck���\��JR8���*�{��* +�w��w&���@����O��(p�p�Z32�緈I�7�g���H~�[(N�0G��� +�#I�M�y�� +l2
I�z2��=`z!�]Y����C@�e�W|̥ +�˄�g�`�W;� +����ɒM����㇁��+N ��_\�40\om��jN��O },$��%p/��>5^�����,? +̫���~������q9$�< +H����4NQ>a��s��������7E����|�"6�|~aabT��E���M�d�b�q +��,����O9 +��z�NiЙi ���>Y{[�+�W�֯��,���A4[��k��8l�x�M�I�����%p�k: +�E��rP���k?�s���ԅ���� +�-�?� +���2.����_�//.�U�S�A3~r6W���F�L���ƞy_�H˃Ĺ�� �2p>���3tb�ٱ���m:�{g ���d�N��u +`3�Y�� +P��}.+�Z���@�"u���T +~)��U +��{�@��h�D�9̝X�~�΄_�/ ���X���)�,����B������ s�^�b �ػ�망ǽ3�/YX$ +X/��T + +ZF�d:� +�`~L��S�: +�0� @ fS +�23��&�|C���:�+�ߡ +�����~/z����U�{_>n����K� +� +{���W��X�����Q��e�Ss�'����ȏ�:�8슐�e��~\�����&�n�&������Uc�C�iC%��g�1�m"�<�5N��ޙ��uXj6P����n2�k�Ҁ�R +a=�!�̍W�<5�e�qC�y��>��\���#+����X +���z`?Dd�M2�|O�ոԛ��A}��b��1F(i���$��� n�%�//�o@}�p�&�gn�-���f�yЃ� +��,�ę"} +�:���_���s +���\(P��L@дf�#=�q +�o~�h+@�� +�q +��̖?�ǒ����a�|3 +���U��W��X{���a�$� ��c$�O�'�D�
���ћ��D=�f���7{�W�e|��vпa��ǽ3q�(�[ +}@���d�ŀ'; + +�8�F�L!��υ�߈�hW1�����|A��O#�1�� +�]D0��d���v�șze�����8�G4@ +5X P���r���J�r�x���� +���ߥ�G�Oi��]Z�8�
0�/��y%�K +����H{�2��Z"ϳ�r��BP��e�����������<���߮�]gӾE\�ߣ���2 +�!�p�������˿����Q�l�E�6d��J�U�@ + �s�M\�R�a��:,�hv�O�����S +�[%��� +bCw�}���s`���$04^����x*�]O�Q3ح��50��4��x��W�:|?���������������j�G4�V���1�Y��.�apbS|�t����O�����u������ٌ"����������� ������a�a��a3<�sz��J7�E?=mr�;P��� HO�V�VY��:�F)d:�c]N�t�w,,��qd96iݠ�t�� +��-:CpG�fm��ޜ���K���?S +�@���t��G����!J(gAW�[�5� +r +�T�����F!��lE��c��b�4D�6W# ���˙�����N�#He�O�y�� +�� +`�L8 +� ���4���}�T��8�
V�!�!p
�*�,�wX� +�\ �8.����N��g�{���3��9XQ��j����3��ģF�M~E��3ώ?��2�˝��|
��Zlbѿ�Īs +�����F��<>�-c�)���\��AD��1x�����~ħ.��b2 +-�d�G(���7^�cz��w�9 �-�t��R$�ɮ�!�?-�fBO�L< +s�Y @���� +w�W� �/��}�J����UƵ �Ik��@����P\k�R�ن��`�
���4�8��qh �Y�)����1E��9�ܹ�� +G�� +��� +�� +`u 8 +i�jX�~�}$��t@ڟ +P��&٧�4�(��(��5�U0��@w�l����{@�t�Ш +��+v:��5YH���$��+ä����_�X�I� +��K���C��� +����wS���wI����}�C�� �2��{���ګ����犽{Wz5�& +��8 +�9h��� +�j����~u睌�Ԉ�bK +@��Y�@� +�(hr�P�*1Fc& ����&�T�^�Tp�\r�G���H�H�����_�d +�i��/�T�V&�??99y� +XT_������kװ~���~uv�v�z߮��R� +�4W�%�H�������P@I +) +`�t�VWWAy��Az�9�5������:�����lnnm" ��.����ZOL2B���5o�9�MiP�(���x�a ��&��~���V�0M���+嶒Rlee����]i|g��� + +`,L�� +�?{)v: +���l�bbL���J +(^,��In���0e�7���N6���W�;�R +� +~֞�� +�E +�[o�i1�o)C�4=�r��������Z�����?���z6��߅��9 +�yG��@=l�5�FO�F���a�̈́�'���_�_�}����˧O�z���G�0�o܈����C�����n��G�w~���ᱭo���� �()4fc܁��Y>9�!<aMWk��qtpx�mQ��#!��a�߯1{
>�{g�$���L������W�ZP �t�ޭӥB2 + �MTV��D +�c�֍Z��Ԫ�6x�R��N�9�6f��{˺��8^K�/�A����^�ڥK�\��bۍ�<���� +��d���Z�*�A%�.���V��{�y��zu�W�5ϯ��\�M�0�����
w���w�Ї)��rf!�[�k�33�6S +�3w�k��i�@<BY����]= +�*��5���`���j߹�r���l���$�B�[�2��C�٭m +���]�K� +çO_�a�!�3�x����+����4���N +Eܣ��^˱-�J��J�a)l���"�Q�͖T���q��Q�X���3.R�����0<m:����U1 +� +��yu�m铳��|� �)~)������?�U�&�[m��2Ԕ-1�� +�)� +�����j �(��qh9�~�&O�y�_
�z +ֱ�`�8(���5�!�ﭔ�� ���J�Ee2��q�R� +��t +����1��l�oġU���n��2TTn���2\B��ކG1��̎��7�/��Kx�Eܺ�Z����6�L�*x�
*@TÛ8�
�*���{�f�g'����P#[���aw ���ڭ�u��`��$<�H� +��4 +�NDgiKRh� +Ua�l +�k�4 +l +�/� + +��@Z,?����s������ +P�9z����K����سS◘EyXm����kRd��E/X���O7�0w=q���Κ����9 +~�P��"� �0���I�C�(�(�_?��R +���� +@ M?�0
P&��
�M�e2�_��L +�����FI���1��po�߁�P�/�����Ύ3 +U��p���Y���+�%��O`1� +�o����hD�߿o���̤ڡ�����!�r�8��viM!_!�=� +o���.��q�����r�5�ƙ��"Q +����2A����-�Ax�o% +��Ҭ�!��}.-����ay���Np�.���JhOz����� +*�?��0A�ǖ(����D0Wɟ����'�z8~� +@���G?��'�0�4�� +�>y�e���i�W;"m���~�U�������O��F#~�4��W���Wo��px���_=y��ŗOvg����3ޮ����AƏÕp7?�����n�����G)�W"<�aߵ�<��� �y6gK����@9 +���7ߛo,ռ�7�J��Z͏^�v?�Y7�k���T�_�ިVggo�V�^mi�R�M^��U�G@
��c����`�_�Z`?E��_e���?_��gw?؝�������{��yܛ7���������p�la2���w�5VQ�O:}j8~c ݏ�L ,���,�N + +�~�~��$�� +�Þ�ac7 +�&�.��
������?��C3��>����?������R�Sܚ7{T��2����n��H����O��GK�%pO�ћ��d.W[j,5x�����7܄�m�k��*6����k��fZ��� +�#�����~���5�����O��W�@���[���vߗ% +P.�� +�_��_���?&���}�'*hS�w +��l�h��A0xfX�_�?ė��2[��&&@]��W�����Hu +������~�0�Z�!�8���$��ظ�C� +��ƁFq`� �]��
����~N�k
`�y +���߇ +��uyK�q1�@�� +�ĞW�( +� +�(�������ۿ�o������� ���Af + +��u���ŀ��`> �m���"&e�Sc�v�d1߽-��u~�T~��_3��������;)����o e���o~��k:t +a�/��NѪ�IKM�$�t�A ���D� + ,`�7�Hp�,��� +\����T�?����',Ya������.0:��� +�菘z�y +1���G��]l�g�o�������{����I����x�n< +�h�v�7�����X jK�Zc��˚��Eo5j�^n��ů��]L��S��X�@�8���^b=
�P�P֛�������8@�d������)p +x�;�㻐��=��̗Ģf�0� +� +{��E3p�w<s�y�B�Q +�X]og +�|�d���Y��OZ + +*~8F����8��a���u�L`��Z]�� +��c�A|���@�']D��n �4�I�4�� +�K!��
+��@,�0WS[BLL�S�5���?ym���_�S +�gY hac�!�l� +�_����J�b� ����9��|�e1z +�%x�4��\c����l�d[Fe +��,.h�066
�[ͬQ�n�3А�?��W�n2`"P�˿� +Ǐ�\�h�@pV~�@0Ax=+�Kh@.���D� +�AI +Jc�YD�Lb�c��� /� +|.�E� +�w��u�9�ק�tĹ��GK��LL����]� +���P�@��C3�"�K=q~�Ro�T��۪���vP���
H +R�GLK� +�s!D d>�=W��W?�c�?�M��R����?^ϒ +@�"`�@� +�*C#E�c�1�<��q x�# +�o! +����3� +@c);���19K�v +���F��A����=�|��./�`�o �KtDٺ@2��2�O��t�l�%m#z�
�F��k�i +�l��ͧg�G�o=����@��ζ�w�xbKI��/��bo + +0���6�p�)@"�"$�!)�x�[�'�c� h=`!A���W���sy�lр�+p�1ߡh�րH��~���#��f��Z�C�*��� +�8 +8i|=�Y^�:��O��Z����sG�����괋3����MD�����mu�3n�!�VV@
����N�)==�z;z%hm���r�ϲŶ;ъ���U�(�Z���~e���lu�#v�ϼ��ۧ;��c����ܺy;�;�9 +N/�� jE3�������`qW�s���16&����� �Hnn�݆Y8����Q@}��/L +�� +��O�J?m����t*h�gJ�)�����E�?�i4�0�l7��-M�Cʛ(� +|��������}�}8�[�mu��I�U|�#���#�_���Y�%�gxD�3{pv�9< +rth�GG���>�q��W���~�RS{�Z����1
��p( + +��>f��N�to4�����b_<��A8\ +x��q���j:�����} ������.e��]/���-�����w���/�EhE�F؞@0}��n����+����Pf �?�5_�2 +HR^'����9�cP��0V��Ab�2��"b?�Y0 �Si�$�X��g�s!@�����K�wk]� +����>Z�Sp���pG��e����i��3��*�YP1`����~�^��ӏ?bc�pnŊA�~y +�) +�9M}lcLt�~p_�+���M� +�Q�ʹ2誘(�3�U��� z v +��x҅}~�( +�u +��#���2�h��D�i�AZ�əw*N�.bZ,ǎ>\Na�����+������z?\�gb̍��.0 +�Ղ�n� + +P:EPr +J�N +���@�I� �~-'!k=�X���~+�TH���?�=v,c \�Y�`�`�@� +��e`�B�����b!�h�p +��@� +T��~$�>
7�����,BL�@� ��r�����Ky;1�t�,�瞚1 +��;���y! +�`�u��Ў�.� � + + +�#�ck�u�C�( +���^P�Z���W� +5X��0�: +�$@X��_[��A@�J�� ]R��Uy�E��; +�Ӆ�P�Q�]���|���������V�@��\�y +�X}�9lJ���S�v� +9J``�� +`����P8��z� �k� +��7��\��~R0"���� +Ӂ� +(���|d�T,N^�;��u��pp�0��Qz���48g�TxH����9p +���V¯
}��D"�=�S^t�&)��%HW�UЫ#�R��iG��q_G���8<7"@������K�(�;��� +@f~~�<o� S}@��9��D +_�;2 +�� /��K``���~U����dLYP���eG 0���������b���I +�-T�&�7�?9��}u_�p���ܤ;���}��w��@��I��Ã^��pĤ�9�c�Ȍ�1�1�c�]�`M@*@�$��O���.�! + +F������v{����������5d���V;��ׁ]����?���u:p�⎦�ۛ7o.���=�i����`P@(�������2 +���`�9H�� ����k)�u�q7l�#%?sbhh�9�3����� +P�����"�(b�3u''OON���Rp:(�;1�+�6�����^o�����O�;o�4X���`��p�2` + � +H��.���)`I�D +�Xkf���3���Z+_�_�$^��k.����� + + +���� ������.`>���k�Ѭ�@��#�BQ���S�^��`L�� +�hT���J����.P�^��#c��t�)�魠����Y� +�D}��X�U,����y��/����� ~��a��T�;�aH�H��ϲђ��իW] +| +\�g�NHβ��6P�h�fI��Ԃ��Z>�ҿ�u~}�9�L��A���� +@3̲p�E +�_�wH�Fp���
E8�a�LG�����R��,� +E��� + ��<4�`����ܜ��
�#�A.���>e��o� +��s^Cu.?B�S@T���{�S��f���i��R}��7V�!�����@ y�B۪�0�`y��{�����J� +�������kk�(���� S^��ڪz���;�=�m +�`��F9 +����\m���B�R�{�@ + +t + pc��V�urt�8�M���^( +��; +pA��ţ4)�ܓ�1���<����l�v�/�a*y:*Z �^y�8�$r�ڔ:�
L`�� ��*�� +����{��& +P�F9r�����<�� +��!� �Z�8�� +�' +6��l#t_p�3X,�O +�]���>IcKb�������?fF�'J7��^�,h6ևO������W�����E��a�� +p�Fn�EY�H����&��h�g�P�0�~���:�Σ +�ߊf��Bu��`�!w�o���F7f�q��ӳ���c� +��L��I��=� g����8 + ��ɲ�/\�<y����q�e�|||*hU��Z� +����\��v��Kk<���C�y +G�E��$ +�� +//p��3 R + +��,�����[�``2@��l���on_}��!�ŧ2x�o�� +�C�k��g��"P�ݧ���Up> +��; +v
p +p���{�t�I�S�9ܫ����7�
��$FF +���y�a�j�zf��� +Z�r +߽�cE q&
���}
+8�M0�>�oS���u쎹���aY� +�E��7�v3Z�:��p�pA�vmgs +{Q��"P��EK����s�~ ��� +�9�<@� �� +��9����/���KQ(?^�R��'�St�`�uZ$��/`3��ƨ���06�u���%�48�����?Y +�p�I�y��� +Q������R��G5M +����kz���\�B 32�I +�0i�Z�
)X +` +pw����3�< +��0�H�����] �c�n= + ����T@lF��.��N�vs diff --git a/examples/web/models/models_obj_viewer.html b/examples/web/models/models_obj_viewer.html new file mode 100644 index 0000000..00d7ab1 --- /dev/null +++ b/examples/web/models/models_obj_viewer.html @@ -0,0 +1 @@ +<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/games property=og:url><meta content=raylib.com property=og:site_name><meta content="New hmtl5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:url><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header_part{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(https://www.raylib.com/common/img/raylib_logo_64x64.png)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}#emscripten_logo{display:inline-block;margin:0}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:20px;width:30px}#controls{display:inline-block;float:right;vertical-align:top;margin-top:30px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}</style></head><body><div id=header_part><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value=Fullscreen></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault()></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function SaveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var t=document.querySelector("#output");return t&&(t.value=""),function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.log(e),t&&(t.value+=e+"\n",t.scrollTop=t.scrollHeight)}}(),printErr:function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()},!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Date.now()<30||(t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!1,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(e){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script src=models_obj_viewer.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_obj_viewer.js b/examples/web/models/models_obj_viewer.js new file mode 100644 index 0000000..6a3eb70 --- /dev/null +++ b/examples/web/models/models_obj_viewer.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_obj_viewer.data";var REMOTE_PACKAGE_BASE="models_obj_viewer.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);Module["FS_createPath"]("/resources","models",true,true);Module["FS_createPath"]("/resources","model",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i<files.length;++i){new DataRequest(files[i].start,files[i].end,files[i].audio).open("GET",files[i].filename)}function processPackageData(arrayBuffer){Module.finishedDataFileDownloads++;assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);var ptr=Module["getMemory"](byteArray.length);Module["HEAPU8"].set(byteArray,ptr);DataRequest.prototype.byteArray=Module["HEAPU8"].subarray(ptr,ptr+byteArray.length);var files=metadata.files;for(var i=0;i<files.length;++i){DataRequest.prototype.requests[files[i].filename].onload()}Module["removeRunDependency"]("datafile_models/models_obj_viewer.data")}Module["addRunDependency"]("datafile_models/models_obj_viewer.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[{"start":0,"audio":0,"end":57129,"filename":"/resources/models/turret.obj"},{"start":57129,"audio":0,"end":437664,"filename":"/resources/model/turret_diffuse.png"}],"remote_package_size":437664,"package_uuid":"2610609e-78cc-4392-9273-2e35438da530"})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];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 require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;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)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["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);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["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"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}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=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["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)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];type=singleType||types[i];if(type===0){i++;continue}if(type=="i64")type="i32";setValue(ret+i,curr,type);if(previousType!==type){typeSize=getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}function getMemory(size){if(!runtimeInitialized)return dynamicAlloc(size);return _malloc(size)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(u8Array[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=u8Array[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[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<str.length;++i){var u=str.charCodeAt(i);if(u>=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 allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__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(0)}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)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5279632,DYNAMICTOP_PTR=36720;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY<TOTAL_STACK)err("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+INITIAL_TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{if(typeof WebAssembly==="object"&&typeof WebAssembly.Memory==="function"){wasmMemory=new WebAssembly.Memory({"initial":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE});buffer=wasmMemory.buffer}else{buffer=new ArrayBuffer(INITIAL_TOTAL_MEMORY)}}updateGlobalBufferViews();HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();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 __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=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 ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}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"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_obj_viewer.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){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(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};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 ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}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)},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.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(19)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(6)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(6)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(5)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var isPosixPlatform=process.platform!="win32";var fd=process.stdin.fd;if(isPosixPlatform){var usingDevice=false;try{fd=fs.openSync("/dev/stdin","r");usingDevice=true}catch(e){}}try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(usingDevice){fs.closeSync(fd)}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}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(1)}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<node.usedBytes;++i)arr.push(node.contents[i]);return arr}return node.contents},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array;if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|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(new ArrayBuffer(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<newSize)node.contents.push(0);node.usedBytes=newSize},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[2]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(39)}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name]},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(39)}delete parent.contents[name]},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(22)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(22)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(12)}buffer.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var IDBFS={dbs:{},indexedDB:function(){if(typeof indexedDB!=="undefined")return indexedDB;var ret=null;if(typeof window==="object")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,"IDBFS used, but indexedDB not supported");return ret},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function(mount){return MEMFS.mount.apply(null,arguments)},syncfs:function(mount,populate,callback){IDBFS.getLocalSet(mount,function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},getDB:function(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback("Unable to connect to IndexedDB")}req.onupgradeneeded=function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}};req.onsuccess=function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db)};req.onerror=function(e){callback(this.error);e.preventDefault()}},getLocalSet:function(mount,callback){var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return function(p){return PATH.join2(root,p)}}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:"local",entries:entries})},getRemoteSet:function(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,function(err,db){if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=function(e){callback(this.error);e.preventDefault()};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db:db,entries:entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()}}catch(e){return callback(e)}})},loadLocalEntry:function(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error("node type not supported"))}},storeLocalEntry:function(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode)}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp)}catch(e){return callback(e)}callback(null)},removeLocalEntry:function(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:function(store,path,callback){var req=store.get(path);req.onsuccess=function(event){callback(null,event.target.result)};req.onerror=function(e){callback(this.error);e.preventDefault()}},storeRemoteEntry:function(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},removeRemoteEntry:function(store,path,callback){var req=store.delete(path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},reconcile:function(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join("/");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,parts[i],WORKERFS.DIR_MODE,0)}parent=createdParents[curr]}return parent}function base(path){var parts=path.split("/");return parts[parts.length-1]}Array.prototype.forEach.call(mount.opts["files"]||[],function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate)});(mount.opts["blobs"]||[]).forEach(function(obj){WORKERFS.createNode(ensureParent(obj["name"]),base(obj["name"]),WORKERFS.FILE_MODE,0,obj["data"])});(mount.opts["packages"]||[]).forEach(function(pack){pack["metadata"].files.forEach(function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack["blob"].slice(file.start,file.end))})});return root},createNode:function(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents}else{node.size=4096;node.contents={}}if(parent){parent.contents[name]=node}return node},node_ops:{getattr:function(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)}},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}},lookup:function(parent,name){throw new FS.ErrnoError(2)},mknod:function(parent,name,mode,dev){throw new FS.ErrnoError(1)},rename:function(oldNode,newDir,newName){throw new FS.ErrnoError(1)},unlink:function(parent,name){throw new FS.ErrnoError(1)},rmdir:function(parent,name){throw new FS.ErrnoError(1)},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newName,oldPath){throw new FS.ErrnoError(1)},readlink:function(node){throw new FS.ErrnoError(1)}},stream_ops:{read:function(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(40)}}}}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<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>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 err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,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){if(!FS.FSNode){FS.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};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.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)}}})}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 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}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 err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}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(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}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(29)}},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){console.log("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(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}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(16)}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(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}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(22)}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(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}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;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=17)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(2)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(2)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(1)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(16)}if(!old_dir||!new_dir)throw new FS.ErrnoError(2);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(18)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(22)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(39)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(1)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(16)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(20)}return node.node_ops.readdir(node)},unlink:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(2)}if(!link.node_ops.readlink){throw new FS.ErrnoError(22)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(2)}if(!node.node_ops.getattr){throw new FS.ErrnoError(1)}return node.node_ops.getattr(node)},lstat:function(path){return FS.stat(path,true)},chmod:function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chmod(stream.node,mode)},chown:function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chown(stream.node,uid,gid)},truncate:function(path,len){if(len<0){throw new FS.ErrnoError(22)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(21)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(22)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(22)}FS.truncate(stream.node,len)},utime:function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(2)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(17)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(2)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;console.log("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:function(stream){return stream.fd===null},llseek:function(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(29)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(22)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.read){throw new FS.ErrnoError(22)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.write){throw new FS.ErrnoError(22)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(offset<0||length<=0){throw new FS.ErrnoError(22)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(19)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(95)}stream.stream_ops.allocate(stream,offset,length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(13)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(19)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(25)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:function(path,data,opts){opts=opts||{};opts.flags=opts.flags||"w";var stream=FS.open(path,opts.flags,opts.mode);if(typeof data==="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:function(){return FS.currentPath},chdir:function(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(2)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(20)}var err=FS.nodePermissions(lookup.node,"x");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path},createDefaultDirectories:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return length}});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device;if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);random_device=function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");random_device=function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}else{}if(!random_device){random_device=function(){abort("random_device")}}FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode("/proc/self","fd",16384|511,73);node.node_ops={lookup:function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(9);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin","r");var stdout=FS.open("/dev/stdout","w");var stderr=FS.open("/dev/stderr","w")},ensureErrnoError:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error";if(this.stack)Object.defineProperty(this,"stack",{value:(new Error).stack,writable:true})};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[2].forEach(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS}},init:function(input,output,error){FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},joinPath:function(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]=="/")path=path.substr(1);return path},absolutePath:function(relative,base){return PATH.resolve(base,relative)},standardizePath:function(path){return PATH.normalize(path)},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{___setErrNo(ret.error);return null}},analyzePath:function(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createFolder:function(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode)},createPath:function(parent,path,canRead,canWrite){parent=typeof parent==="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:function(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data==="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,"w");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(5)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},createLink:function(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);return FS.symlink(target,path)},forceLoadFile:function(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!=="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(Module["read"]){try{obj.contents=intArrayFromString(Module["read"](obj.url),true);obj.usedBytes=obj.contents.length}catch(e){success=false}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}if(!success)___setErrNo(5);return success},createLazyFile:function(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=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;console.log("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(5)}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(5)}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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function(dirfd,path){if(path[0]!=="/"){var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path}path=PATH.join2(dir,path)}return path},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR}throw e}HEAP32[buf>>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){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,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-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;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-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}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<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;if(typeof SDL==="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["preloadPlugins"].push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("warning: browser could not fully decode audio "+name+", trying slower base64 approach");function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};var EGL={errorCode:12288,defaultDisplayInitialized:false,currentContext:0,currentReadSurface:0,currentDrawSurface:0,contextAttributes:{alpha:false,depth:false,stencil:false,antialias:false},stringCache:{},setErrorCode:function(code){EGL.errorCode=code},chooseConfig:function(display,attribList,config,config_size,numConfigs){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(attribList){for(;;){var param=HEAP32[attribList>>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(this,call.argsList)}},inEventHandler:0,currentEventHandler:null,eventHandlers:[],isInternetExplorer:function(){return navigator.userAgent.indexOf("MSIE")!==-1||navigator.appVersion.indexOf("Trident/")>0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getBoundingClientRectOrZeros:function(target){return target.getBoundingClientRect?target.getBoundingClientRect():{left:0,top:0}},pageScrollPos:function(){if(window.pageXOffset>0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i<GL.MINI_TEMP_BUFFER_SIZE;i++){GL.miniTempBufferViews[i]=GL.miniTempBuffer.subarray(0,i+1)}},recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i<ret;i++){table[i]=null}return ret},MINI_TEMP_BUFFER_SIZE:256,miniTempBuffer:null,miniTempBufferViews:[0],getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i<result.length;++i){switch(type){case"Integer":HEAP32[p+i*4>>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[location]);if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i<e.touches.length;++i){var touch=e.touches[i];touches[touch.identifier]=touch}for(var i=0;i<e.changedTouches.length;++i){var touch=e.changedTouches[i];touches[touch.identifier]=touch;touch.changed=true}for(var i=0;i<e.targetTouches.length;++i){var touch=e.targetTouches[i];touches[touch.identifier].onTarget=true}var touchEvent=JSEvents.touchEvent;var ptr=touchEvent;HEAP32[ptr+4>>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;dynCall_vidd(GLFW.active.cursorPosFunc,GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;dynCall_viiii(GLFW.active.mouseButtonFunc,GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),"i8",ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),"i8",ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),"float",ALLOC_NORMAL)};if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.keyFunc=cbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.charFunc=cbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.mouseButtonFunc=cbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorPosFunc=cbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.scrollFunc=cbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.dropFunc=cbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowSizeFunc=cbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowCloseFunc=cbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowRefreshFunc=cbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++);if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++);if(i==GLFW.windows.length){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetCursorPos(winid,x,y){GLFW.getCursorPos(winid,x,y)}function _glfwGetKey(winid,key){return GLFW.getKey(winid,key)}function _glfwGetMouseButton(winid,button){return GLFW.getMouseButton(winid,button)}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorEnterFunc=cbfun}function _glfwSetCursorPosCallback(winid,cbfun){GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){GLFW.errorFunc=cbfun}function _glfwSetKeyCallback(winid,cbfun){GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowIconifyFunc=cbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _llvm_stackrestore(p){var self=_llvm_stacksave;var ret=self.LLVM_SAVEDSTACKS[p];self.LLVM_SAVEDSTACKS.splice(p,1);stackRestore(ret)}function _llvm_stacksave(){var self=_llvm_stacksave;if(!self.LLVM_SAVEDSTACKS){self.LLVM_SAVEDSTACKS=[]}self.LLVM_SAVEDSTACKS.push(stackSave());return self.LLVM_SAVEDSTACKS.length-1}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function _usleep(useconds){var msec=useconds/1e3;if((ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self["performance"]&&self["performance"]["now"]){var start=self["performance"]["now"]();while(self["performance"]["now"]()-start<msec){}}else{var start=Date.now();while(Date.now()-start<msec){}}return 0}function _nanosleep(rqtp,rmtp){var seconds=HEAP32[rqtp>>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));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 asmGlobalArg={};var asmLibraryArg={"d":abort,"b":___assert_fail,"qc":___lock,"F":___setErrNo,"fb":___syscall140,"Wa":___syscall145,"E":___syscall146,"q":___syscall221,"ra":___syscall5,"D":___syscall54,"Y":___syscall6,"C":___unlock,"B":_eglGetProcAddress,"X":_emscripten_exit_pointerlock,"vd":_emscripten_get_gamepad_status,"kd":_emscripten_get_heap_size,"$c":_emscripten_get_num_gamepads,"W":_emscripten_get_pointerlock_status,"Gc":_emscripten_glActiveTexture,"wc":_emscripten_glAttachShader,"pc":_emscripten_glBeginQueryEXT,"ic":_emscripten_glBindAttribLocation,"fc":_emscripten_glBindBuffer,"ac":_emscripten_glBindFramebuffer,"Vb":_emscripten_glBindRenderbuffer,"Qb":_emscripten_glBindTexture,"Gb":_emscripten_glBindVertexArrayOES,"vb":_emscripten_glBlendColor,"rb":_emscripten_glBlendEquation,"qb":_emscripten_glBlendEquationSeparate,"pb":_emscripten_glBlendFunc,"ob":_emscripten_glBlendFuncSeparate,"nb":_emscripten_glBufferData,"mb":_emscripten_glBufferSubData,"lb":_emscripten_glCheckFramebufferStatus,"kb":_emscripten_glClear,"jb":_emscripten_glClearColor,"ib":_emscripten_glClearDepthf,"hb":_emscripten_glClearStencil,"gb":_emscripten_glColorMask,"eb":_emscripten_glCompileShader,"db":_emscripten_glCompressedTexImage2D,"cb":_emscripten_glCompressedTexSubImage2D,"bb":_emscripten_glCopyTexImage2D,"ab":_emscripten_glCopyTexSubImage2D,"$a":_emscripten_glCreateProgram,"_a":_emscripten_glCreateShader,"Za":_emscripten_glCullFace,"Ya":_emscripten_glDeleteBuffers,"Xa":_emscripten_glDeleteFramebuffers,"Va":_emscripten_glDeleteProgram,"Ua":_emscripten_glDeleteQueriesEXT,"Ta":_emscripten_glDeleteRenderbuffers,"Sa":_emscripten_glDeleteShader,"Ra":_emscripten_glDeleteTextures,"Qa":_emscripten_glDeleteVertexArraysOES,"Pa":_emscripten_glDepthFunc,"Oa":_emscripten_glDepthMask,"Na":_emscripten_glDepthRangef,"Ma":_emscripten_glDetachShader,"La":_emscripten_glDisable,"Ka":_emscripten_glDisableVertexAttribArray,"Ja":_emscripten_glDrawArrays,"Ia":_emscripten_glDrawArraysInstancedANGLE,"Ha":_emscripten_glDrawBuffersWEBGL,"Ga":_emscripten_glDrawElements,"Fa":_emscripten_glDrawElementsInstancedANGLE,"Ea":_emscripten_glEnable,"Da":_emscripten_glEnableVertexAttribArray,"Ca":_emscripten_glEndQueryEXT,"Ba":_emscripten_glFinish,"Aa":_emscripten_glFlush,"za":_emscripten_glFramebufferRenderbuffer,"ya":_emscripten_glFramebufferTexture2D,"xa":_emscripten_glFrontFace,"wa":_emscripten_glGenBuffers,"va":_emscripten_glGenFramebuffers,"ua":_emscripten_glGenQueriesEXT,"ta":_emscripten_glGenRenderbuffers,"sa":_emscripten_glGenTextures,"qa":_emscripten_glGenVertexArraysOES,"pa":_emscripten_glGenerateMipmap,"oa":_emscripten_glGetActiveAttrib,"na":_emscripten_glGetActiveUniform,"ma":_emscripten_glGetAttachedShaders,"la":_emscripten_glGetAttribLocation,"ka":_emscripten_glGetBooleanv,"ja":_emscripten_glGetBufferParameteriv,"ia":_emscripten_glGetError,"ha":_emscripten_glGetFloatv,"ga":_emscripten_glGetFramebufferAttachmentParameteriv,"fa":_emscripten_glGetIntegerv,"ea":_emscripten_glGetProgramInfoLog,"da":_emscripten_glGetProgramiv,"ca":_emscripten_glGetQueryObjecti64vEXT,"ba":_emscripten_glGetQueryObjectivEXT,"aa":_emscripten_glGetQueryObjectui64vEXT,"$":_emscripten_glGetQueryObjectuivEXT,"_":_emscripten_glGetQueryivEXT,"Z":_emscripten_glGetRenderbufferParameteriv,"he":_emscripten_glGetShaderInfoLog,"ge":_emscripten_glGetShaderPrecisionFormat,"fe":_emscripten_glGetShaderSource,"ee":_emscripten_glGetShaderiv,"de":_emscripten_glGetString,"ce":_emscripten_glGetTexParameterfv,"be":_emscripten_glGetTexParameteriv,"ae":_emscripten_glGetUniformLocation,"$d":_emscripten_glGetUniformfv,"_d":_emscripten_glGetUniformiv,"Zd":_emscripten_glGetVertexAttribPointerv,"Yd":_emscripten_glGetVertexAttribfv,"Xd":_emscripten_glGetVertexAttribiv,"Wd":_emscripten_glHint,"Vd":_emscripten_glIsBuffer,"Ud":_emscripten_glIsEnabled,"Td":_emscripten_glIsFramebuffer,"Sd":_emscripten_glIsProgram,"Rd":_emscripten_glIsQueryEXT,"Qd":_emscripten_glIsRenderbuffer,"Pd":_emscripten_glIsShader,"Od":_emscripten_glIsTexture,"Nd":_emscripten_glIsVertexArrayOES,"Md":_emscripten_glLineWidth,"Ld":_emscripten_glLinkProgram,"Kd":_emscripten_glPixelStorei,"Jd":_emscripten_glPolygonOffset,"Id":_emscripten_glQueryCounterEXT,"Hd":_emscripten_glReadPixels,"Gd":_emscripten_glReleaseShaderCompiler,"Fd":_emscripten_glRenderbufferStorage,"Ed":_emscripten_glSampleCoverage,"Dd":_emscripten_glScissor,"Cd":_emscripten_glShaderBinary,"Bd":_emscripten_glShaderSource,"Ad":_emscripten_glStencilFunc,"zd":_emscripten_glStencilFuncSeparate,"yd":_emscripten_glStencilMask,"xd":_emscripten_glStencilMaskSeparate,"wd":_emscripten_glStencilOp,"ud":_emscripten_glStencilOpSeparate,"td":_emscripten_glTexImage2D,"sd":_emscripten_glTexParameterf,"rd":_emscripten_glTexParameterfv,"qd":_emscripten_glTexParameteri,"pd":_emscripten_glTexParameteriv,"od":_emscripten_glTexSubImage2D,"nd":_emscripten_glUniform1f,"md":_emscripten_glUniform1fv,"ld":_emscripten_glUniform1i,"jd":_emscripten_glUniform1iv,"id":_emscripten_glUniform2f,"hd":_emscripten_glUniform2fv,"gd":_emscripten_glUniform2i,"fd":_emscripten_glUniform2iv,"ed":_emscripten_glUniform3f,"dd":_emscripten_glUniform3fv,"cd":_emscripten_glUniform3i,"bd":_emscripten_glUniform3iv,"ad":_emscripten_glUniform4f,"_c":_emscripten_glUniform4fv,"Zc":_emscripten_glUniform4i,"Yc":_emscripten_glUniform4iv,"Xc":_emscripten_glUniformMatrix2fv,"Wc":_emscripten_glUniformMatrix3fv,"Vc":_emscripten_glUniformMatrix4fv,"Uc":_emscripten_glUseProgram,"Tc":_emscripten_glValidateProgram,"Sc":_emscripten_glVertexAttrib1f,"Rc":_emscripten_glVertexAttrib1fv,"Qc":_emscripten_glVertexAttrib2f,"Pc":_emscripten_glVertexAttrib2fv,"Oc":_emscripten_glVertexAttrib3f,"Nc":_emscripten_glVertexAttrib3fv,"Mc":_emscripten_glVertexAttrib4f,"Lc":_emscripten_glVertexAttrib4fv,"Kc":_emscripten_glVertexAttribDivisorANGLE,"Jc":_emscripten_glVertexAttribPointer,"Ic":_emscripten_glViewport,"Hc":_emscripten_memcpy_big,"Fc":_emscripten_request_pointerlock,"Ec":_emscripten_resize_heap,"V":_emscripten_run_script,"Dc":_emscripten_sample_gamepad_data,"Cc":_emscripten_set_click_callback_on_thread,"Bc":_emscripten_set_fullscreenchange_callback_on_thread,"Ac":_emscripten_set_gamepadconnected_callback_on_thread,"zc":_emscripten_set_gamepaddisconnected_callback_on_thread,"yc":_emscripten_set_keypress_callback_on_thread,"xc":_emscripten_set_main_loop,"vc":_emscripten_set_touchcancel_callback_on_thread,"uc":_emscripten_set_touchend_callback_on_thread,"tc":_emscripten_set_touchmove_callback_on_thread,"sc":_emscripten_set_touchstart_callback_on_thread,"rc":_exit,"A":_glActiveTexture,"U":_glAttachShader,"n":_glBindAttribLocation,"c":_glBindBuffer,"j":_glBindTexture,"oc":_glBlendFunc,"h":_glBufferData,"z":_glBufferSubData,"T":_glClear,"S":_glClearColor,"nc":_glClearDepthf,"mc":_glCompileShader,"lc":_glCompressedTexImage2D,"kc":_glCreateProgram,"jc":_glCreateShader,"hc":_glCullFace,"p":_glDeleteBuffers,"y":_glDeleteProgram,"R":_glDeleteShader,"Q":_glDeleteTextures,"gc":_glDepthFunc,"P":_glDetachShader,"O":_glDisable,"i":_glDisableVertexAttribArray,"N":_glDrawArrays,"M":_glDrawElements,"x":_glEnable,"f":_glEnableVertexAttribArray,"ec":_glFrontFace,"g":_glGenBuffers,"dc":_glGenTextures,"w":_glGetAttribLocation,"cc":_glGetFloatv,"bc":_glGetProgramInfoLog,"L":_glGetProgramiv,"$b":_glGetShaderInfoLog,"K":_glGetShaderiv,"o":_glGetString,"v":_glGetUniformLocation,"_b":_glLinkProgram,"Zb":_glPixelStorei,"Yb":_glReadPixels,"Xb":_glShaderSource,"Wb":_glTexImage2D,"m":_glTexParameteri,"J":_glUniform1i,"u":_glUniform4f,"t":_glUniformMatrix4fv,"l":_glUseProgram,"Ub":_glVertexAttrib2f,"Tb":_glVertexAttrib3f,"s":_glVertexAttrib4f,"e":_glVertexAttribPointer,"Sb":_glViewport,"Rb":_glfwCreateWindow,"Pb":_glfwDefaultWindowHints,"Ob":_glfwDestroyWindow,"Nb":_glfwGetCursorPos,"Mb":_glfwGetKey,"Lb":_glfwGetMouseButton,"r":_glfwGetTime,"Kb":_glfwInit,"Jb":_glfwMakeContextCurrent,"Ib":_glfwSetCharCallback,"Hb":_glfwSetCursorEnterCallback,"Fb":_glfwSetCursorPosCallback,"Eb":_glfwSetDropCallback,"Db":_glfwSetErrorCallback,"Cb":_glfwSetKeyCallback,"Bb":_glfwSetMouseButtonCallback,"Ab":_glfwSetScrollCallback,"zb":_glfwSetWindowIconifyCallback,"yb":_glfwSetWindowShouldClose,"xb":_glfwSetWindowSizeCallback,"wb":_glfwSwapBuffers,"I":_glfwTerminate,"k":_glfwWindowHint,"H":_llvm_stackrestore,"G":_llvm_stacksave,"ub":_nanosleep,"tb":_time,"sb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["we"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i<argc;i++){HEAP32[(argv>>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_obj_viewer.wasm b/examples/web/models/models_obj_viewer.wasm Binary files differnew file mode 100644 index 0000000..b47cd53 --- /dev/null +++ b/examples/web/models/models_obj_viewer.wasm diff --git a/examples/web/models/models_orthographic_projection.c b/examples/web/models/models_orthographic_projection.c index b2c1c9e..1b1f0f6 100644 --- a/examples/web/models/models_orthographic_projection.c +++ b/examples/web/models/models_orthographic_projection.c @@ -1,6 +1,6 @@ /******************************************************************************************* * -* raylib [models] example - Show the difference between perspective and orthographic projection +* raylib [models] example - Show the difference between perspective and orthographic projection * * This program is heavily based on the geometric objects example * @@ -40,7 +40,7 @@ void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- // Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -54,7 +54,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -77,14 +77,14 @@ void UpdateDrawFrame(void) { // Update //---------------------------------------------------------------------------------- - if (IsKeyPressed(KEY_SPACE)) + if (IsKeyPressed(KEY_SPACE)) { - if (camera.type == CAMERA_PERSPECTIVE) + if (camera.type == CAMERA_PERSPECTIVE) { camera.fovy = WIDTH_ORTHOGRAPHIC; camera.type = CAMERA_ORTHOGRAPHIC; - } - else + } + else { camera.fovy = FOVY_PERSPECTIVE; camera.type = CAMERA_PERSPECTIVE; diff --git a/examples/web/models/models_orthographic_projection.html b/examples/web/models/models_orthographic_projection.html new file mode 100644 index 0000000..6cf3721 --- /dev/null +++ b/examples/web/models/models_orthographic_projection.html @@ -0,0 +1 @@ +<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/games property=og:url><meta content=raylib.com property=og:site_name><meta content="New hmtl5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:url><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header_part{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(https://www.raylib.com/common/img/raylib_logo_64x64.png)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}#emscripten_logo{display:inline-block;margin:0}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:20px;width:30px}#controls{display:inline-block;float:right;vertical-align:top;margin-top:30px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}</style></head><body><div id=header_part><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value=Fullscreen></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault()></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function SaveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var t=document.querySelector("#output");return t&&(t.value=""),function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.log(e),t&&(t.value+=e+"\n",t.scrollTop=t.scrollHeight)}}(),printErr:function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()},!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Date.now()<30||(t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!1,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(e){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script src=models_orthographic_projection.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_orthographic_projection.js b/examples/web/models/models_orthographic_projection.js new file mode 100644 index 0000000..c790309 --- /dev/null +++ b/examples/web/models/models_orthographic_projection.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];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 require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;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)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["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);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["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"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}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=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["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)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];type=singleType||types[i];if(type===0){i++;continue}if(type=="i64")type="i32";setValue(ret+i,curr,type);if(previousType!==type){typeSize=getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(u8Array[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=u8Array[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[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<str.length;++i){var u=str.charCodeAt(i);if(u>=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 allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__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(0)}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)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5270720,DYNAMICTOP_PTR=27808;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY<TOTAL_STACK)err("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+INITIAL_TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{if(typeof WebAssembly==="object"&&typeof WebAssembly.Memory==="function"){wasmMemory=new WebAssembly.Memory({"initial":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE});buffer=wasmMemory.buffer}else{buffer=new ArrayBuffer(INITIAL_TOTAL_MEMORY)}}updateGlobalBufferViews();HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();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 __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=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 ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}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"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_orthographic_projection.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){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(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};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 ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}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)},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.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(19)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(6)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(6)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(5)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var isPosixPlatform=process.platform!="win32";var fd=process.stdin.fd;if(isPosixPlatform){var usingDevice=false;try{fd=fs.openSync("/dev/stdin","r");usingDevice=true}catch(e){}}try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(usingDevice){fs.closeSync(fd)}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}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(1)}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<node.usedBytes;++i)arr.push(node.contents[i]);return arr}return node.contents},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array;if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|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(new ArrayBuffer(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<newSize)node.contents.push(0);node.usedBytes=newSize},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[2]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(39)}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name]},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(39)}delete parent.contents[name]},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(22)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(22)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(12)}buffer.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var IDBFS={dbs:{},indexedDB:function(){if(typeof indexedDB!=="undefined")return indexedDB;var ret=null;if(typeof window==="object")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,"IDBFS used, but indexedDB not supported");return ret},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function(mount){return MEMFS.mount.apply(null,arguments)},syncfs:function(mount,populate,callback){IDBFS.getLocalSet(mount,function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},getDB:function(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback("Unable to connect to IndexedDB")}req.onupgradeneeded=function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}};req.onsuccess=function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db)};req.onerror=function(e){callback(this.error);e.preventDefault()}},getLocalSet:function(mount,callback){var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return function(p){return PATH.join2(root,p)}}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:"local",entries:entries})},getRemoteSet:function(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,function(err,db){if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=function(e){callback(this.error);e.preventDefault()};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db:db,entries:entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()}}catch(e){return callback(e)}})},loadLocalEntry:function(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error("node type not supported"))}},storeLocalEntry:function(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode)}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp)}catch(e){return callback(e)}callback(null)},removeLocalEntry:function(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:function(store,path,callback){var req=store.get(path);req.onsuccess=function(event){callback(null,event.target.result)};req.onerror=function(e){callback(this.error);e.preventDefault()}},storeRemoteEntry:function(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},removeRemoteEntry:function(store,path,callback){var req=store.delete(path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},reconcile:function(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join("/");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,parts[i],WORKERFS.DIR_MODE,0)}parent=createdParents[curr]}return parent}function base(path){var parts=path.split("/");return parts[parts.length-1]}Array.prototype.forEach.call(mount.opts["files"]||[],function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate)});(mount.opts["blobs"]||[]).forEach(function(obj){WORKERFS.createNode(ensureParent(obj["name"]),base(obj["name"]),WORKERFS.FILE_MODE,0,obj["data"])});(mount.opts["packages"]||[]).forEach(function(pack){pack["metadata"].files.forEach(function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack["blob"].slice(file.start,file.end))})});return root},createNode:function(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents}else{node.size=4096;node.contents={}}if(parent){parent.contents[name]=node}return node},node_ops:{getattr:function(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)}},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}},lookup:function(parent,name){throw new FS.ErrnoError(2)},mknod:function(parent,name,mode,dev){throw new FS.ErrnoError(1)},rename:function(oldNode,newDir,newName){throw new FS.ErrnoError(1)},unlink:function(parent,name){throw new FS.ErrnoError(1)},rmdir:function(parent,name){throw new FS.ErrnoError(1)},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newName,oldPath){throw new FS.ErrnoError(1)},readlink:function(node){throw new FS.ErrnoError(1)}},stream_ops:{read:function(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(40)}}}}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<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>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 err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,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){if(!FS.FSNode){FS.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};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.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)}}})}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 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}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 err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}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(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}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(29)}},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){console.log("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(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}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(16)}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(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}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(22)}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(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}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;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=17)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(2)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(2)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(1)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(16)}if(!old_dir||!new_dir)throw new FS.ErrnoError(2);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(18)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(22)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(39)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(1)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(16)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(20)}return node.node_ops.readdir(node)},unlink:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(2)}if(!link.node_ops.readlink){throw new FS.ErrnoError(22)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(2)}if(!node.node_ops.getattr){throw new FS.ErrnoError(1)}return node.node_ops.getattr(node)},lstat:function(path){return FS.stat(path,true)},chmod:function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chmod(stream.node,mode)},chown:function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chown(stream.node,uid,gid)},truncate:function(path,len){if(len<0){throw new FS.ErrnoError(22)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(21)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(22)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(22)}FS.truncate(stream.node,len)},utime:function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(2)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(17)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(2)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;console.log("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:function(stream){return stream.fd===null},llseek:function(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(29)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(22)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.read){throw new FS.ErrnoError(22)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.write){throw new FS.ErrnoError(22)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(offset<0||length<=0){throw new FS.ErrnoError(22)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(19)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(95)}stream.stream_ops.allocate(stream,offset,length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(13)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(19)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(25)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:function(path,data,opts){opts=opts||{};opts.flags=opts.flags||"w";var stream=FS.open(path,opts.flags,opts.mode);if(typeof data==="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:function(){return FS.currentPath},chdir:function(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(2)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(20)}var err=FS.nodePermissions(lookup.node,"x");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path},createDefaultDirectories:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return length}});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device;if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);random_device=function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");random_device=function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}else{}if(!random_device){random_device=function(){abort("random_device")}}FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode("/proc/self","fd",16384|511,73);node.node_ops={lookup:function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(9);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin","r");var stdout=FS.open("/dev/stdout","w");var stderr=FS.open("/dev/stderr","w")},ensureErrnoError:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error";if(this.stack)Object.defineProperty(this,"stack",{value:(new Error).stack,writable:true})};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[2].forEach(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS}},init:function(input,output,error){FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},joinPath:function(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]=="/")path=path.substr(1);return path},absolutePath:function(relative,base){return PATH.resolve(base,relative)},standardizePath:function(path){return PATH.normalize(path)},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{___setErrNo(ret.error);return null}},analyzePath:function(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createFolder:function(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode)},createPath:function(parent,path,canRead,canWrite){parent=typeof parent==="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:function(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data==="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,"w");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(5)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},createLink:function(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);return FS.symlink(target,path)},forceLoadFile:function(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!=="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(Module["read"]){try{obj.contents=intArrayFromString(Module["read"](obj.url),true);obj.usedBytes=obj.contents.length}catch(e){success=false}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}if(!success)___setErrNo(5);return success},createLazyFile:function(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=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;console.log("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(5)}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(5)}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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function(dirfd,path){if(path[0]!=="/"){var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path}path=PATH.join2(dir,path)}return path},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR}throw e}HEAP32[buf>>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){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,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-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;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-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}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<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;if(typeof SDL==="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["preloadPlugins"].push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("warning: browser could not fully decode audio "+name+", trying slower base64 approach");function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};var EGL={errorCode:12288,defaultDisplayInitialized:false,currentContext:0,currentReadSurface:0,currentDrawSurface:0,contextAttributes:{alpha:false,depth:false,stencil:false,antialias:false},stringCache:{},setErrorCode:function(code){EGL.errorCode=code},chooseConfig:function(display,attribList,config,config_size,numConfigs){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(attribList){for(;;){var param=HEAP32[attribList>>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(this,call.argsList)}},inEventHandler:0,currentEventHandler:null,eventHandlers:[],isInternetExplorer:function(){return navigator.userAgent.indexOf("MSIE")!==-1||navigator.appVersion.indexOf("Trident/")>0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getBoundingClientRectOrZeros:function(target){return target.getBoundingClientRect?target.getBoundingClientRect():{left:0,top:0}},pageScrollPos:function(){if(window.pageXOffset>0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i<GL.MINI_TEMP_BUFFER_SIZE;i++){GL.miniTempBufferViews[i]=GL.miniTempBuffer.subarray(0,i+1)}},recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i<ret;i++){table[i]=null}return ret},MINI_TEMP_BUFFER_SIZE:256,miniTempBuffer:null,miniTempBufferViews:[0],getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i<result.length;++i){switch(type){case"Integer":HEAP32[p+i*4>>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[location]);if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i<e.touches.length;++i){var touch=e.touches[i];touches[touch.identifier]=touch}for(var i=0;i<e.changedTouches.length;++i){var touch=e.changedTouches[i];touches[touch.identifier]=touch;touch.changed=true}for(var i=0;i<e.targetTouches.length;++i){var touch=e.targetTouches[i];touches[touch.identifier].onTarget=true}var touchEvent=JSEvents.touchEvent;var ptr=touchEvent;HEAP32[ptr+4>>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;dynCall_vidd(GLFW.active.cursorPosFunc,GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;dynCall_viiii(GLFW.active.mouseButtonFunc,GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),"i8",ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),"i8",ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),"float",ALLOC_NORMAL)};if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.keyFunc=cbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.charFunc=cbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.mouseButtonFunc=cbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorPosFunc=cbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.scrollFunc=cbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.dropFunc=cbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowSizeFunc=cbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowCloseFunc=cbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowRefreshFunc=cbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++);if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++);if(i==GLFW.windows.length){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetCursorPos(winid,x,y){GLFW.getCursorPos(winid,x,y)}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorEnterFunc=cbfun}function _glfwSetCursorPosCallback(winid,cbfun){GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){GLFW.errorFunc=cbfun}function _glfwSetKeyCallback(winid,cbfun){GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowIconifyFunc=cbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _llvm_stackrestore(p){var self=_llvm_stacksave;var ret=self.LLVM_SAVEDSTACKS[p];self.LLVM_SAVEDSTACKS.splice(p,1);stackRestore(ret)}function _llvm_stacksave(){var self=_llvm_stacksave;if(!self.LLVM_SAVEDSTACKS){self.LLVM_SAVEDSTACKS=[]}self.LLVM_SAVEDSTACKS.push(stackSave());return self.LLVM_SAVEDSTACKS.length-1}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function _usleep(useconds){var msec=useconds/1e3;if((ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self["performance"]&&self["performance"]["now"]){var start=self["performance"]["now"]();while(self["performance"]["now"]()-start<msec){}}else{var start=Date.now();while(Date.now()-start<msec){}}return 0}function _nanosleep(rqtp,rmtp){var seconds=HEAP32[rqtp>>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));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 asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"l":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"_b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Eb":_emscripten_glBindTexture,"ub":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"O":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"N":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"ac":_glDepthFunc,"H":_glDetachShader,"G":_glDisable,"o":_glDisableVertexAttribArray,"$b":_glDrawArrays,"Zb":_glDrawElements,"u":_glEnable,"h":_glEnableVertexAttribArray,"Yb":_glFrontFace,"n":_glGenBuffers,"Xb":_glGenTextures,"t":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"E":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"g":_glTexParameteri,"Mb":_glUniform1i,"Lb":_glUniform4f,"Kb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Jb":_glViewport,"Ib":_glfwCreateWindow,"Hb":_glfwDefaultWindowHints,"Gb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"m":_glfwGetTime,"Db":_glfwInit,"Cb":_glfwMakeContextCurrent,"Bb":_glfwSetCharCallback,"Ab":_glfwSetCursorEnterCallback,"zb":_glfwSetCursorPosCallback,"yb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"wb":_glfwSetKeyCallback,"vb":_glfwSetMouseButtonCallback,"tb":_glfwSetScrollCallback,"sb":_glfwSetWindowIconifyCallback,"rb":_glfwSetWindowShouldClose,"qb":_glfwSetWindowSizeCallback,"pb":_glfwSwapBuffers,"D":_glfwTerminate,"e":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"ob":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i<argc;i++){HEAP32[(argv>>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_orthographic_projection.wasm b/examples/web/models/models_orthographic_projection.wasm Binary files differnew file mode 100644 index 0000000..e6c357e --- /dev/null +++ b/examples/web/models/models_orthographic_projection.wasm diff --git a/examples/web/models/models_rlgl_solar_system.c b/examples/web/models/models_rlgl_solar_system.c index b3f646a..9883857 100644 --- a/examples/web/models/models_rlgl_solar_system.c +++ b/examples/web/models/models_rlgl_solar_system.c @@ -51,7 +51,7 @@ void DrawSphereBasic(Color color); // Draw sphere without any matrix transf //---------------------------------------------------------------------------------- // Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -63,7 +63,7 @@ int main() camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; camera.fovy = 45.0f; camera.type = CAMERA_PERSPECTIVE; - + SetCameraMode(camera, CAMERA_FREE); #if defined(PLATFORM_WEB) @@ -71,7 +71,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -95,7 +95,7 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); - + earthRotation += (5.0f*rotationSpeed); earthOrbitRotation += (365/360.0f*(5.0f*rotationSpeed)*rotationSpeed); moonRotation += (2.0f*rotationSpeed); @@ -109,12 +109,12 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); BeginMode3D(camera); - + rlPushMatrix(); rlScalef(sunRadius, sunRadius, sunRadius); // Scale Sun DrawSphereBasic(GOLD); // Draw the Sun rlPopMatrix(); - + rlPushMatrix(); rlRotatef(earthOrbitRotation, 0.0f, 1.0f, 0.0f); // Rotation for Earth orbit around Sun rlTranslatef(earthOrbitRadius, 0.0f, 0.0f); // Translation for Earth orbit @@ -123,19 +123,19 @@ void UpdateDrawFrame(void) rlPushMatrix(); rlRotatef(earthRotation, 0.25, 1.0, 0.0); // Rotation for Earth itself rlScalef(earthRadius, earthRadius, earthRadius);// Scale Earth - + DrawSphereBasic(BLUE); // Draw the Earth rlPopMatrix(); - + rlRotatef(moonOrbitRotation, 0.0f, 1.0f, 0.0f); // Rotation for Moon orbit around Earth rlTranslatef(moonOrbitRadius, 0.0f, 0.0f); // Translation for Moon orbit rlRotatef(-moonOrbitRotation, 0.0f, 1.0f, 0.0f); // Rotation for Moon orbit around Earth inverted rlRotatef(moonRotation, 0.0f, 1.0f, 0.0f); // Rotation for Moon itself rlScalef(moonRadius, moonRadius, moonRadius); // Scale Moon - + DrawSphereBasic(LIGHTGRAY); // Draw the Moon rlPopMatrix(); - + // Some reference elements (not affected by previous matrix transformations) DrawCircle3D((Vector3){ 0.0f, 0.0f, 0.0f }, earthOrbitRadius, (Vector3){ 1, 0, 0 }, 90.0f, Fade(RED, 0.5f)); DrawGrid(20, 1.0f); @@ -155,7 +155,7 @@ void DrawSphereBasic(Color color) { int rings = 16; int slices = 16; - + rlBegin(RL_TRIANGLES); rlColor4ub(color.r, color.g, color.b, color.a); diff --git a/examples/web/models/models_rlgl_solar_system.html b/examples/web/models/models_rlgl_solar_system.html new file mode 100644 index 0000000..951015a --- /dev/null +++ b/examples/web/models/models_rlgl_solar_system.html @@ -0,0 +1 @@ +<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/games property=og:url><meta content=raylib.com property=og:site_name><meta content="New hmtl5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:url><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header_part{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(https://www.raylib.com/common/img/raylib_logo_64x64.png)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}#emscripten_logo{display:inline-block;margin:0}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:20px;width:30px}#controls{display:inline-block;float:right;vertical-align:top;margin-top:30px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}</style></head><body><div id=header_part><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value=Fullscreen></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault()></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function SaveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var t=document.querySelector("#output");return t&&(t.value=""),function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.log(e),t&&(t.value+=e+"\n",t.scrollTop=t.scrollHeight)}}(),printErr:function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()},!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Date.now()<30||(t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!1,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(e){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script src=models_rlgl_solar_system.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_rlgl_solar_system.js b/examples/web/models/models_rlgl_solar_system.js new file mode 100644 index 0000000..8f329d6 --- /dev/null +++ b/examples/web/models/models_rlgl_solar_system.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];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 require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;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)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["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);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["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"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}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=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["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)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];type=singleType||types[i];if(type===0){i++;continue}if(type=="i64")type="i32";setValue(ret+i,curr,type);if(previousType!==type){typeSize=getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(u8Array[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=u8Array[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[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<str.length;++i){var u=str.charCodeAt(i);if(u>=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 allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__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(0)}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)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269760,DYNAMICTOP_PTR=26848;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY<TOTAL_STACK)err("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+INITIAL_TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{if(typeof WebAssembly==="object"&&typeof WebAssembly.Memory==="function"){wasmMemory=new WebAssembly.Memory({"initial":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE});buffer=wasmMemory.buffer}else{buffer=new ArrayBuffer(INITIAL_TOTAL_MEMORY)}}updateGlobalBufferViews();HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();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 __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=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 ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}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"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_rlgl_solar_system.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){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(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};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 ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}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)},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.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(19)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(6)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(6)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(5)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var isPosixPlatform=process.platform!="win32";var fd=process.stdin.fd;if(isPosixPlatform){var usingDevice=false;try{fd=fs.openSync("/dev/stdin","r");usingDevice=true}catch(e){}}try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(usingDevice){fs.closeSync(fd)}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}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(1)}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<node.usedBytes;++i)arr.push(node.contents[i]);return arr}return node.contents},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array;if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|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(new ArrayBuffer(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<newSize)node.contents.push(0);node.usedBytes=newSize},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[2]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(39)}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name]},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(39)}delete parent.contents[name]},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(22)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(22)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(12)}buffer.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var IDBFS={dbs:{},indexedDB:function(){if(typeof indexedDB!=="undefined")return indexedDB;var ret=null;if(typeof window==="object")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,"IDBFS used, but indexedDB not supported");return ret},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function(mount){return MEMFS.mount.apply(null,arguments)},syncfs:function(mount,populate,callback){IDBFS.getLocalSet(mount,function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},getDB:function(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback("Unable to connect to IndexedDB")}req.onupgradeneeded=function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}};req.onsuccess=function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db)};req.onerror=function(e){callback(this.error);e.preventDefault()}},getLocalSet:function(mount,callback){var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return function(p){return PATH.join2(root,p)}}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:"local",entries:entries})},getRemoteSet:function(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,function(err,db){if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=function(e){callback(this.error);e.preventDefault()};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db:db,entries:entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()}}catch(e){return callback(e)}})},loadLocalEntry:function(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error("node type not supported"))}},storeLocalEntry:function(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode)}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp)}catch(e){return callback(e)}callback(null)},removeLocalEntry:function(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:function(store,path,callback){var req=store.get(path);req.onsuccess=function(event){callback(null,event.target.result)};req.onerror=function(e){callback(this.error);e.preventDefault()}},storeRemoteEntry:function(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},removeRemoteEntry:function(store,path,callback){var req=store.delete(path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},reconcile:function(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join("/");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,parts[i],WORKERFS.DIR_MODE,0)}parent=createdParents[curr]}return parent}function base(path){var parts=path.split("/");return parts[parts.length-1]}Array.prototype.forEach.call(mount.opts["files"]||[],function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate)});(mount.opts["blobs"]||[]).forEach(function(obj){WORKERFS.createNode(ensureParent(obj["name"]),base(obj["name"]),WORKERFS.FILE_MODE,0,obj["data"])});(mount.opts["packages"]||[]).forEach(function(pack){pack["metadata"].files.forEach(function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack["blob"].slice(file.start,file.end))})});return root},createNode:function(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents}else{node.size=4096;node.contents={}}if(parent){parent.contents[name]=node}return node},node_ops:{getattr:function(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)}},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}},lookup:function(parent,name){throw new FS.ErrnoError(2)},mknod:function(parent,name,mode,dev){throw new FS.ErrnoError(1)},rename:function(oldNode,newDir,newName){throw new FS.ErrnoError(1)},unlink:function(parent,name){throw new FS.ErrnoError(1)},rmdir:function(parent,name){throw new FS.ErrnoError(1)},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newName,oldPath){throw new FS.ErrnoError(1)},readlink:function(node){throw new FS.ErrnoError(1)}},stream_ops:{read:function(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(40)}}}}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<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>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 err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,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){if(!FS.FSNode){FS.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};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.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)}}})}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 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}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 err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}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(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}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(29)}},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){console.log("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(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}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(16)}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(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}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(22)}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(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}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;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=17)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(2)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(2)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(1)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(16)}if(!old_dir||!new_dir)throw new FS.ErrnoError(2);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(18)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(22)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(39)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(1)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(16)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(20)}return node.node_ops.readdir(node)},unlink:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(2)}if(!link.node_ops.readlink){throw new FS.ErrnoError(22)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(2)}if(!node.node_ops.getattr){throw new FS.ErrnoError(1)}return node.node_ops.getattr(node)},lstat:function(path){return FS.stat(path,true)},chmod:function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chmod(stream.node,mode)},chown:function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chown(stream.node,uid,gid)},truncate:function(path,len){if(len<0){throw new FS.ErrnoError(22)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(21)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(22)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(22)}FS.truncate(stream.node,len)},utime:function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(2)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(17)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(2)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;console.log("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:function(stream){return stream.fd===null},llseek:function(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(29)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(22)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.read){throw new FS.ErrnoError(22)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.write){throw new FS.ErrnoError(22)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(offset<0||length<=0){throw new FS.ErrnoError(22)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(19)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(95)}stream.stream_ops.allocate(stream,offset,length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(13)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(19)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(25)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:function(path,data,opts){opts=opts||{};opts.flags=opts.flags||"w";var stream=FS.open(path,opts.flags,opts.mode);if(typeof data==="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:function(){return FS.currentPath},chdir:function(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(2)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(20)}var err=FS.nodePermissions(lookup.node,"x");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path},createDefaultDirectories:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return length}});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device;if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);random_device=function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");random_device=function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}else{}if(!random_device){random_device=function(){abort("random_device")}}FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode("/proc/self","fd",16384|511,73);node.node_ops={lookup:function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(9);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin","r");var stdout=FS.open("/dev/stdout","w");var stderr=FS.open("/dev/stderr","w")},ensureErrnoError:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error";if(this.stack)Object.defineProperty(this,"stack",{value:(new Error).stack,writable:true})};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[2].forEach(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS}},init:function(input,output,error){FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},joinPath:function(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]=="/")path=path.substr(1);return path},absolutePath:function(relative,base){return PATH.resolve(base,relative)},standardizePath:function(path){return PATH.normalize(path)},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{___setErrNo(ret.error);return null}},analyzePath:function(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createFolder:function(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode)},createPath:function(parent,path,canRead,canWrite){parent=typeof parent==="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:function(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data==="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,"w");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(5)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},createLink:function(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);return FS.symlink(target,path)},forceLoadFile:function(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!=="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(Module["read"]){try{obj.contents=intArrayFromString(Module["read"](obj.url),true);obj.usedBytes=obj.contents.length}catch(e){success=false}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}if(!success)___setErrNo(5);return success},createLazyFile:function(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=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;console.log("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(5)}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(5)}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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function(dirfd,path){if(path[0]!=="/"){var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path}path=PATH.join2(dir,path)}return path},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR}throw e}HEAP32[buf>>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){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,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-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;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-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}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<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;if(typeof SDL==="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["preloadPlugins"].push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("warning: browser could not fully decode audio "+name+", trying slower base64 approach");function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};var EGL={errorCode:12288,defaultDisplayInitialized:false,currentContext:0,currentReadSurface:0,currentDrawSurface:0,contextAttributes:{alpha:false,depth:false,stencil:false,antialias:false},stringCache:{},setErrorCode:function(code){EGL.errorCode=code},chooseConfig:function(display,attribList,config,config_size,numConfigs){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(attribList){for(;;){var param=HEAP32[attribList>>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(this,call.argsList)}},inEventHandler:0,currentEventHandler:null,eventHandlers:[],isInternetExplorer:function(){return navigator.userAgent.indexOf("MSIE")!==-1||navigator.appVersion.indexOf("Trident/")>0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getBoundingClientRectOrZeros:function(target){return target.getBoundingClientRect?target.getBoundingClientRect():{left:0,top:0}},pageScrollPos:function(){if(window.pageXOffset>0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i<GL.MINI_TEMP_BUFFER_SIZE;i++){GL.miniTempBufferViews[i]=GL.miniTempBuffer.subarray(0,i+1)}},recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i<ret;i++){table[i]=null}return ret},MINI_TEMP_BUFFER_SIZE:256,miniTempBuffer:null,miniTempBufferViews:[0],getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i<result.length;++i){switch(type){case"Integer":HEAP32[p+i*4>>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[location]);if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i<e.touches.length;++i){var touch=e.touches[i];touches[touch.identifier]=touch}for(var i=0;i<e.changedTouches.length;++i){var touch=e.changedTouches[i];touches[touch.identifier]=touch;touch.changed=true}for(var i=0;i<e.targetTouches.length;++i){var touch=e.targetTouches[i];touches[touch.identifier].onTarget=true}var touchEvent=JSEvents.touchEvent;var ptr=touchEvent;HEAP32[ptr+4>>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;dynCall_vidd(GLFW.active.cursorPosFunc,GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;dynCall_viiii(GLFW.active.mouseButtonFunc,GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),"i8",ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),"i8",ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),"float",ALLOC_NORMAL)};if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.keyFunc=cbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.charFunc=cbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.mouseButtonFunc=cbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorPosFunc=cbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.scrollFunc=cbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.dropFunc=cbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowSizeFunc=cbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowCloseFunc=cbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowRefreshFunc=cbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++);if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++);if(i==GLFW.windows.length){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetCursorPos(winid,x,y){GLFW.getCursorPos(winid,x,y)}function _glfwGetKey(winid,key){return GLFW.getKey(winid,key)}function _glfwGetMouseButton(winid,button){return GLFW.getMouseButton(winid,button)}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorEnterFunc=cbfun}function _glfwSetCursorPosCallback(winid,cbfun){GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){GLFW.errorFunc=cbfun}function _glfwSetKeyCallback(winid,cbfun){GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowIconifyFunc=cbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _llvm_stackrestore(p){var self=_llvm_stacksave;var ret=self.LLVM_SAVEDSTACKS[p];self.LLVM_SAVEDSTACKS.splice(p,1);stackRestore(ret)}function _llvm_stacksave(){var self=_llvm_stacksave;if(!self.LLVM_SAVEDSTACKS){self.LLVM_SAVEDSTACKS=[]}self.LLVM_SAVEDSTACKS.push(stackSave());return self.LLVM_SAVEDSTACKS.length-1}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function _usleep(useconds){var msec=useconds/1e3;if((ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self["performance"]&&self["performance"]["now"]){var start=self["performance"]["now"]();while(self["performance"]["now"]()-start<msec){}}else{var start=Date.now();while(Date.now()-start<msec){}}return 0}function _nanosleep(rqtp,rmtp){var seconds=HEAP32[rqtp>>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));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 asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"mc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"l":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"sd":_emscripten_get_gamepad_status,"hd":_emscripten_get_heap_size,"Yc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Dc":_emscripten_glActiveTexture,"tc":_emscripten_glAttachShader,"lc":_emscripten_glBeginQueryEXT,"ec":_emscripten_glBindAttribLocation,"ac":_emscripten_glBindBuffer,"Wb":_emscripten_glBindFramebuffer,"Pb":_emscripten_glBindRenderbuffer,"Gb":_emscripten_glBindTexture,"wb":_emscripten_glBindVertexArrayOES,"ob":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"ee":_emscripten_glGetShaderInfoLog,"de":_emscripten_glGetShaderPrecisionFormat,"ce":_emscripten_glGetShaderSource,"be":_emscripten_glGetShaderiv,"ae":_emscripten_glGetString,"$d":_emscripten_glGetTexParameterfv,"_d":_emscripten_glGetTexParameteriv,"Zd":_emscripten_glGetUniformLocation,"Yd":_emscripten_glGetUniformfv,"Xd":_emscripten_glGetUniformiv,"Wd":_emscripten_glGetVertexAttribPointerv,"Vd":_emscripten_glGetVertexAttribfv,"Ud":_emscripten_glGetVertexAttribiv,"Td":_emscripten_glHint,"Sd":_emscripten_glIsBuffer,"Rd":_emscripten_glIsEnabled,"Qd":_emscripten_glIsFramebuffer,"Pd":_emscripten_glIsProgram,"Od":_emscripten_glIsQueryEXT,"Nd":_emscripten_glIsRenderbuffer,"Md":_emscripten_glIsShader,"Ld":_emscripten_glIsTexture,"Kd":_emscripten_glIsVertexArrayOES,"Jd":_emscripten_glLineWidth,"Id":_emscripten_glLinkProgram,"Hd":_emscripten_glPixelStorei,"Gd":_emscripten_glPolygonOffset,"Fd":_emscripten_glQueryCounterEXT,"Ed":_emscripten_glReadPixels,"Dd":_emscripten_glReleaseShaderCompiler,"Cd":_emscripten_glRenderbufferStorage,"Bd":_emscripten_glSampleCoverage,"Ad":_emscripten_glScissor,"zd":_emscripten_glShaderBinary,"yd":_emscripten_glShaderSource,"xd":_emscripten_glStencilFunc,"wd":_emscripten_glStencilFuncSeparate,"vd":_emscripten_glStencilMask,"ud":_emscripten_glStencilMaskSeparate,"td":_emscripten_glStencilOp,"rd":_emscripten_glStencilOpSeparate,"qd":_emscripten_glTexImage2D,"pd":_emscripten_glTexParameterf,"od":_emscripten_glTexParameterfv,"nd":_emscripten_glTexParameteri,"md":_emscripten_glTexParameteriv,"ld":_emscripten_glTexSubImage2D,"kd":_emscripten_glUniform1f,"jd":_emscripten_glUniform1fv,"id":_emscripten_glUniform1i,"gd":_emscripten_glUniform1iv,"fd":_emscripten_glUniform2f,"ed":_emscripten_glUniform2fv,"dd":_emscripten_glUniform2i,"cd":_emscripten_glUniform2iv,"bd":_emscripten_glUniform3f,"ad":_emscripten_glUniform3fv,"$c":_emscripten_glUniform3i,"_c":_emscripten_glUniform3iv,"Zc":_emscripten_glUniform4f,"Xc":_emscripten_glUniform4fv,"Wc":_emscripten_glUniform4i,"Vc":_emscripten_glUniform4iv,"Uc":_emscripten_glUniformMatrix2fv,"Tc":_emscripten_glUniformMatrix3fv,"Sc":_emscripten_glUniformMatrix4fv,"Rc":_emscripten_glUseProgram,"Qc":_emscripten_glValidateProgram,"Pc":_emscripten_glVertexAttrib1f,"Oc":_emscripten_glVertexAttrib1fv,"Nc":_emscripten_glVertexAttrib2f,"Mc":_emscripten_glVertexAttrib2fv,"Lc":_emscripten_glVertexAttrib3f,"Kc":_emscripten_glVertexAttrib3fv,"Jc":_emscripten_glVertexAttrib4f,"Ic":_emscripten_glVertexAttrib4fv,"Hc":_emscripten_glVertexAttribDivisorANGLE,"Gc":_emscripten_glVertexAttribPointer,"Fc":_emscripten_glViewport,"Ec":_emscripten_memcpy_big,"Cc":_emscripten_request_pointerlock,"Bc":_emscripten_resize_heap,"O":_emscripten_run_script,"Ac":_emscripten_sample_gamepad_data,"zc":_emscripten_set_click_callback_on_thread,"yc":_emscripten_set_fullscreenchange_callback_on_thread,"xc":_emscripten_set_gamepadconnected_callback_on_thread,"wc":_emscripten_set_gamepaddisconnected_callback_on_thread,"vc":_emscripten_set_keypress_callback_on_thread,"uc":_emscripten_set_main_loop,"sc":_emscripten_set_touchcancel_callback_on_thread,"rc":_emscripten_set_touchend_callback_on_thread,"qc":_emscripten_set_touchmove_callback_on_thread,"pc":_emscripten_set_touchstart_callback_on_thread,"oc":_exit,"nc":_glActiveTexture,"N":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"kc":_glBlendFunc,"q":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"jc":_glClearDepthf,"ic":_glCompileShader,"hc":_glCompressedTexImage2D,"gc":_glCreateProgram,"fc":_glCreateShader,"dc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"cc":_glDepthFunc,"H":_glDetachShader,"G":_glDisable,"o":_glDisableVertexAttribArray,"bc":_glDrawArrays,"$b":_glDrawElements,"u":_glEnable,"h":_glEnableVertexAttribArray,"_b":_glFrontFace,"n":_glGenBuffers,"Zb":_glGenTextures,"t":_glGetAttribLocation,"Yb":_glGetFloatv,"Xb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Vb":_glGetShaderInfoLog,"E":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Ub":_glLinkProgram,"Tb":_glPixelStorei,"Sb":_glReadPixels,"Rb":_glShaderSource,"Qb":_glTexImage2D,"g":_glTexParameteri,"Ob":_glUniform1i,"Nb":_glUniform4f,"Mb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Lb":_glViewport,"Kb":_glfwCreateWindow,"Jb":_glfwDefaultWindowHints,"Ib":_glfwDestroyWindow,"Hb":_glfwGetCursorPos,"Fb":_glfwGetKey,"Eb":_glfwGetMouseButton,"m":_glfwGetTime,"Db":_glfwInit,"Cb":_glfwMakeContextCurrent,"Bb":_glfwSetCharCallback,"Ab":_glfwSetCursorEnterCallback,"zb":_glfwSetCursorPosCallback,"yb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"tb":_glfwSetScrollCallback,"sb":_glfwSetWindowIconifyCallback,"rb":_glfwSetWindowShouldClose,"qb":_glfwSetWindowSizeCallback,"pb":_glfwSwapBuffers,"D":_glfwTerminate,"e":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"nb":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["le"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["te"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i<argc;i++){HEAP32[(argv>>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_rlgl_solar_system.wasm b/examples/web/models/models_rlgl_solar_system.wasm Binary files differnew file mode 100644 index 0000000..0f762f2 --- /dev/null +++ b/examples/web/models/models_rlgl_solar_system.wasm diff --git a/examples/web/models/models_skybox.c b/examples/web/models/models_skybox.c index 243844a..28a89d4 100644 --- a/examples/web/models/models_skybox.c +++ b/examples/web/models/models_skybox.c @@ -18,13 +18,13 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world Camera camera = {{ 1.0f, 1.0f, 1.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; -Model skybox; +Model skybox = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -32,7 +32,7 @@ Model skybox; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -40,10 +40,10 @@ int main(void) //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [models] example - skybox loading and drawing"); - // Load skybox model + // Load skybox model Mesh cube = GenMeshCube(1.0f, 1.0f, 1.0f); skybox = LoadModelFromMesh(cube); - + // Load skybox shader and set required locations // NOTE: Some locations are automatically set at shader loading skybox.material.shader = LoadShader("resources/shaders/skybox.vs", "resources/shaders/skybox.fs"); @@ -52,12 +52,12 @@ int main(void) // Load cubemap shader and setup required shader locations Shader shdrCubemap = LoadShader("resources/shaders/cubemap.vs", "resources/shaders/cubemap.fs"); SetShaderValuei(shdrCubemap, GetShaderLocation(shdrCubemap, "equirectangularMap"), (int[1]){ 0 }, 1); - + Texture2D texHDR = LoadTexture("resources/pinetree.hdr"); skybox.material.maps[MAP_CUBEMAP].texture = GenTextureCubemap(shdrCubemap, texHDR, 512); - + UnloadShader(shdrCubemap); // Cubemap generation shader not required any more - + SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode #if defined(PLATFORM_WEB) @@ -65,7 +65,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -102,7 +102,7 @@ void UpdateDrawFrame(void) BeginMode3D(camera); DrawModel(skybox, Vector3Zero(), 1.0f, WHITE); - + DrawGrid(10, 1.0f); EndMode3D(); diff --git a/examples/web/models/models_yaw_pitch_roll.c b/examples/web/models/models_yaw_pitch_roll.c index e1ec513..e57b357 100644 --- a/examples/web/models/models_yaw_pitch_roll.c +++ b/examples/web/models/models_yaw_pitch_roll.c @@ -5,9 +5,9 @@ * This example has been created using raylib 1.8 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * -* Example based on Berni work on Raspberry Pi +* Example contributed by Berni (@Berni8k) and reviewed by Ramon Santamaria (@raysan5) * -* Copyright (c) 2017 Ramon Santamaria (@raysan5) +* Copyright (c) 2017 Berni (@Berni8k) and Ramon Santamaria (@raysan5) * ********************************************************************************************/ @@ -21,19 +21,19 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define our custom camera to look into our 3d world Camera camera = { 0 }; -Texture2D texAngleGauge; -Texture2D texBackground; -Texture2D texPitch; -Texture2D texPlane; +Texture2D texAngleGauge = { 0 }; +Texture2D texBackground = { 0 }; +Texture2D texPitch = { 0 }; +Texture2D texPlane = { 0 }; -RenderTexture2D framebuffer; -Model model; +RenderTexture2D framebuffer = { 0 }; +Model model = { 0 }; float pitch = 0.0f; float roll = 0.0f; @@ -48,7 +48,7 @@ void UpdateDrawFrame(void); // Update and Draw one frame void DrawAngleGauge(Texture2D angleGauge, int x, int y, float angle, char title[], Color color); //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -56,30 +56,31 @@ int main(void) //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [models] example - plane rotations (yaw, pitch, roll)"); - texAngleGauge = LoadTexture("resources/angle_gauge.png"); + texAngleGauge = LoadTexture("resources/angle_gauge.png"); texBackground = LoadTexture("resources/background.png"); - texPitch = LoadTexture("resources/pitch.png"); + texPitch = LoadTexture("resources/pitch.png"); texPlane = LoadTexture("resources/plane.png"); framebuffer = LoadRenderTexture(192, 192); - + // Model loading model = LoadModel("resources/plane.obj"); // Load OBJ model - model.material.maps[MAP_DIFFUSE].texture = LoadTexture("resources/plane_diffuse.png"); // Set map diffuse texture - - GenTextureMipmaps(&model.material.maps[MAP_DIFFUSE].texture); + model.materials[0].maps[MAP_DIFFUSE].texture = LoadTexture("resources/plane_diffuse.png"); // Set map diffuse texture + + GenTextureMipmaps(&model.materials[0].maps[MAP_DIFFUSE].texture); camera.position = (Vector3){ 0.0f, 60.0f, -120.0f };// Camera position perspective camera.target = (Vector3){ 0.0f, 12.0f, 0.0f }; // Camera looking at point camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) camera.fovy = 30.0f; // Camera field-of-view Y + camera.type = CAMERA_PERSPECTIVE; // Camera type #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -89,17 +90,17 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- - + // Unload all loaded data UnloadModel(model); - + UnloadRenderTexture(framebuffer); - - UnloadTexture(texAngleGauge); + + UnloadTexture(texAngleGauge); UnloadTexture(texBackground); - UnloadTexture(texPitch); + UnloadTexture(texPitch); UnloadTexture(texPlane); - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -121,7 +122,7 @@ void UpdateDrawFrame(void) if (roll > 0.0f) roll -= 0.5f; else if (roll < 0.0f) roll += 0.5f; } - + // Plane yaw (y-axis) controls if (IsKeyDown(KEY_S)) yaw += 1.0f; else if (IsKeyDown(KEY_A)) yaw -= 1.0f; @@ -130,7 +131,7 @@ void UpdateDrawFrame(void) if (yaw > 0.0f) yaw -= 0.5f; else if (yaw < 0.0f) yaw += 0.5f; } - + // Plane pitch (z-axis) controls if (IsKeyDown(KEY_DOWN)) pitch += 0.6f; else if (IsKeyDown(KEY_UP)) pitch -= 0.6f; @@ -139,7 +140,7 @@ void UpdateDrawFrame(void) if (pitch > 0.3f) pitch -= 0.3f; else if (pitch < -0.3f) pitch += 0.3f; } - + // Wraps the phase of an angle to fit between -180 and +180 degrees int pitchOffset = pitch; while (pitchOffset > 180) pitchOffset -= 360; @@ -151,16 +152,16 @@ void UpdateDrawFrame(void) transform = MatrixMultiply(transform, MatrixRotateZ(DEG2RAD*roll)); transform = MatrixMultiply(transform, MatrixRotateX(DEG2RAD*pitch)); transform = MatrixMultiply(transform, MatrixRotateY(DEG2RAD*yaw)); - + model.transform = transform; //---------------------------------------------------------------------------------- // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + // Draw framebuffer texture (Ahrs Display) int centerX = framebuffer.texture.width/2; int centerY = framebuffer.texture.height/2; @@ -177,28 +178,28 @@ void UpdateDrawFrame(void) DrawTexturePro(texPitch, (Rectangle){ 0, 0, texPitch.width, texPitch.height }, (Rectangle){ centerX, centerY, texPitch.width*scaleFactor, texPitch.height*scaleFactor }, (Vector2){ texPitch.width/2*scaleFactor, texPitch.height/2*scaleFactor + pitchOffset*scaleFactor }, roll, WHITE); - + DrawTexturePro(texPlane, (Rectangle){0,0,texPlane.width, texPlane.height }, - (Rectangle){ centerX, centerY, texPlane.width*scaleFactor, texPlane.height*scaleFactor }, + (Rectangle){ centerX, centerY, texPlane.width*scaleFactor, texPlane.height*scaleFactor }, (Vector2){texPlane.width/2*scaleFactor, texPlane.height/2*scaleFactor }, 0, WHITE); - + EndBlendMode(); EndTextureMode(); // Draw 3D model (recomended to draw 3D always before 2D) - Begin3dMode(camera); + BeginMode3D(camera); DrawModel(model, (Vector3){ 0, 6.0f, 0 }, 1.0f, WHITE); // Draw 3d model with texture DrawGrid(10, 10.0f); - End3dMode(); + EndMode3D(); // Draw 2D GUI stuff - DrawAngleGauge(texAngleGauge, 80, 80, roll, "roll", RED); - DrawAngleGauge(texAngleGauge, 190, 80, pitch, "pitch", GREEN); - DrawAngleGauge(texAngleGauge, 300, 80, yaw, "yaw", SKYBLUE); - + DrawAngleGauge(texAngleGauge, 80, 70, roll, "roll", RED); + DrawAngleGauge(texAngleGauge, 190, 70, pitch, "pitch", GREEN); + DrawAngleGauge(texAngleGauge, 300, 70, yaw, "yaw", SKYBLUE); + DrawRectangle(30, 360, 260, 70, Fade(SKYBLUE, 0.5f)); DrawRectangleLines(30, 360, 260, 70, Fade(DARKBLUE, 0.5f)); DrawText("Pitch controlled with: KEY_UP / KEY_DOWN", 40, 370, 10, DARKGRAY); @@ -206,11 +207,11 @@ void UpdateDrawFrame(void) DrawText("Yaw controlled with: KEY_A / KEY_S", 40, 410, 10, DARKGRAY); // Draw framebuffer texture - DrawTextureRec(framebuffer.texture, (Rectangle){ 0, 0, framebuffer.texture.width, -framebuffer.texture.height }, + DrawTextureRec(framebuffer.texture, (Rectangle){ 0, 0, framebuffer.texture.width, -framebuffer.texture.height }, (Vector2){ screenWidth - framebuffer.texture.width - 20, 20 }, Fade(WHITE, 0.8f)); - + DrawRectangleLines(screenWidth - framebuffer.texture.width - 20, 20, framebuffer.texture.width, framebuffer.texture.height, DARKGRAY); - + EndDrawing(); //---------------------------------------------------------------------------------- } @@ -224,7 +225,7 @@ void DrawAngleGauge(Texture2D angleGauge, int x, int y, float angle, char title[ int textSize = 20; DrawTexturePro(angleGauge, srcRec, dstRec, origin, angle, color); - - DrawText(FormatText("%5.1f", angle), x - MeasureText(FormatText("%5.1f", angle), textSize) / 2, y + 10, textSize, DARKGRAY); - DrawText(title, x - MeasureText(title, textSize) / 2, y + 60, textSize, DARKGRAY); + + DrawText(FormatText("%5.1f", angle), x - MeasureText(FormatText("%5.1f", angle), textSize) / 2, y + 10, textSize, DARKGRAY); + DrawText(title, x - MeasureText(title, textSize) / 2, y + 60, textSize, DARKGRAY); }
\ No newline at end of file diff --git a/examples/web/models/models_yaw_pitch_roll.data b/examples/web/models/models_yaw_pitch_roll.data new file mode 100644 index 0000000..03bc92f --- /dev/null +++ b/examples/web/models/models_yaw_pitch_roll.data @@ -0,0 +1,12539 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware
+# File Created: 23.07.2017 19:55:30
+
+#
+# object P_51_Mustang_Proppeler
+#
+
+v 6.98 -5.85 40.44
+v 7.18 -5.71 40.16
+v 7.46 -5.54 40.90
+v 7.65 -5.40 40.61
+v -1.06 6.70 43.10
+v -0.66 7.22 43.05
+v -2.20 7.04 41.37
+v -1.32 8.19 41.26
+v -0.05 7.42 43.02
+v 0.03 8.62 41.20
+v 0.55 7.21 43.04
+v 1.34 8.17 41.23
+v 0.89 6.69 43.08
+v 2.11 7.01 41.33
+v 0.86 6.04 43.14
+v 2.04 5.59 41.46
+v 0.47 5.52 43.19
+v 1.16 4.45 41.57
+v -0.15 5.33 43.22
+v -0.19 4.02 41.63
+v -0.74 5.53 43.20
+v -1.50 4.47 41.60
+v -1.09 6.06 43.16
+v -2.27 5.62 41.50
+v -0.20 3.16 38.93
+v -1.94 3.76 38.90
+v -2.97 5.30 38.76
+v -2.88 7.20 38.59
+v -1.71 8.72 38.44
+v 0.10 9.29 38.37
+v 1.84 8.70 38.40
+v 2.87 7.15 38.54
+v 2.78 5.26 38.71
+v 1.61 3.73 38.86
+v -0.11 6.40 43.97
+v 2.25 5.68 40.33
+v 0.23 3.72 40.34
+v 7.55 -5.03 41.18
+v 6.53 -5.89 40.11
+v -2.39 6.87 40.27
+v -0.36 8.83 39.88
+v -7.68 17.58 39.26
+v -6.63 18.36 38.02
+v -7.10 18.35 38.37
+v -7.59 18.07 38.89
+v -11.88 -2.05 40.51
+v -12.14 -1.59 39.98
+v -11.39 -2.12 40.84
+v -12.14 -1.14 39.60
+v -2.58 5.85 39.82
+v -0.73 3.87 40.17
+v -0.75 3.90 40.52
+v -2.60 5.87 40.18
+v -11.53 -1.92 41.09
+v -12.28 -0.94 39.85
+v -12.28 -1.40 40.23
+v -12.02 -1.86 40.76
+v 7.74 -4.89 40.89
+v 2.27 5.69 39.97
+v 0.25 3.72 39.99
+v 6.72 -5.74 39.83
+v 12.03 14.07 38.30
+v 12.17 13.89 38.58
+v 12.04 13.60 38.00
+v 12.18 13.42 38.29
+v 11.76 14.57 38.74
+v 11.89 14.39 39.03
+v 11.40 14.47 39.35
+v 11.26 14.65 39.07
+v 0.60 8.66 39.71
+v 0.62 8.66 40.07
+v 2.45 6.68 39.69
+v 2.47 6.67 40.05
+v -7.29 18.19 38.11
+v -6.82 18.20 37.77
+v -7.77 17.91 38.63
+v -7.87 17.42 39.01
+v -2.40 6.84 39.91
+v -0.37 8.80 39.53
+# 79 vertices
+
+vn 0.56 -0.83 -0.03
+vn -0.69 0.31 0.65
+vn -0.42 0.65 0.63
+vn -0.85 0.35 0.40
+vn -0.51 0.77 0.38
+vn 0.01 0.77 0.63
+vn 0.01 0.92 0.38
+vn 0.44 0.62 0.65
+vn 0.55 0.74 0.40
+vn 0.70 0.25 0.66
+vn 0.87 0.27 0.42
+vn 0.70 -0.20 0.68
+vn 0.86 -0.28 0.43
+vn 0.44 -0.56 0.71
+vn 0.53 -0.72 0.45
+vn -0.00 -0.69 0.72
+vn -0.01 -0.88 0.47
+vn -0.45 -0.53 0.72
+vn -0.56 -0.69 0.46
+vn -0.71 -0.14 0.69
+vn -0.88 -0.21 0.43
+vn -0.01 -0.95 0.30
+vn -0.60 -0.75 0.29
+vn -0.94 -0.23 0.27
+vn -0.90 0.36 0.24
+vn -0.54 0.81 0.23
+vn 0.02 0.97 0.23
+vn 0.58 0.78 0.25
+vn 0.92 0.29 0.27
+vn 0.91 -0.30 0.28
+vn 0.57 -0.77 0.30
+vn 0.00 0.07 1.00
+vn -0.01 -0.09 -1.00
+vn -0.05 0.06 1.00
+vn -0.09 0.02 1.00
+vn -0.48 -0.32 0.82
+vn -0.52 -0.35 0.78
+vn -0.53 -0.33 0.78
+vn 0.07 0.13 0.99
+vn 0.11 0.16 0.98
+vn 0.47 0.44 0.76
+vn 0.51 0.47 0.72
+vn 0.52 0.45 0.73
+vn 0.40 -0.58 -0.71
+vn 0.39 -0.54 -0.75
+vn 0.42 -0.57 -0.71
+vn 0.06 -0.19 -0.98
+vn 0.02 -0.15 -0.99
+vn -0.03 0.15 0.99
+vn -0.06 0.19 0.98
+vn -0.39 0.54 0.75
+vn -0.42 0.57 0.71
+vn -0.40 0.58 0.71
+vn 0.84 -0.36 0.40
+vn 0.88 0.46 0.06
+vn 0.88 0.46 0.07
+vn 0.67 0.38 0.64
+vn 0.66 0.38 0.65
+vn -0.70 0.72 -0.02
+vn -0.63 -0.42 -0.65
+vn -0.64 -0.43 -0.64
+vn -0.83 -0.55 -0.07
+vn -0.84 -0.55 -0.06
+vn 0.53 0.33 -0.78
+vn 0.48 0.32 -0.82
+vn 0.52 0.35 -0.78
+vn 0.09 -0.03 -1.00
+vn 0.05 -0.06 -1.00
+vn 0.92 0.21 -0.32
+vn 0.84 0.53 -0.08
+vn 0.38 0.85 0.36
+vn -0.49 0.87 0.03
+vn -0.49 0.87 0.04
+vn -0.34 0.71 0.61
+vn -0.34 0.71 0.62
+vn -0.73 -0.68 0.03
+vn 0.38 -0.68 -0.62
+vn 0.39 -0.69 -0.61
+vn 0.57 -0.82 -0.04
+vn 0.57 -0.82 -0.03
+vn -0.43 0.46 -0.77
+vn -0.42 0.41 -0.81
+vn -0.45 0.45 -0.77
+vn -0.08 0.01 -1.00
+vn -0.04 -0.03 -1.00
+vn 0.05 0.03 1.00
+vn 0.08 -0.00 1.00
+vn 0.42 -0.41 0.81
+vn 0.45 -0.45 0.77
+vn 0.43 -0.46 0.77
+vn -0.29 0.89 -0.35
+vn -0.57 0.82 -0.10
+vn -0.83 0.43 0.35
+vn -0.89 -0.45 0.07
+vn -0.89 -0.45 0.08
+vn -0.69 -0.28 0.67
+vn -0.68 -0.27 0.68
+vn 0.70 -0.72 0.04
+vn 0.65 0.32 -0.69
+vn 0.66 0.32 -0.68
+vn 0.84 0.54 -0.08
+vn 0.84 0.54 -0.07
+vn -0.52 -0.45 -0.73
+vn -0.47 -0.44 -0.77
+vn -0.50 -0.47 -0.72
+vn -0.11 -0.15 -0.98
+vn -0.07 -0.12 -0.99
+vn -0.91 -0.27 -0.32
+vn -0.84 -0.54 -0.06
+vn -0.39 -0.82 0.42
+vn 0.49 -0.87 0.10
+vn 0.49 -0.86 0.11
+vn 0.37 -0.62 0.69
+vn 0.37 -0.62 0.70
+vn 0.73 0.68 -0.00
+vn -0.41 0.59 -0.70
+vn -0.42 0.59 -0.69
+vn -0.57 0.81 -0.11
+vn 0.27 -0.92 -0.28
+# 119 vertex normals
+
+vt 0.04 0.85 0.00
+vt 0.03 0.85 0.00
+vt 0.92 0.13 0.00
+vt 0.92 0.12 0.00
+vt 0.96 0.13 0.00
+vt 0.96 0.11 0.00
+vt 0.96 0.10 0.00
+vt 0.92 0.14 0.00
+vt 0.96 0.14 0.00
+vt 0.92 0.15 0.00
+vt 0.96 0.16 0.00
+vt 0.96 0.17 0.00
+vt 0.96 0.15 0.00
+vt 1.00 0.18 0.00
+vt 1.00 0.16 0.00
+vt 1.00 0.15 0.00
+vt 1.00 0.13 0.00
+vt 1.00 0.11 0.00
+vt 1.00 0.09 0.00
+vt 0.91 0.13 0.00
+vt 0.80 0.95 0.00
+vt 0.81 0.94 0.00
+vt 0.81 0.96 0.00
+vt 0.82 0.95 0.00
+vt 0.82 0.96 0.00
+vt 0.80 0.96 0.00
+vt 0.38 0.65 0.00
+vt 0.37 0.68 0.00
+vt 0.23 0.65 0.00
+vt 0.23 0.67 0.00
+vt 0.23 0.66 0.00
+vt 0.37 0.66 0.00
+vt 0.37 0.67 0.00
+vt 0.35 0.66 0.00
+vt 0.35 0.67 0.00
+vt 0.06 0.85 0.00
+vt 0.05 0.85 0.00
+# 37 texture coords
+
+g P_51_Mustang_Proppeler
+f 1/1/1 2/1/1 3/2/1
+f 4/2/1 3/2/1 2/1/1
+f 5/3/2 6/4/3 7/5/4
+f 8/6/5 7/5/4 6/4/3
+f 6/4/3 9/4/6 8/6/5
+f 10/7/7 8/6/5 9/4/6
+f 9/4/6 11/4/8 10/7/7
+f 12/6/9 10/7/7 11/4/8
+f 11/4/8 13/3/10 12/6/9
+f 14/5/11 12/6/9 13/3/10
+f 13/3/10 15/8/12 14/5/11
+f 16/9/13 14/5/11 15/8/12
+f 15/8/12 17/10/14 16/9/13
+f 18/11/15 16/9/13 17/10/14
+f 17/10/14 19/10/16 18/11/15
+f 20/12/17 18/11/15 19/10/16
+f 19/10/16 21/10/18 20/12/17
+f 22/11/19 20/12/17 21/10/18
+f 21/10/18 23/8/20 22/11/19
+f 24/13/21 22/11/19 23/8/20
+f 20/12/17 22/11/19 25/14/22
+f 26/15/23 25/14/22 22/11/19
+f 22/11/19 24/13/21 26/15/23
+f 27/16/24 26/15/23 24/13/21
+f 23/8/20 5/3/2 24/13/21
+f 7/5/4 24/13/21 5/3/2
+f 24/13/21 7/5/4 27/16/24
+f 28/17/25 27/16/24 7/5/4
+f 7/5/4 8/6/5 28/17/25
+f 29/18/26 28/17/25 8/6/5
+f 8/6/5 10/7/7 29/18/26
+f 30/19/27 29/18/26 10/7/7
+f 10/7/7 12/6/9 30/19/27
+f 31/18/28 30/19/27 12/6/9
+f 12/6/9 14/5/11 31/18/28
+f 32/17/29 31/18/28 14/5/11
+f 14/5/11 16/9/13 32/17/29
+f 33/16/30 32/17/29 16/9/13
+f 16/9/13 18/11/15 33/16/30
+f 34/15/31 33/16/30 18/11/15
+f 18/11/15 20/12/17 34/15/31
+f 25/14/22 34/15/31 20/12/17
+f 35/20/32 21/10/18 19/10/16
+f 35/20/32 23/8/20 21/10/18
+f 35/20/32 5/3/2 23/8/20
+f 35/20/32 6/4/3 5/3/2
+f 35/20/32 9/4/6 6/4/3
+f 35/20/32 11/4/8 9/4/6
+f 35/20/32 13/3/10 11/4/8
+f 35/20/32 15/8/12 13/3/10
+f 35/20/32 17/10/14 15/8/12
+f 35/20/32 19/10/16 17/10/14
+f 31/21/33 32/22/33 30/21/33
+f 32/22/33 28/23/33 30/21/33
+f 34/24/33 28/23/33 32/22/33
+f 26/25/33 28/23/33 34/24/33
+f 25/24/33 26/25/33 34/24/33
+f 30/21/33 28/23/33 29/26/33
+f 27/23/33 28/23/33 26/25/33
+f 36/27/34 37/28/35 38/29/36
+f 37/28/35 39/30/37 38/29/36
+f 39/30/37 1/31/38 38/29/36
+f 1/31/38 3/31/38 38/29/36
+f 40/27/39 41/28/40 42/29/41
+f 41/28/40 43/30/42 42/29/41
+f 43/30/42 44/31/43 42/29/41
+f 44/31/43 45/31/43 42/29/41
+f 46/31/44 47/31/44 48/29/45
+f 47/31/44 49/30/46 48/29/45
+f 49/30/46 50/28/47 48/29/45
+f 50/28/47 51/27/48 48/29/45
+f 52/27/49 53/28/50 54/29/51
+f 53/28/50 55/30/52 54/29/51
+f 55/30/52 56/31/53 54/29/51
+f 56/31/53 57/31/53 54/29/51
+f 3/30/54 4/31/54 38/30/54
+f 58/31/54 38/30/54 4/31/54
+f 59/32/55 36/33/56 58/31/57
+f 38/30/58 58/31/57 36/33/56
+f 60/34/59 37/35/59 59/32/59
+f 36/33/59 59/32/59 37/35/59
+f 61/31/60 39/30/61 60/34/62
+f 39/30/61 37/35/63 60/34/62
+f 4/31/64 2/31/64 58/29/65
+f 2/31/64 61/30/66 58/29/65
+f 61/30/66 60/28/67 58/29/65
+f 60/28/67 59/27/68 58/29/65
+f 62/1/69 63/1/69 64/36/69
+f 65/37/69 64/36/69 63/1/69
+f 66/2/70 67/2/70 62/1/70
+f 63/1/70 62/1/70 67/2/70
+f 67/30/71 66/31/71 68/30/71
+f 69/31/71 68/30/71 66/31/71
+f 70/32/72 71/33/73 69/31/74
+f 68/30/75 69/31/74 71/33/73
+f 72/34/76 73/35/76 70/32/76
+f 71/33/76 70/32/76 73/35/76
+f 64/31/77 65/30/78 72/34/79
+f 65/30/78 73/35/80 72/34/79
+f 66/31/81 62/31/81 69/29/82
+f 62/31/81 64/30/83 69/29/82
+f 64/30/83 72/28/84 69/29/82
+f 72/28/84 70/27/85 69/29/82
+f 71/27/86 73/28/87 68/29/88
+f 73/28/87 65/30/89 68/29/88
+f 65/30/89 63/31/90 68/29/88
+f 63/31/90 67/31/90 68/29/88
+f 74/1/91 44/1/91 75/2/91
+f 43/2/91 75/2/91 44/1/91
+f 76/37/92 45/36/92 74/1/92
+f 44/1/92 74/1/92 45/36/92
+f 45/30/93 76/31/93 42/30/93
+f 77/31/93 42/30/93 76/31/93
+f 78/32/94 40/33/95 77/31/96
+f 42/30/97 77/31/96 40/33/95
+f 79/34/98 41/35/98 78/32/98
+f 40/33/98 78/32/98 41/35/98
+f 75/31/99 43/30/100 79/34/101
+f 43/30/100 41/35/102 79/34/101
+f 76/31/103 74/31/103 77/29/104
+f 74/31/103 75/30/105 77/29/104
+f 75/30/105 79/28/106 77/29/104
+f 79/28/106 78/27/107 77/29/104
+f 47/1/108 56/1/108 49/2/108
+f 55/2/108 49/2/108 56/1/108
+f 46/37/109 57/37/109 47/1/109
+f 56/1/109 47/1/109 57/37/109
+f 57/30/110 46/31/110 54/30/110
+f 48/31/110 54/30/110 46/31/110
+f 51/32/111 52/33/112 48/31/113
+f 54/30/114 48/31/113 52/33/112
+f 50/34/115 53/35/115 51/32/115
+f 52/33/115 51/32/115 53/35/115
+f 49/31/116 55/30/117 50/34/118
+f 55/30/117 53/35/92 50/34/118
+f 33/22/33 34/24/33 32/22/33
+f 2/1/119 1/1/119 61/36/119
+f 39/37/119 61/36/119 1/1/119
+# 138 faces
+
+#
+# object P_51_Mustang_Right_Rockets
+#
+
+v -34.05 -4.42 7.01
+v -33.98 -4.35 7.01
+v -34.09 -4.33 9.68
+v -34.02 -4.26 9.67
+v -35.60 -3.83 7.68
+v -35.21 -3.94 7.69
+v -35.84 -3.60 19.17
+v -36.18 -3.24 19.14
+v -35.88 -3.53 7.66
+v -36.29 -2.75 19.10
+v -36.09 -2.72 20.16
+v -36.01 -3.10 20.20
+v -35.35 -2.67 21.77
+v -35.74 -3.38 20.22
+v -35.37 -3.49 20.23
+v -35.37 -3.74 19.18
+v -34.88 -3.61 19.16
+v -34.81 -3.84 7.67
+v -34.50 -3.54 7.65
+v -34.50 -3.25 19.13
+v -34.37 -3.14 7.61
+v -34.35 -2.76 19.08
+v -34.46 -2.73 7.57
+v -34.46 -2.27 19.04
+v -34.74 -2.43 7.55
+v -34.79 -1.91 19.01
+v -35.13 -2.32 7.54
+v -35.27 -1.77 19.00
+v -35.54 -2.43 7.55
+v -35.76 -1.90 19.01
+v -35.84 -2.72 7.58
+v -36.13 -2.26 19.05
+v -35.97 -3.13 7.62
+v -35.97 -2.33 20.13
+v -35.68 -2.05 20.10
+v -35.30 -1.95 20.08
+v -34.92 -2.06 20.09
+v -34.66 -2.34 20.12
+v -34.58 -2.73 20.15
+v -34.70 -3.11 20.19
+v -34.99 -3.39 20.21
+v -36.27 -1.89 6.80
+v -35.13 -3.10 7.59
+v -36.34 -1.96 6.81
+v -35.20 -3.17 7.60
+v -36.30 -1.80 9.47
+v -36.38 -1.87 9.47
+v -35.16 -3.02 10.26
+v -35.24 -3.08 10.27
+v -33.90 -1.89 9.45
+v -33.97 -1.82 9.45
+v -35.18 -3.09 10.27
+v -35.25 -3.01 10.26
+v -36.43 -4.31 9.70
+v -36.49 -4.24 9.69
+v -33.87 -1.98 6.79
+v -35.15 -3.17 7.60
+v -36.39 -4.40 7.03
+v -36.46 -4.33 7.02
+v -35.21 -3.10 7.59
+v -33.93 -1.90 6.78
+v -31.30 -4.44 6.99
+v -31.23 -4.37 6.98
+v -31.34 -4.35 9.66
+v -31.26 -4.28 9.65
+v -32.85 -3.85 7.66
+v -32.46 -3.96 7.67
+v -33.09 -3.63 19.15
+v -33.43 -3.26 19.12
+v -33.13 -3.55 7.63
+v -33.53 -2.77 19.08
+v -33.34 -2.74 20.14
+v -33.25 -3.12 20.17
+v -32.60 -2.69 21.75
+v -32.99 -3.41 20.20
+v -32.62 -3.51 20.21
+v -32.61 -3.76 19.16
+v -32.12 -3.63 19.14
+v -32.05 -3.86 7.65
+v -31.75 -3.56 7.62
+v -31.75 -3.28 19.11
+v -31.62 -3.16 7.59
+v -31.60 -2.78 19.06
+v -31.71 -2.75 7.55
+v -31.71 -2.29 19.02
+v -31.99 -2.45 7.52
+v -32.04 -1.93 18.99
+v -32.38 -2.34 7.52
+v -32.52 -1.79 18.98
+v -32.78 -2.45 7.53
+v -33.01 -1.92 18.99
+v -33.09 -2.74 7.56
+v -33.38 -2.28 19.03
+v -33.22 -3.15 7.60
+v -33.22 -2.35 20.10
+v -32.93 -2.07 20.08
+v -32.54 -1.97 20.06
+v -32.17 -2.08 20.07
+v -31.91 -2.36 20.09
+v -31.82 -2.75 20.13
+v -31.94 -3.13 20.16
+v -32.23 -3.41 20.19
+v -33.52 -1.91 6.78
+v -32.38 -3.12 7.57
+v -33.59 -1.98 6.78
+v -32.45 -3.19 7.58
+v -33.55 -1.82 9.44
+v -33.63 -1.89 9.45
+v -32.41 -3.04 10.24
+v -32.48 -3.11 10.25
+v -31.15 -1.91 9.43
+v -31.22 -1.84 9.43
+v -32.43 -3.11 10.24
+v -32.49 -3.04 10.24
+v -33.67 -4.33 9.68
+v -33.74 -4.26 9.67
+v -31.12 -2.00 6.77
+v -32.39 -3.19 7.58
+v -33.64 -4.42 7.01
+v -33.70 -4.35 7.00
+v -32.46 -3.12 7.57
+v -31.18 -1.93 6.76
+v -28.67 -4.46 6.97
+v -28.59 -4.39 6.96
+v -28.70 -4.37 9.64
+v -28.63 -4.30 9.63
+v -30.21 -3.87 7.64
+v -29.82 -3.98 7.65
+v -30.45 -3.65 19.13
+v -30.79 -3.28 19.10
+v -30.49 -3.57 7.61
+v -30.90 -2.79 19.06
+v -30.70 -2.76 20.12
+v -30.62 -3.14 20.15
+v -29.96 -2.71 21.73
+v -30.35 -3.43 20.18
+v -29.98 -3.53 20.19
+v -29.98 -3.78 19.14
+v -29.49 -3.65 19.12
+v -29.42 -3.88 7.63
+v -29.11 -3.58 7.60
+v -29.12 -3.30 19.09
+v -28.98 -3.18 7.57
+v -28.96 -2.81 19.04
+v -29.07 -2.77 7.53
+v -29.07 -2.31 19.00
+v -29.35 -2.47 7.50
+v -29.41 -1.95 18.97
+v -29.74 -2.36 7.50
+v -29.88 -1.81 18.96
+v -30.15 -2.47 7.51
+v -30.37 -1.94 18.97
+v -30.45 -2.76 7.54
+v -30.74 -2.30 19.01
+v -30.58 -3.17 7.58
+v -30.58 -2.37 20.08
+v -30.29 -2.09 20.06
+v -29.91 -1.99 20.04
+v -29.53 -2.10 20.05
+v -29.27 -2.38 20.07
+v -29.19 -2.77 20.11
+v -29.31 -3.15 20.14
+v -29.60 -3.43 20.17
+v -30.88 -1.93 6.76
+v -29.74 -3.14 7.55
+v -30.95 -2.00 6.76
+v -29.81 -3.21 7.56
+v -30.92 -1.84 9.42
+v -30.99 -1.91 9.43
+v -29.77 -3.06 10.22
+v -29.85 -3.13 10.22
+v -28.51 -1.93 9.41
+v -28.58 -1.86 9.41
+v -29.79 -3.13 10.22
+v -29.86 -3.06 10.22
+v -31.04 -4.35 9.66
+v -31.10 -4.28 9.65
+v -28.48 -2.02 6.75
+v -29.76 -3.21 7.56
+v -31.00 -4.44 6.99
+v -31.07 -4.37 6.98
+v -29.82 -3.14 7.55
+v -28.54 -1.95 6.74
+# 183 vertices
+
+vn 0.69 -0.72 0.03
+vn -0.52 -0.85 0.01
+vn -0.01 -1.00 0.02
+vn -0.52 -0.85 0.11
+vn -0.89 -0.45 0.10
+vn -0.89 -0.46 -0.01
+vn -0.98 -0.20 0.08
+vn -0.94 -0.18 0.29
+vn -0.85 -0.42 0.32
+vn 0.32 -0.56 0.77
+vn -0.50 -0.79 0.34
+vn -0.01 -0.94 0.35
+vn -0.01 -0.99 0.12
+vn 0.49 -0.86 0.12
+vn 0.50 -0.87 0.02
+vn 0.86 -0.52 0.01
+vn 0.85 -0.51 0.12
+vn 1.00 -0.04 -0.00
+vn 0.99 -0.04 0.10
+vn 0.88 0.47 -0.02
+vn 0.88 0.47 0.08
+vn 0.52 0.85 -0.04
+vn 0.52 0.85 0.07
+vn 0.01 1.00 -0.05
+vn 0.01 1.00 0.06
+vn -0.48 0.87 -0.05
+vn -0.49 0.87 0.05
+vn -0.85 0.53 -0.04
+vn -0.85 0.53 0.06
+vn -0.95 0.29 -0.04
+vn -0.95 0.30 0.07
+vn -0.81 0.52 0.27
+vn -0.91 0.31 0.28
+vn -0.43 0.79 0.44
+vn -0.46 0.85 0.27
+vn 0.01 0.96 0.27
+vn 0.49 0.82 0.29
+vn 0.83 0.46 0.30
+vn 0.95 -0.02 0.32
+vn 0.82 -0.47 0.33
+vn 0.47 -0.81 0.34
+vn -0.01 -0.09 -1.00
+vn 0.25 -0.35 -0.90
+vn -0.02 -0.08 -1.00
+vn -0.27 0.19 -0.94
+vn -0.25 0.35 0.90
+vn 0.01 0.09 1.00
+vn 0.02 0.08 1.00
+vn 0.27 -0.19 0.94
+vn 0.73 0.68 -0.01
+vn 0.27 0.33 0.91
+vn -0.00 0.08 1.00
+vn -0.27 -0.17 0.95
+vn 0.27 0.17 -0.95
+vn 0.00 -0.08 -1.00
+vn -0.27 -0.33 -0.91
+vn -0.69 0.72 -0.03
+vn -0.73 -0.68 0.01
+vn -0.98 -0.21 -0.02
+vn -0.00 -0.09 -1.00
+vn 0.00 0.09 1.00
+# 61 vertex normals
+
+vt 0.71 0.65 0.00
+vt 0.81 0.65 0.00
+vt 0.64 0.57 0.00
+vt 0.64 0.58 0.00
+vt 0.83 0.57 0.00
+vt 0.85 0.57 0.00
+vt 0.89 0.58 0.00
+vt 0.85 0.58 0.00
+vt 0.83 0.58 0.00
+vt 0.64 0.59 0.00
+vt 0.83 0.59 0.00
+vt 0.64 0.60 0.00
+vt 0.83 0.60 0.00
+vt 0.64 0.61 0.00
+vt 0.83 0.61 0.00
+vt 0.85 0.60 0.00
+vt 0.85 0.61 0.00
+vt 0.89 0.60 0.00
+vt 0.85 0.59 0.00
+vt 0.39 0.73 0.00
+vt 0.39 0.74 0.00
+vt 0.39 0.72 0.00
+vt 0.37 0.73 0.00
+vt 0.37 0.72 0.00
+vt 0.38 0.71 0.00
+vt 0.75 0.65 0.00
+vt 0.69 0.65 0.00
+vt 0.98 0.63 0.00
+vt 0.91 0.63 0.00
+vt 0.98 0.66 0.00
+vt 0.91 0.66 0.00
+vt 0.98 0.70 0.00
+vt 0.91 0.70 0.00
+vt 0.37 0.74 0.00
+vt 0.38 0.74 0.00
+# 35 texture coords
+
+g P_51_Mustang_Right_Rockets
+f 80/38/120 81/38/120 82/39/120
+f 83/39/120 82/39/120 81/38/120
+f 84/40/121 85/41/122 86/42/123
+f 86/42/123 87/42/124 84/40/121
+f 88/40/125 84/40/121 87/42/124
+f 87/42/124 89/42/126 88/40/125
+f 89/42/126 87/42/124 90/43/127
+f 91/43/128 90/43/127 87/42/124
+f 90/43/127 91/43/128 92/44/129
+f 91/43/128 93/43/130 92/44/129
+f 93/43/130 94/45/131 92/44/129
+f 94/45/131 93/43/130 95/46/132
+f 95/46/132 96/46/133 94/45/131
+f 96/46/133 95/46/132 97/41/134
+f 97/41/134 98/41/135 96/46/133
+f 99/46/136 96/46/133 98/41/135
+f 98/41/135 100/47/137 99/46/136
+f 101/48/138 99/46/136 100/47/137
+f 100/47/137 102/47/139 101/48/138
+f 103/48/140 101/48/138 102/47/139
+f 87/42/124 86/42/123 91/43/128
+f 93/43/130 91/43/128 86/42/123
+f 86/42/123 95/46/132 93/43/130
+f 95/46/132 86/42/123 85/41/122
+f 85/41/122 97/41/134 95/46/132
+f 102/47/139 104/47/141 103/48/140
+f 105/48/142 103/48/140 104/47/141
+f 104/47/141 106/49/143 105/48/142
+f 107/50/144 105/48/142 106/49/143
+f 106/49/143 108/49/145 107/50/144
+f 109/50/146 107/50/144 108/49/145
+f 108/49/145 110/49/147 109/50/146
+f 111/50/148 109/50/146 110/49/147
+f 110/49/147 112/51/149 111/50/148
+f 89/52/150 111/50/148 112/51/149
+f 111/50/148 89/52/150 113/53/151
+f 90/54/152 113/53/151 89/52/150
+f 113/53/151 90/54/152 92/55/153
+f 114/53/154 113/53/151 92/55/153
+f 115/53/155 114/53/154 92/55/153
+f 114/53/154 115/53/155 109/50/146
+f 107/50/144 109/50/146 115/53/155
+f 115/53/155 116/56/156 107/50/144
+f 116/56/156 115/53/155 92/55/153
+f 105/48/142 107/50/144 116/56/156
+f 116/56/156 117/56/157 105/48/142
+f 103/48/140 105/48/142 117/56/157
+f 117/56/157 118/56/158 103/48/140
+f 101/48/138 103/48/140 118/56/158
+f 118/56/158 119/45/159 101/48/138
+f 99/46/136 101/48/138 119/45/159
+f 119/45/159 120/45/160 99/46/136
+f 96/46/133 99/46/136 120/45/160
+f 120/45/160 94/45/131 96/46/133
+f 94/45/131 120/45/160 92/44/129
+f 120/45/160 119/45/159 92/44/129
+f 119/45/159 118/56/158 92/44/129
+f 118/56/158 117/56/157 92/44/129
+f 117/56/157 116/56/156 92/44/129
+f 102/57/161 100/57/161 104/58/161
+f 100/57/161 97/59/161 104/58/161
+f 97/59/161 112/60/161 104/58/161
+f 84/61/161 112/60/161 97/59/161
+f 88/61/161 112/60/161 84/61/161
+f 98/59/161 97/59/161 100/57/161
+f 85/62/161 84/61/161 97/59/161
+f 121/39/162 122/63/161 123/39/162
+f 124/63/163 123/39/162 122/63/161
+f 124/63/163 122/63/161 80/64/164
+f 81/64/164 80/64/164 122/63/161
+f 125/39/165 126/39/165 127/63/166
+f 128/63/167 127/63/166 126/39/165
+f 127/63/166 128/63/167 83/64/168
+f 82/64/168 83/64/168 128/63/167
+f 121/65/169 125/66/169 122/67/169
+f 127/68/169 122/67/169 125/66/169
+f 122/67/169 127/68/169 81/69/169
+f 83/70/169 81/69/169 127/68/169
+f 129/39/170 130/39/170 131/63/171
+f 132/63/166 131/63/171 130/39/170
+f 131/63/171 132/63/166 133/64/172
+f 134/64/172 133/64/172 132/63/166
+f 135/65/120 129/66/120 136/67/120
+f 131/68/120 136/67/120 129/66/120
+f 136/67/120 131/68/120 137/69/120
+f 133/70/120 137/69/120 131/68/120
+f 137/64/173 138/64/173 136/63/174
+f 139/63/161 136/63/174 138/64/173
+f 139/63/161 140/39/175 136/63/174
+f 135/39/175 136/63/174 140/39/175
+f 138/65/176 134/66/176 139/67/176
+f 132/68/176 139/67/176 134/66/176
+f 139/67/176 132/68/176 140/69/176
+f 130/70/176 140/69/176 132/68/176
+f 80/65/177 82/66/177 124/67/177
+f 128/68/177 124/67/177 82/66/177
+f 124/67/177 128/68/177 123/69/177
+f 126/70/177 123/69/177 128/68/177
+f 121/38/176 123/38/176 125/39/176
+f 126/39/176 125/39/176 123/38/176
+f 138/38/177 137/38/177 134/39/177
+f 133/39/177 134/39/177 137/38/177
+f 135/38/169 140/38/169 129/39/169
+f 130/39/169 129/39/169 140/38/169
+f 109/50/146 111/50/148 114/53/154
+f 113/53/151 114/53/154 111/50/148
+f 112/40/178 88/40/125 89/42/126
+f 110/60/161 108/71/161 112/60/161
+f 112/60/161 108/71/161 104/58/161
+f 104/58/161 108/71/161 106/72/161
+f 141/38/120 142/38/120 143/39/120
+f 144/39/120 143/39/120 142/38/120
+f 145/40/121 146/41/122 147/42/123
+f 147/42/123 148/42/124 145/40/121
+f 149/40/125 145/40/121 148/42/124
+f 148/42/124 150/42/126 149/40/125
+f 150/42/126 148/42/124 151/43/127
+f 152/43/128 151/43/127 148/42/124
+f 151/43/127 152/43/128 153/44/129
+f 152/43/128 154/43/130 153/44/129
+f 154/43/130 155/45/131 153/44/129
+f 155/45/131 154/43/130 156/46/132
+f 156/46/132 157/46/133 155/45/131
+f 157/46/133 156/46/132 158/41/134
+f 158/41/134 159/41/135 157/46/133
+f 160/46/136 157/46/133 159/41/135
+f 159/41/135 161/47/137 160/46/136
+f 162/48/138 160/46/136 161/47/137
+f 161/47/137 163/47/139 162/48/138
+f 164/48/140 162/48/138 163/47/139
+f 148/42/124 147/42/123 152/43/128
+f 154/43/130 152/43/128 147/42/123
+f 147/42/123 156/46/132 154/43/130
+f 156/46/132 147/42/123 146/41/122
+f 146/41/122 158/41/134 156/46/132
+f 163/47/139 165/47/141 164/48/140
+f 166/48/142 164/48/140 165/47/141
+f 165/47/141 167/49/143 166/48/142
+f 168/50/144 166/48/142 167/49/143
+f 167/49/143 169/49/145 168/50/144
+f 170/50/146 168/50/144 169/49/145
+f 169/49/145 171/49/147 170/50/146
+f 172/50/148 170/50/146 171/49/147
+f 171/49/147 173/51/149 172/50/148
+f 150/52/150 172/50/148 173/51/149
+f 172/50/148 150/52/150 174/53/151
+f 151/54/152 174/53/151 150/52/150
+f 174/53/151 151/54/152 153/55/153
+f 175/53/154 174/53/151 153/55/153
+f 176/53/155 175/53/154 153/55/153
+f 175/53/154 176/53/155 170/50/146
+f 168/50/144 170/50/146 176/53/155
+f 176/53/155 177/56/156 168/50/144
+f 177/56/156 176/53/155 153/55/153
+f 166/48/142 168/50/144 177/56/156
+f 177/56/156 178/56/157 166/48/142
+f 164/48/140 166/48/142 178/56/157
+f 178/56/157 179/56/158 164/48/140
+f 162/48/138 164/48/140 179/56/158
+f 179/56/158 180/45/159 162/48/138
+f 160/46/136 162/48/138 180/45/159
+f 180/45/159 181/45/160 160/46/136
+f 157/46/133 160/46/136 181/45/160
+f 181/45/160 155/45/131 157/46/133
+f 155/45/131 181/45/160 153/44/129
+f 181/45/160 180/45/159 153/44/129
+f 180/45/159 179/56/158 153/44/129
+f 179/56/158 178/56/157 153/44/129
+f 178/56/157 177/56/156 153/44/129
+f 163/57/161 161/57/161 165/58/161
+f 161/57/161 158/59/161 165/58/161
+f 158/59/161 173/60/161 165/58/161
+f 145/61/161 173/60/161 158/59/161
+f 149/61/161 173/60/161 145/61/161
+f 159/59/161 158/59/161 161/57/161
+f 146/62/161 145/61/161 158/59/161
+f 182/39/162 183/63/161 184/39/162
+f 185/63/163 184/39/162 183/63/161
+f 185/63/163 183/63/161 141/64/164
+f 142/64/164 141/64/164 183/63/161
+f 186/39/165 187/39/165 188/63/166
+f 189/63/167 188/63/166 187/39/165
+f 188/63/166 189/63/167 144/64/168
+f 143/64/168 144/64/168 189/63/167
+f 182/65/169 186/66/169 183/67/169
+f 188/68/169 183/67/169 186/66/169
+f 183/67/169 188/68/169 142/69/169
+f 144/70/169 142/69/169 188/68/169
+f 190/39/170 191/39/170 192/63/171
+f 193/63/166 192/63/171 191/39/170
+f 192/63/171 193/63/166 194/64/172
+f 195/64/172 194/64/172 193/63/166
+f 196/65/120 190/66/120 197/67/120
+f 192/68/120 197/67/120 190/66/120
+f 197/67/120 192/68/120 198/69/120
+f 194/70/120 198/69/120 192/68/120
+f 198/64/173 199/64/173 197/63/174
+f 200/63/179 197/63/174 199/64/173
+f 200/63/179 201/39/175 197/63/174
+f 196/39/175 197/63/174 201/39/175
+f 199/65/176 195/66/176 200/67/176
+f 193/68/176 200/67/176 195/66/176
+f 200/67/176 193/68/176 201/69/176
+f 191/70/176 201/69/176 193/68/176
+f 141/65/177 143/66/177 185/67/177
+f 189/68/177 185/67/177 143/66/177
+f 185/67/177 189/68/177 184/69/177
+f 187/70/177 184/69/177 189/68/177
+f 182/38/176 184/38/176 186/39/176
+f 187/39/176 186/39/176 184/38/176
+f 199/38/177 198/38/177 195/39/177
+f 194/39/177 195/39/177 198/38/177
+f 196/38/169 201/38/169 190/39/169
+f 191/39/169 190/39/169 201/38/169
+f 170/50/146 172/50/148 175/53/154
+f 174/53/151 175/53/154 172/50/148
+f 173/40/178 149/40/125 150/42/126
+f 171/60/161 169/71/161 173/60/161
+f 173/60/161 169/71/161 165/58/161
+f 165/58/161 169/71/161 167/72/161
+f 202/38/120 203/38/120 204/39/120
+f 205/39/120 204/39/120 203/38/120
+f 206/40/121 207/41/122 208/42/123
+f 208/42/123 209/42/124 206/40/121
+f 210/40/125 206/40/121 209/42/124
+f 209/42/124 211/42/126 210/40/125
+f 211/42/126 209/42/124 212/43/127
+f 213/43/128 212/43/127 209/42/124
+f 212/43/127 213/43/128 214/44/129
+f 213/43/128 215/43/130 214/44/129
+f 215/43/130 216/45/131 214/44/129
+f 216/45/131 215/43/130 217/46/132
+f 217/46/132 218/46/133 216/45/131
+f 218/46/133 217/46/132 219/41/134
+f 219/41/134 220/41/135 218/46/133
+f 221/46/136 218/46/133 220/41/135
+f 220/41/135 222/47/137 221/46/136
+f 223/48/138 221/46/136 222/47/137
+f 222/47/137 224/47/139 223/48/138
+f 225/48/140 223/48/138 224/47/139
+f 209/42/124 208/42/123 213/43/128
+f 215/43/130 213/43/128 208/42/123
+f 208/42/123 217/46/132 215/43/130
+f 217/46/132 208/42/123 207/41/122
+f 207/41/122 219/41/134 217/46/132
+f 224/47/139 226/47/141 225/48/140
+f 227/48/142 225/48/140 226/47/141
+f 226/47/141 228/49/143 227/48/142
+f 229/50/144 227/48/142 228/49/143
+f 228/49/143 230/49/145 229/50/144
+f 231/50/146 229/50/144 230/49/145
+f 230/49/145 232/49/147 231/50/146
+f 233/50/148 231/50/146 232/49/147
+f 232/49/147 234/51/149 233/50/148
+f 211/52/150 233/50/148 234/51/149
+f 233/50/148 211/52/150 235/53/151
+f 212/54/152 235/53/151 211/52/150
+f 235/53/151 212/54/152 214/55/153
+f 236/53/154 235/53/151 214/55/153
+f 237/53/155 236/53/154 214/55/153
+f 236/53/154 237/53/155 231/50/146
+f 229/50/144 231/50/146 237/53/155
+f 237/53/155 238/56/156 229/50/144
+f 238/56/156 237/53/155 214/55/153
+f 227/48/142 229/50/144 238/56/156
+f 238/56/156 239/56/157 227/48/142
+f 225/48/140 227/48/142 239/56/157
+f 239/56/157 240/56/158 225/48/140
+f 223/48/138 225/48/140 240/56/158
+f 240/56/158 241/45/159 223/48/138
+f 221/46/136 223/48/138 241/45/159
+f 241/45/159 242/45/160 221/46/136
+f 218/46/133 221/46/136 242/45/160
+f 242/45/160 216/45/131 218/46/133
+f 216/45/131 242/45/160 214/44/129
+f 242/45/160 241/45/159 214/44/129
+f 241/45/159 240/56/158 214/44/129
+f 240/56/158 239/56/157 214/44/129
+f 239/56/157 238/56/156 214/44/129
+f 224/57/161 222/57/161 226/58/161
+f 222/57/161 219/59/161 226/58/161
+f 219/59/161 234/60/161 226/58/161
+f 206/61/161 234/60/161 219/59/161
+f 210/61/161 234/60/161 206/61/161
+f 220/59/161 219/59/161 222/57/161
+f 207/62/161 206/61/161 219/59/161
+f 243/39/162 244/63/161 245/39/162
+f 246/63/163 245/39/162 244/63/161
+f 246/63/163 244/63/161 202/64/164
+f 203/64/164 202/64/164 244/63/161
+f 247/39/165 248/39/165 249/63/166
+f 250/63/167 249/63/166 248/39/165
+f 249/63/166 250/63/167 205/64/168
+f 204/64/168 205/64/168 250/63/167
+f 243/65/169 247/66/169 244/67/169
+f 249/68/169 244/67/169 247/66/169
+f 244/67/169 249/68/169 203/69/169
+f 205/70/169 203/69/169 249/68/169
+f 251/39/170 252/39/170 253/63/171
+f 254/63/180 253/63/171 252/39/170
+f 253/63/171 254/63/180 255/64/172
+f 256/64/172 255/64/172 254/63/180
+f 257/65/120 251/66/120 258/67/120
+f 253/68/120 258/67/120 251/66/120
+f 258/67/120 253/68/120 259/69/120
+f 255/70/120 259/69/120 253/68/120
+f 259/64/173 260/64/173 258/63/174
+f 261/63/161 258/63/174 260/64/173
+f 261/63/161 262/39/175 258/63/174
+f 257/39/175 258/63/174 262/39/175
+f 260/65/176 256/66/176 261/67/176
+f 254/68/176 261/67/176 256/66/176
+f 261/67/176 254/68/176 262/69/176
+f 252/70/176 262/69/176 254/68/176
+f 202/65/177 204/66/177 246/67/177
+f 250/68/177 246/67/177 204/66/177
+f 246/67/177 250/68/177 245/69/177
+f 248/70/177 245/69/177 250/68/177
+f 243/38/176 245/38/176 247/39/176
+f 248/39/176 247/39/176 245/38/176
+f 260/38/177 259/38/177 256/39/177
+f 255/39/177 256/39/177 259/38/177
+f 257/38/169 262/38/169 251/39/169
+f 252/39/169 251/39/169 262/38/169
+f 231/50/146 233/50/148 236/53/154
+f 235/53/151 236/53/154 233/50/148
+f 234/40/178 210/40/125 211/42/126
+f 232/60/161 230/71/161 234/60/161
+f 234/60/161 230/71/161 226/58/161
+f 226/58/161 230/71/161 228/72/161
+# 330 faces
+
+#
+# object P_51_Mustang_Right_Wing
+#
+
+v -48.14 -0.16 8.05
+v -48.99 -0.03 6.01
+v -48.12 0.14 8.01
+v -29.31 0.19 6.44
+v -37.50 0.25 7.12
+v -30.21 0.47 8.72
+v -37.42 0.46 8.93
+v -44.57 0.16 7.71
+v -44.63 0.35 8.79
+v -47.59 0.24 8.96
+v -44.79 0.51 12.04
+v -47.99 0.25 12.03
+v -45.36 0.48 14.13
+v -48.50 0.36 13.97
+v -48.43 0.22 15.21
+v -49.84 0.07 14.16
+v -49.74 -0.04 15.39
+v -50.25 -0.08 14.12
+v -50.04 -0.09 15.40
+v -49.58 -0.10 16.12
+v -48.28 -0.12 16.74
+v -45.18 0.20 15.46
+v -29.52 0.68 12.85
+v -45.01 -0.15 17.06
+v -37.84 0.31 16.08
+v -37.82 -0.24 17.66
+v -30.95 -0.31 18.28
+v -29.88 0.43 16.64
+v -30.50 0.73 14.92
+v -37.93 0.62 14.50
+v -37.87 0.66 12.48
+v -37.95 -1.08 12.58
+v -38.02 -1.05 14.59
+v -44.85 -0.90 12.10
+v -29.86 -1.33 15.03
+v -37.90 -0.94 16.16
+v -29.38 -1.15 16.73
+v -44.96 -0.79 15.49
+v -48.45 -0.33 15.36
+v -45.08 -0.88 14.18
+v -48.53 -0.34 14.14
+v -48.02 -0.34 12.18
+v -49.75 -0.18 12.22
+v -49.14 -0.12 8.71
+v -47.61 -0.23 9.09
+v -44.67 -0.62 8.83
+v -44.59 -0.38 7.72
+v -37.48 -0.85 9.01
+v -37.54 -0.59 7.18
+v -30.23 -1.03 8.80
+v -29.34 -0.65 6.49
+v -29.61 -1.28 12.96
+v -49.23 0.13 8.56
+v -49.74 0.14 12.03
+v -50.13 -0.08 12.02
+v -49.58 -0.07 8.63
+v -49.75 -0.17 15.42
+v -49.85 -0.23 14.35
+v -29.74 -1.25 16.26
+v -29.78 -2.23 16.37
+v -29.67 -1.06 11.16
+v -29.74 -2.36 12.28
+v -29.92 -2.36 12.29
+v -29.96 -2.23 16.38
+v -29.85 -1.06 11.16
+v -29.92 -1.24 16.26
+v -32.53 -1.18 16.28
+v -32.58 -2.21 16.40
+v -32.35 -1.18 16.27
+v -32.40 -2.21 16.39
+v -32.54 -2.34 12.31
+v -32.36 -2.34 12.30
+v -32.46 -0.98 11.17
+v -32.28 -0.98 11.17
+v -35.27 -1.05 16.29
+v -35.32 -2.19 16.42
+v -35.09 -1.06 16.29
+v -35.15 -2.19 16.42
+v -35.28 -2.32 12.33
+v -35.11 -2.32 12.33
+v -35.21 -0.94 11.19
+v -35.03 -0.95 11.19
+v -29.68 -0.25 3.04
+v -21.55 0.05 5.47
+v -22.30 -1.51 12.76
+v -22.41 -1.49 15.29
+v -22.62 -1.36 17.25
+v -23.33 -0.39 18.94
+v -19.50 -0.44 19.26
+v -19.00 -1.50 17.12
+v -14.13 -0.49 20.28
+v -13.50 -1.56 17.59
+v -14.82 -1.75 15.41
+v -18.80 -1.58 15.14
+v -18.58 -1.57 12.58
+v -22.41 -1.16 8.70
+v -21.59 -0.77 5.53
+v -18.71 -1.36 9.03
+v -18.35 -1.00 6.58
+v -14.07 -1.37 9.24
+v -12.73 -0.99 6.36
+v -18.23 -0.74 5.10
+v -12.47 -0.77 4.38
+v -12.44 -0.05 4.34
+v -18.19 -0.02 5.06
+v -12.67 0.19 6.29
+v -18.29 0.22 6.52
+v -14.04 0.46 9.14
+v -18.63 0.56 8.92
+v -13.44 0.66 12.23
+v -18.47 0.74 12.46
+v -22.34 0.49 8.60
+v -22.20 0.75 12.64
+v -22.31 0.72 15.17
+v -22.53 0.53 17.14
+v -18.91 0.57 17.52
+v -13.40 0.59 18.05
+v -14.35 0.80 15.32
+v -18.69 0.73 15.02
+v -18.32 -0.76 20.39
+v -18.70 -0.53 20.37
+v -18.30 -0.83 18.46
+v -18.68 -0.59 18.44
+v -18.68 -0.07 20.33
+v -18.66 -0.13 18.40
+v -18.28 0.16 20.30
+v -18.26 0.10 18.37
+v -17.89 -0.08 20.32
+v -17.87 -0.14 18.39
+v -17.92 -0.54 20.36
+v -17.90 -0.60 18.43
+v -13.54 -1.60 12.35
+v -19.63 -0.07 20.24
+v -20.01 0.17 20.22
+v -19.65 -0.53 20.28
+v -20.44 -0.52 20.29
+v -20.05 -0.75 20.31
+v -20.41 -0.06 20.25
+v -21.96 -0.75 20.15
+v -22.34 -0.51 20.13
+v -21.94 -0.81 18.22
+v -22.32 -0.57 18.21
+v -22.32 -0.05 20.09
+v -22.30 -0.11 18.16
+v -21.92 0.18 20.07
+v -21.90 0.11 18.14
+v -21.53 -0.06 20.08
+v -21.51 -0.12 18.16
+v -21.56 -0.52 20.13
+v -21.54 -0.58 18.20
+v -26.32 -1.30 15.42
+v -26.39 -2.57 15.66
+v -26.01 -1.30 15.43
+v -26.08 -2.57 15.66
+v -26.38 -2.72 15.16
+v -26.07 -2.72 15.16
+v -25.97 -2.76 11.48
+v -26.29 -2.76 11.48
+v -26.19 -1.32 10.34
+v -25.88 -1.32 10.34
+v -20.03 -0.82 18.38
+v -20.42 -0.58 18.36
+v -20.39 -0.12 18.32
+v -19.99 0.11 18.29
+v -19.61 -0.13 18.31
+v -19.63 -0.59 18.35
+v -24.91 -3.09 9.88
+v -26.21 -2.73 9.87
+v -24.99 -3.07 16.55
+v -26.29 -2.70 16.54
+v -27.54 -3.07 9.90
+v -27.63 -3.05 16.58
+v -28.55 -4.05 9.98
+v -28.64 -4.02 16.65
+v -28.97 -5.38 10.07
+v -29.05 -5.36 16.74
+v -28.68 -6.73 10.15
+v -28.76 -6.70 16.82
+v -27.76 -7.71 10.20
+v -27.85 -7.69 16.87
+v -26.46 -8.08 10.21
+v -26.54 -8.06 16.88
+v -25.13 -7.74 10.18
+v -25.21 -7.71 16.85
+v -24.11 -6.76 10.11
+v -24.20 -6.73 16.78
+v -23.70 -5.42 10.02
+v -23.78 -5.40 16.69
+v -23.99 -4.08 9.93
+v -24.07 -4.06 16.60
+v -28.86 -5.35 18.00
+v -28.59 -6.59 18.07
+v -27.75 -7.50 18.12
+v -26.55 -7.84 18.13
+v -25.32 -7.52 18.10
+v -24.39 -6.62 18.03
+v -24.00 -5.39 17.95
+v -24.27 -4.15 17.87
+v -25.12 -3.24 17.82
+v -26.32 -2.90 17.81
+v -28.10 -6.30 19.61
+v -27.46 -6.99 19.65
+v -27.36 -5.86 20.77
+v -27.47 -5.35 20.74
+v -28.31 -5.35 19.56
+v -27.55 -3.23 17.85
+v -28.48 -4.12 17.91
+v -28.01 -4.41 19.49
+v -27.31 -4.84 20.70
+v -26.47 -5.36 21.07
+v -27.01 -6.24 20.79
+v -26.54 -7.25 19.66
+v -25.60 -7.01 19.63
+v -24.89 -6.32 19.58
+v -24.60 -5.38 19.52
+v -24.80 -4.44 19.46
+v -25.45 -3.74 19.42
+v -26.36 -3.48 19.42
+v -27.30 -3.73 19.44
+v -26.93 -4.47 20.68
+v -26.42 -4.34 20.66
+v -25.92 -4.48 20.67
+v -25.57 -4.86 20.69
+v -25.46 -5.37 20.72
+v -25.62 -5.88 20.75
+v -26.01 -6.25 20.78
+v -26.52 -6.38 20.79
+v -27.02 -4.02 6.72
+v -26.22 -3.82 6.70
+v -25.44 -4.04 6.71
+v -24.89 -4.63 6.74
+v -24.72 -5.43 6.79
+v -24.97 -6.23 6.84
+v -25.57 -6.81 6.89
+v -26.37 -7.02 6.91
+v -27.15 -6.80 6.90
+v -27.70 -6.21 6.87
+v -26.53 -4.91 4.15
+v -26.23 -4.84 4.15
+v -27.87 -5.41 6.82
+v -27.62 -4.61 6.77
+v -26.75 -5.13 4.17
+v -26.26 -5.43 3.93
+v -25.95 -4.92 4.15
+v -25.74 -5.14 4.16
+v -25.68 -5.43 4.18
+v -25.77 -5.73 4.20
+v -25.99 -5.94 4.21
+v -26.29 -6.02 4.22
+v -26.58 -5.94 4.22
+v -26.78 -5.72 4.21
+v -26.85 -5.42 4.19
+# 252 vertices
+
+vn 0.92 -0.09 -0.39
+vn -0.00 0.99 -0.12
+vn -0.01 0.99 -0.11
+vn -0.00 1.00 -0.09
+vn -0.01 1.00 -0.09
+vn -0.03 0.99 -0.17
+vn -0.03 0.99 -0.12
+vn -0.04 1.00 -0.06
+vn -0.04 1.00 -0.02
+vn -0.06 1.00 -0.03
+vn -0.03 1.00 0.09
+vn -0.11 0.99 0.03
+vn -0.09 0.98 0.16
+vn -0.28 0.96 0.07
+vn -0.18 0.98 0.09
+vn -0.34 0.94 0.05
+vn -0.16 0.99 0.06
+vn -0.14 0.98 0.16
+vn -0.04 0.97 0.22
+vn -0.02 0.98 0.21
+vn -0.01 1.00 -0.04
+vn -0.02 0.97 0.22
+vn -0.02 0.96 0.26
+vn -0.02 0.94 0.34
+vn -0.04 0.92 0.38
+vn -0.03 0.96 0.28
+vn -0.02 1.00 0.08
+vn -0.02 0.99 0.10
+vn -0.01 1.00 -0.02
+vn -0.03 -1.00 -0.03
+vn -0.03 -1.00 0.04
+vn -0.09 -0.99 -0.04
+vn -0.03 -1.00 0.05
+vn -0.04 -0.97 0.25
+vn -0.05 -0.90 0.43
+vn -0.05 -0.91 0.42
+vn -0.05 -0.93 0.38
+vn -0.07 -0.97 0.21
+vn -0.11 -0.97 0.22
+vn -0.13 -0.99 0.07
+vn -0.09 -1.00 0.03
+vn -0.12 -0.99 -0.01
+vn -0.13 -0.99 -0.04
+vn -0.09 -1.00 -0.03
+vn -0.06 -1.00 -0.04
+vn -0.11 -0.99 -0.04
+vn -0.08 -1.00 -0.04
+vn -0.07 -0.99 -0.14
+vn -0.05 -0.98 -0.21
+vn -0.03 -0.99 -0.10
+vn -0.03 -0.99 -0.14
+vn -0.02 -0.99 -0.11
+vn -0.02 -0.99 -0.17
+vn -0.02 -1.00 -0.04
+vn -0.28 0.96 -0.07
+vn -0.29 0.96 -0.04
+vn -0.47 0.88 -0.05
+vn -0.51 0.86 -0.09
+vn -0.15 0.99 -0.08
+vn -0.04 1.00 -0.08
+vn -0.09 -0.98 0.16
+vn -0.13 -0.98 0.15
+vn -0.10 -0.98 0.15
+vn -0.24 -0.96 0.12
+vn -0.28 -0.96 0.08
+vn -0.33 -0.94 0.00
+vn -0.37 -0.93 0.04
+vn -0.26 -0.97 -0.03
+vn -0.11 -0.99 0.06
+vn -0.09 -1.00 0.01
+vn 1.00 -0.05 0.01
+vn -1.00 0.05 -0.01
+vn 0.02 0.12 0.99
+vn -0.01 -1.00 0.03
+vn -0.02 -0.64 -0.77
+vn 0.02 0.11 0.99
+vn -0.08 -0.05 -1.00
+vn -0.08 0.09 -0.99
+vn 1.00 0.02 -0.07
+vn -0.08 -0.06 -0.99
+vn -0.08 -0.08 -0.99
+vn -0.08 0.03 -1.00
+vn -0.10 -0.12 -0.99
+vn 0.93 0.01 0.36
+vn 0.93 -0.02 0.37
+vn 0.99 -0.05 -0.15
+vn 0.99 -0.02 -0.17
+vn 0.87 0.29 0.40
+vn 0.99 -0.04 0.12
+vn 0.92 0.27 -0.29
+vn 0.75 0.27 0.61
+vn -0.02 -0.66 -0.75
+vn 0.99 -0.05 -0.10
+vn -0.02 -1.00 -0.06
+vn -0.03 -0.99 -0.11
+vn -0.04 -0.99 -0.11
+vn -0.01 0.99 -0.13
+vn -0.01 1.00 -0.08
+vn -0.92 0.09 0.39
+vn 0.08 0.12 0.99
+vn 0.08 0.06 0.99
+vn -0.12 -0.06 -0.99
+vn -0.03 -1.00 -0.04
+vn -0.03 -1.00 0.03
+vn -0.02 -1.00 0.04
+vn -0.04 -0.96 0.29
+vn -0.04 -0.96 0.28
+vn -0.06 -0.88 0.47
+vn -0.06 -0.90 0.44
+vn -0.04 -0.97 0.23
+vn -0.05 -0.92 0.38
+vn -0.03 -0.96 0.26
+vn -0.02 -1.00 0.03
+vn -0.03 -1.00 0.01
+vn -0.02 -0.99 -0.16
+vn -0.02 -0.99 -0.10
+vn -0.01 -0.99 -0.16
+vn -0.00 -0.99 -0.11
+vn -0.01 -0.99 -0.13
+vn -0.01 -0.99 -0.17
+vn -0.01 0.99 -0.12
+vn -0.00 0.99 -0.16
+vn 0.00 0.99 -0.14
+vn 0.02 1.00 -0.09
+vn 0.01 1.00 -0.10
+vn 0.02 1.00 -0.05
+vn 0.00 1.00 -0.03
+vn -0.00 1.00 -0.10
+vn -0.01 1.00 -0.03
+vn -0.00 1.00 -0.03
+vn -0.01 1.00 0.05
+vn -0.00 1.00 0.08
+vn -0.02 0.96 0.29
+vn -0.03 0.96 0.27
+vn -0.03 0.90 0.44
+vn -0.07 0.88 0.47
+vn -0.04 0.96 0.28
+vn -0.05 0.90 0.43
+vn -0.01 1.00 0.03
+vn -0.88 -0.48 0.01
+vn -0.89 -0.46 0.01
+vn -0.86 0.51 -0.03
+vn -0.84 0.54 -0.03
+vn 0.01 1.00 -0.03
+vn 0.02 1.00 -0.03
+vn 0.89 0.46 -0.01
+vn 0.88 0.48 -0.01
+vn 0.84 -0.54 0.03
+vn 0.86 -0.51 0.03
+vn -0.00 0.99 -0.14
+vn -0.00 0.99 -0.13
+vn -0.00 1.00 -0.08
+vn -0.01 -1.00 -0.06
+vn 0.01 0.09 1.00
+vn -0.00 0.18 0.98
+vn -0.01 -0.96 0.29
+vn -0.01 -1.00 0.01
+vn -0.00 -0.62 -0.78
+vn -0.02 0.92 0.40
+vn -0.05 -0.90 0.44
+vn 1.00 -0.05 0.03
+vn -1.00 0.05 -0.03
+vn 0.99 -0.04 0.13
+vn 0.98 -0.05 -0.17
+vn 0.98 -0.02 -0.19
+vn 0.91 0.01 0.42
+vn 0.90 -0.02 0.43
+vn 0.91 -0.15 0.37
+vn 0.96 -0.03 0.29
+vn 0.94 0.03 -0.33
+vn 0.85 -0.17 -0.50
+vn 0.96 -0.10 0.27
+vn -0.75 -0.27 -0.61
+vn -0.93 0.02 -0.37
+vn -0.93 -0.01 -0.36
+vn -0.99 0.02 0.15
+vn -0.99 0.05 0.16
+vn -0.99 0.04 -0.12
+vn -0.87 -0.29 -0.40
+vn -0.92 -0.27 0.29
+vn 0.52 0.85 0.00
+vn 0.01 1.00 -0.00
+vn -0.48 0.88 -0.01
+vn -0.50 0.87 -0.01
+vn -0.85 0.53 -0.01
+vn -0.86 0.52 -0.01
+vn -1.00 0.03 -0.01
+vn -0.89 -0.46 -0.01
+vn -0.88 -0.47 -0.01
+vn -0.52 -0.85 -0.00
+vn -0.01 -1.00 0.00
+vn 0.50 -0.87 0.01
+vn 0.48 -0.88 0.01
+vn 0.86 -0.52 0.01
+vn 0.85 -0.53 0.01
+vn 1.00 -0.03 0.01
+vn 0.88 0.47 0.01
+vn 0.89 0.46 0.01
+vn -0.99 0.06 0.15
+vn -0.88 -0.44 0.16
+vn -0.97 0.06 0.24
+vn -0.86 -0.44 0.25
+vn -0.52 -0.84 0.17
+vn -0.51 -0.82 0.26
+vn -0.01 -0.99 0.17
+vn -0.01 -0.96 0.26
+vn 0.49 -0.85 0.17
+vn 0.48 -0.84 0.26
+vn 0.85 -0.50 0.17
+vn 0.83 -0.50 0.26
+vn 0.98 -0.02 0.17
+vn 0.96 -0.03 0.26
+vn 0.87 0.47 0.17
+vn 0.85 0.46 0.26
+vn 0.51 0.84 0.17
+vn 0.50 0.83 0.26
+vn 0.02 0.99 0.16
+vn 0.01 0.97 0.25
+vn -0.79 -0.39 0.47
+vn -0.47 -0.74 0.48
+vn -0.55 -0.24 0.80
+vn -0.62 0.08 0.78
+vn -0.89 0.07 0.45
+vn -0.47 0.87 0.15
+vn -0.47 0.85 0.24
+vn -0.83 0.54 0.15
+vn -0.82 0.52 0.23
+vn -0.75 0.49 0.44
+vn -0.53 0.37 0.76
+vn 0.01 0.06 1.00
+vn -0.32 -0.49 0.81
+vn -0.01 -0.88 0.48
+vn 0.45 -0.76 0.47
+vn 0.76 -0.44 0.47
+vn 0.89 -0.01 0.46
+vn 0.78 0.43 0.46
+vn 0.45 0.76 0.46
+vn 0.01 0.89 0.45
+vn -0.43 0.79 0.44
+vn -0.30 0.58 0.76
+vn 0.01 0.65 0.76
+vn 0.32 0.56 0.76
+vn 0.55 0.33 0.77
+vn 0.63 0.02 0.78
+vn 0.54 -0.29 0.79
+vn 0.32 -0.51 0.80
+vn 0.00 -0.59 0.81
+vn -0.48 0.82 -0.32
+vn 0.01 0.95 -0.33
+vn -0.47 0.81 -0.34
+vn 0.01 0.94 -0.35
+vn 0.50 0.80 -0.32
+vn 0.50 0.80 -0.34
+vn 0.85 0.42 -0.31
+vn 0.84 0.42 -0.33
+vn 0.95 -0.07 -0.30
+vn 0.94 -0.06 -0.32
+vn 0.80 -0.52 -0.29
+vn 0.80 -0.51 -0.31
+vn 0.45 -0.84 -0.30
+vn 0.45 -0.83 -0.32
+vn -0.02 -0.95 -0.31
+vn -0.01 -0.95 -0.33
+vn -0.49 -0.81 -0.32
+vn -0.48 -0.81 -0.34
+vn -0.83 -0.46 -0.32
+vn -0.83 -0.45 -0.34
+vn -0.38 0.63 -0.68
+vn 0.00 0.73 -0.69
+vn -0.95 0.01 -0.32
+vn -0.94 0.02 -0.34
+vn -0.82 0.47 -0.32
+vn -0.81 0.48 -0.34
+vn -0.65 0.36 -0.67
+vn -0.01 -0.05 -1.00
+vn 0.39 0.61 -0.68
+vn 0.67 0.31 -0.67
+vn 0.75 -0.07 -0.65
+vn 0.64 -0.43 -0.64
+vn 0.36 -0.68 -0.63
+vn -0.01 -0.77 -0.64
+vn -0.39 -0.66 -0.64
+vn -0.66 -0.38 -0.65
+vn -0.75 -0.00 -0.66
+# 284 vertex normals
+
+vt 0.50 0.03 0.00
+vt 0.49 0.03 0.00
+vt 0.71 0.21 0.00
+vt 0.82 0.22 0.00
+vt 0.73 0.24 0.00
+vt 0.82 0.24 0.00
+vt 0.92 0.23 0.00
+vt 0.92 0.25 0.00
+vt 0.96 0.24 0.00
+vt 0.92 0.29 0.00
+vt 0.96 0.29 0.00
+vt 0.93 0.32 0.00
+vt 0.97 0.32 0.00
+vt 0.97 0.34 0.00
+vt 0.99 0.32 0.00
+vt 0.99 0.34 0.00
+vt 0.98 0.35 0.00
+vt 0.97 0.37 0.00
+vt 0.92 0.35 0.00
+vt 0.72 0.31 0.00
+vt 0.92 0.37 0.00
+vt 0.83 0.36 0.00
+vt 0.83 0.38 0.00
+vt 0.73 0.40 0.00
+vt 0.72 0.37 0.00
+vt 0.73 0.34 0.00
+vt 0.83 0.33 0.00
+vt 0.83 0.30 0.00
+vt 0.12 0.42 0.00
+vt 0.14 0.43 0.00
+vt 0.10 0.50 0.00
+vt 0.16 0.34 0.00
+vt 0.16 0.43 0.00
+vt 0.19 0.34 0.00
+vt 0.20 0.36 0.00
+vt 0.18 0.43 0.00
+vt 0.16 0.51 0.00
+vt 0.14 0.50 0.00
+vt 0.15 0.54 0.00
+vt 0.13 0.54 0.00
+vt 0.12 0.50 0.00
+vt 0.12 0.54 0.00
+vt 0.09 0.53 0.00
+vt 0.09 0.55 0.00
+vt 0.05 0.54 0.00
+vt 0.05 0.52 0.00
+vt 0.04 0.52 0.00
+vt 0.06 0.49 0.00
+vt 0.01 0.53 0.00
+vt 0.04 0.49 0.00
+vt 0.07 0.41 0.00
+vt 0.05 0.41 0.00
+vt 0.08 0.33 0.00
+vt 0.05 0.32 0.00
+vt 0.14 0.33 0.00
+vt 0.98 0.23 0.00
+vt 0.99 0.29 0.00
+vt 0.98 0.19 0.00
+vt 0.96 0.23 0.00
+vt 0.14 0.56 0.00
+vt 0.13 0.56 0.00
+vt 0.11 0.56 0.00
+vt 0.12 0.55 0.00
+vt 0.04 0.54 0.00
+vt 0.77 0.13 0.00
+vt 0.77 0.11 0.00
+vt 0.87 0.13 0.00
+vt 0.85 0.11 0.00
+vt 0.01 0.74 0.00
+vt 0.52 0.02 0.00
+vt 0.65 0.02 0.00
+vt 0.52 0.01 0.00
+vt 0.65 0.01 0.00
+vt 0.03 0.73 0.00
+vt 0.04 0.73 0.00
+vt 0.56 0.01 0.00
+vt 0.49 0.01 0.00
+vt 0.47 0.01 0.00
+vt 0.56 0.02 0.00
+vt 0.19 0.51 0.00
+vt 0.20 0.49 0.00
+vt 0.22 0.51 0.00
+vt 0.21 0.49 0.00
+vt 0.20 0.55 0.00
+vt 0.23 0.54 0.00
+vt 0.24 0.56 0.00
+vt 0.20 0.56 0.00
+vt 0.20 0.58 0.00
+vt 0.23 0.57 0.00
+vt 0.22 0.59 0.00
+vt 0.51 0.02 0.00
+vt 0.51 0.03 0.00
+vt 0.48 0.02 0.00
+vt 0.01 0.32 0.00
+vt 0.72 0.15 0.00
+vt 0.96 0.22 0.00
+vt 0.48 0.03 0.00
+vt 0.48 0.01 0.00
+vt 0.59 0.01 0.00
+vt 0.15 0.26 0.00
+vt 0.18 0.26 0.00
+vt 0.21 0.27 0.00
+vt 0.23 0.28 0.00
+vt 0.24 0.24 0.00
+vt 0.21 0.23 0.00
+vt 0.26 0.18 0.00
+vt 0.23 0.17 0.00
+vt 0.20 0.18 0.00
+vt 0.19 0.22 0.00
+vt 0.15 0.22 0.00
+vt 0.09 0.25 0.00
+vt 0.06 0.24 0.00
+vt 0.11 0.21 0.00
+vt 0.07 0.20 0.00
+vt 0.12 0.16 0.00
+vt 0.08 0.14 0.00
+vt 0.06 0.20 0.00
+vt 0.06 0.14 0.00
+vt 0.49 0.18 0.00
+vt 0.56 0.19 0.00
+vt 0.49 0.21 0.00
+vt 0.57 0.21 0.00
+vt 0.51 0.26 0.00
+vt 0.57 0.25 0.00
+vt 0.50 0.31 0.00
+vt 0.57 0.31 0.00
+vt 0.62 0.24 0.00
+vt 0.62 0.31 0.00
+vt 0.62 0.35 0.00
+vt 0.62 0.38 0.00
+vt 0.63 0.41 0.00
+vt 0.58 0.42 0.00
+vt 0.57 0.39 0.00
+vt 0.51 0.43 0.00
+vt 0.50 0.40 0.00
+vt 0.51 0.36 0.00
+vt 0.57 0.35 0.00
+vt 0.25 0.71 0.00
+vt 0.25 0.70 0.00
+vt 0.39 0.71 0.00
+vt 0.39 0.70 0.00
+vt 0.25 0.69 0.00
+vt 0.39 0.69 0.00
+vt 0.25 0.68 0.00
+vt 0.39 0.68 0.00
+vt 0.61 0.19 0.00
+vt 0.16 0.16 0.00
+vt 0.39 0.72 0.00
+vt 0.38 0.71 0.00
+vt 0.39 0.73 0.00
+vt 0.37 0.73 0.00
+vt 0.37 0.72 0.00
+vt 0.38 0.74 0.00
+vt 0.60 0.01 0.00
+vt 0.59 0.02 0.00
+vt 0.02 0.73 0.00
+vt 0.63 0.02 0.00
+vt 0.60 0.02 0.00
+vt 0.63 0.01 0.00
+vt 0.78 0.11 0.00
+vt 0.21 0.50 0.00
+vt 0.20 0.50 0.00
+vt 0.24 0.54 0.00
+vt 0.23 0.52 0.00
+vt 0.19 0.54 0.00
+vt 0.19 0.52 0.00
+vt 0.19 0.56 0.00
+vt 0.24 0.57 0.00
+vt 0.22 0.49 0.00
+vt 0.20 0.51 0.00
+vt 0.23 0.51 0.00
+vt 0.88 0.10 0.00
+vt 0.88 0.11 0.00
+vt 0.75 0.09 0.00
+vt 0.75 0.10 0.00
+vt 0.88 0.08 0.00
+vt 0.75 0.08 0.00
+vt 0.88 0.06 0.00
+vt 0.75 0.05 0.00
+vt 0.88 0.03 0.00
+vt 0.75 0.03 0.00
+vt 0.88 0.02 0.00
+vt 0.75 0.01 0.00
+vt 0.88 0.01 0.00
+vt 0.75 0.00 0.00
+vt 0.73 0.05 0.00
+vt 0.73 0.03 0.00
+vt 0.73 0.02 0.00
+vt 0.73 0.01 0.00
+vt 0.73 0.08 0.00
+vt 0.73 0.09 0.00
+vt 0.73 0.10 0.00
+vt 0.70 0.03 0.00
+vt 0.70 0.02 0.00
+vt 0.68 0.04 0.00
+vt 0.68 0.05 0.00
+vt 0.70 0.05 0.00
+vt 0.70 0.07 0.00
+vt 0.67 0.06 0.00
+vt 0.67 0.05 0.00
+vt 0.70 0.08 0.00
+vt 0.70 0.09 0.00
+vt 0.67 0.07 0.00
+vt 0.68 0.03 0.00
+vt 0.94 0.08 0.00
+vt 0.94 0.09 0.00
+vt 0.94 0.07 0.00
+vt 0.94 0.06 0.00
+vt 0.94 0.04 0.00
+vt 0.94 0.03 0.00
+vt 0.99 0.07 0.00
+vt 0.99 0.06 0.00
+vt 0.99 0.05 0.00
+# 213 texture coords
+
+g P_51_Mustang_Right_Wing
+f 263/73/181 264/74/181 265/73/181
+f 266/75/182 267/76/183 268/77/184
+f 269/78/185 268/77/184 267/76/183
+f 267/76/183 270/79/186 269/78/185
+f 271/80/187 269/78/185 270/79/186
+f 271/80/187 270/79/186 272/81/188
+f 271/80/187 272/81/188 273/82/189
+f 274/83/190 273/82/189 272/81/188
+f 273/82/189 274/83/190 275/84/191
+f 276/85/192 275/84/191 274/83/190
+f 276/85/192 277/86/193 275/84/191
+f 276/85/192 278/87/194 277/86/193
+f 279/88/195 277/86/193 278/87/194
+f 278/87/194 280/87/196 279/88/195
+f 281/88/197 279/88/195 280/87/196
+f 279/88/195 281/88/197 282/89/198
+f 279/88/195 282/89/198 277/86/193
+f 283/90/199 277/86/193 282/89/198
+f 277/86/193 283/90/199 284/91/200
+f 268/77/184 269/78/185 285/92/201
+f 286/93/202 284/91/200 283/90/199
+f 284/91/200 286/93/202 287/94/203
+f 288/95/204 287/94/203 286/93/202
+f 288/95/204 289/96/205 287/94/203
+f 290/97/206 287/94/203 289/96/205
+f 290/97/206 291/98/207 287/94/203
+f 292/99/208 287/94/203 291/98/207
+f 291/98/207 285/92/201 292/99/208
+f 293/100/209 292/99/208 285/92/201
+f 293/100/209 285/92/201 269/78/185
+f 269/78/185 271/80/187 293/100/209
+f 273/82/189 293/100/209 271/80/187
+f 293/100/209 273/82/189 292/99/208
+f 275/84/191 292/99/208 273/82/189
+f 275/84/191 284/91/200 292/99/208
+f 284/91/200 275/84/191 277/86/193
+f 287/94/203 292/99/208 284/91/200
+f 294/101/210 295/102/211 296/103/212
+f 295/102/211 294/101/210 297/104/213
+f 295/102/211 297/104/213 298/105/214
+f 299/106/214 298/105/214 297/104/213
+f 299/106/214 289/107/215 298/105/214
+f 288/108/216 298/105/214 289/107/215
+f 288/108/216 286/109/217 298/105/214
+f 300/110/218 298/105/214 286/109/217
+f 286/109/217 283/111/219 300/110/218
+f 301/112/220 300/110/218 283/111/219
+f 300/110/218 301/112/220 302/113/221
+f 303/114/222 302/113/221 301/112/220
+f 303/114/222 304/115/223 302/113/221
+f 304/115/223 303/114/222 305/116/224
+f 305/116/224 306/117/225 304/115/223
+f 307/118/226 304/115/223 306/117/225
+f 263/119/227 307/118/226 306/117/225
+f 307/118/226 263/119/227 308/120/228
+f 264/121/225 263/119/227 306/117/225
+f 309/122/229 308/120/228 263/119/227
+f 308/120/228 309/122/229 310/123/230
+f 311/124/231 310/123/230 309/122/229
+f 310/123/230 311/124/231 312/125/232
+f 313/126/233 312/125/232 311/124/231
+f 312/125/232 314/127/234 310/123/230
+f 294/101/210 310/123/230 314/127/234
+f 310/123/230 294/101/210 308/120/228
+f 296/103/212 308/120/228 294/101/210
+f 308/120/228 296/103/212 307/118/226
+f 304/115/223 307/118/226 296/103/212
+f 296/103/212 302/113/221 304/115/223
+f 302/113/221 296/103/212 295/102/211
+f 302/113/221 295/102/211 300/110/218
+f 298/105/214 300/110/218 295/102/211
+f 314/127/234 297/104/213 294/101/210
+f 272/81/188 315/128/235 274/83/190
+f 316/129/236 274/83/190 315/128/235
+f 274/83/190 316/129/236 276/85/192
+f 278/87/194 276/85/192 316/129/236
+f 278/87/194 316/129/236 280/87/196
+f 317/129/237 280/87/196 316/129/236
+f 317/129/237 316/129/236 318/128/238
+f 315/128/235 318/128/238 316/129/236
+f 264/130/239 318/128/238 315/128/235
+f 264/130/239 315/128/235 265/131/240
+f 272/81/188 265/131/240 315/128/235
+f 265/131/240 272/81/188 270/79/186
+f 283/111/241 282/132/242 301/112/243
+f 319/133/244 301/112/243 282/132/242
+f 281/133/245 319/133/244 282/132/242
+f 281/133/245 280/134/246 319/133/244
+f 320/135/247 319/133/244 280/134/246
+f 320/135/247 280/134/246 305/116/248
+f 317/116/248 305/116/248 280/134/246
+f 317/116/248 318/136/223 305/116/248
+f 306/117/223 305/116/248 318/136/223
+f 264/121/223 306/117/223 318/136/223
+f 319/133/249 320/135/250 301/112/220
+f 303/114/222 301/112/220 320/135/250
+f 320/135/250 305/116/224 303/114/222
+f 321/137/251 322/138/251 323/139/251
+f 324/140/251 323/139/251 322/138/251
+f 325/140/252 326/138/252 327/139/252
+f 328/137/252 327/139/252 326/138/252
+f 329/141/253 330/141/253 331/141/253
+f 332/141/253 331/141/253 330/141/253
+f 330/142/254 333/143/254 332/144/254
+f 334/145/254 332/144/254 333/143/254
+f 333/146/255 335/147/255 334/146/255
+f 336/147/255 334/146/255 335/147/255
+f 334/140/251 336/139/251 332/138/251
+f 331/137/251 332/138/251 336/139/251
+f 333/140/252 330/138/252 335/139/252
+f 329/137/252 335/139/252 330/138/252
+f 337/141/256 338/141/256 339/141/256
+f 340/141/256 339/141/256 338/141/256
+f 338/142/254 341/143/254 340/144/254
+f 342/145/254 340/144/254 341/143/254
+f 341/146/255 343/147/255 342/146/255
+f 344/147/255 342/146/255 343/147/255
+f 342/140/251 344/139/251 340/138/251
+f 339/137/251 340/138/251 344/139/251
+f 341/140/252 338/138/252 343/139/252
+f 337/137/252 343/139/252 338/138/252
+f 267/144/257 266/148/257 270/149/257
+f 270/149/258 266/148/259 265/150/258
+f 313/151/260 311/142/260 266/148/260
+f 266/148/261 311/142/261 265/150/261
+f 311/142/262 309/149/262 265/150/262
+f 309/149/263 263/150/263 265/150/263
+f 312/152/264 313/153/264 268/154/264
+f 266/155/265 268/154/265 313/153/265
+f 314/156/266 312/152/266 285/157/266
+f 268/154/267 285/157/267 312/152/267
+f 291/158/268 297/159/268 285/157/268
+f 314/156/269 285/157/269 297/159/269
+f 299/160/270 297/159/270 290/161/270
+f 291/158/270 290/161/270 297/159/270
+f 289/162/271 299/160/271 290/161/271
+f 328/141/253 326/141/253 321/141/253
+f 322/141/253 321/141/253 326/141/253
+f 326/142/254 325/143/254 322/144/254
+f 324/145/254 322/144/254 325/143/254
+f 325/146/272 327/147/272 324/146/272
+f 323/147/272 324/146/272 327/147/272
+f 266/163/273 313/164/273 345/165/273
+f 264/121/274 345/166/275 263/119/274
+f 313/126/276 263/119/274 345/166/275
+f 345/167/277 264/130/185 266/75/277
+f 265/168/278 266/75/277 264/130/185
+f 264/73/279 263/169/279 265/169/279
+f 263/143/280 313/165/280 265/145/280
+f 266/170/281 265/145/281 313/165/281
+f 266/148/282 346/171/282 313/151/282
+f 347/172/283 348/173/284 314/127/234
+f 297/104/285 314/127/234 348/173/284
+f 297/104/285 348/173/284 299/106/286
+f 349/174/287 299/106/286 348/173/284
+f 349/174/287 350/175/288 299/106/286
+f 350/175/288 349/174/287 351/176/289
+f 352/177/290 351/176/289 349/174/287
+f 351/176/289 352/177/290 353/178/291
+f 354/179/292 353/178/291 352/177/290
+f 354/179/292 352/177/290 355/180/293
+f 356/181/294 355/180/293 352/177/290
+f 356/181/294 357/182/234 355/180/293
+f 357/182/234 356/181/294 347/172/283
+f 347/172/283 358/183/230 357/182/234
+f 347/172/283 314/127/234 358/183/230
+f 312/125/232 358/183/230 314/127/234
+f 312/125/232 313/126/295 358/183/230
+f 359/184/231 358/183/230 313/126/295
+f 349/174/287 348/173/284 352/177/290
+f 356/181/294 352/177/290 348/173/284
+f 348/173/284 347/172/283 356/181/294
+f 358/183/230 359/184/231 360/185/296
+f 361/186/297 360/185/296 359/184/231
+f 360/185/296 361/186/297 362/187/298
+f 363/188/299 362/187/298 361/186/297
+f 361/186/297 364/189/300 363/188/299
+f 365/190/232 363/188/299 364/189/300
+f 364/189/300 361/186/297 359/184/231
+f 366/191/301 367/192/302 368/193/182
+f 369/194/303 368/193/182 367/192/302
+f 368/193/182 369/194/303 370/195/304
+f 371/196/305 370/195/304 369/194/303
+f 370/195/304 371/196/305 372/197/306
+f 373/198/307 372/197/306 371/196/305
+f 371/196/305 374/199/308 373/198/307
+f 375/200/309 373/198/307 374/199/308
+f 375/200/309 374/199/308 285/92/310
+f 375/200/309 285/92/310 376/201/311
+f 291/98/312 376/201/311 285/92/310
+f 291/98/312 290/97/313 376/201/311
+f 377/202/314 376/201/311 290/97/313
+f 377/202/314 290/97/313 350/203/315
+f 350/203/315 351/204/316 377/202/314
+f 378/205/317 377/202/314 351/204/316
+f 351/204/316 353/206/318 378/205/317
+f 379/207/314 378/205/317 353/206/318
+f 372/197/306 373/198/307 380/208/319
+f 379/207/314 380/208/319 378/205/317
+f 381/209/319 378/205/317 380/208/319
+f 381/209/319 380/208/319 373/198/307
+f 373/198/307 375/200/309 381/209/319
+f 376/201/311 381/209/319 375/200/309
+f 381/209/319 376/201/311 378/205/317
+f 377/202/314 378/205/317 376/201/311
+f 382/210/293 383/211/320 384/212/254
+f 385/213/321 384/212/254 383/211/320
+f 383/211/320 386/214/322 385/213/321
+f 387/215/323 385/213/321 386/214/322
+f 386/214/322 388/216/324 387/215/323
+f 389/217/325 387/215/323 388/216/324
+f 388/216/324 390/214/326 389/217/325
+f 391/215/327 389/217/325 390/214/326
+f 390/214/326 392/211/328 391/215/327
+f 393/213/329 391/215/327 392/211/328
+f 392/211/328 382/210/293 393/213/329
+f 384/212/254 393/213/329 382/210/293
+f 367/192/302 346/218/330 369/194/303
+f 369/194/303 346/218/330 371/196/305
+f 374/199/308 371/196/305 346/218/330
+f 346/218/330 266/75/331 374/199/308
+f 268/77/332 374/199/308 266/75/331
+f 268/77/332 285/92/310 374/199/308
+f 362/187/298 394/219/333 360/185/296
+f 357/182/234 360/185/296 394/219/333
+f 360/185/296 357/182/234 358/183/230
+f 394/219/333 355/180/293 357/182/234
+f 390/220/334 388/221/334 392/222/334
+f 388/221/334 383/223/334 392/222/334
+f 386/224/334 383/223/334 388/221/334
+f 392/222/334 383/223/334 382/225/334
+f 395/220/334 396/221/334 397/222/334
+f 396/221/334 398/223/334 397/222/334
+f 397/222/334 398/223/334 399/225/334
+f 400/224/334 398/223/334 396/221/334
+f 401/210/293 402/211/320 403/212/254
+f 404/213/321 403/212/254 402/211/320
+f 402/211/320 405/214/322 404/213/321
+f 406/215/323 404/213/321 405/214/322
+f 405/214/322 407/216/324 406/215/323
+f 408/217/325 406/215/323 407/216/324
+f 407/216/324 409/214/326 408/217/325
+f 410/215/327 408/217/325 409/214/326
+f 409/214/326 411/211/328 410/215/327
+f 412/213/329 410/215/327 411/211/328
+f 411/211/328 401/210/293 412/213/329
+f 403/212/254 412/213/329 401/210/293
+f 409/220/334 407/221/334 411/222/334
+f 407/221/334 402/223/334 411/222/334
+f 405/224/334 402/223/334 407/221/334
+f 411/222/334 402/223/334 401/225/334
+f 367/226/282 359/227/282 346/171/282
+f 346/171/282 359/227/282 313/151/282
+f 413/141/335 414/141/335 415/141/335
+f 416/141/335 415/141/335 414/141/335
+f 414/228/336 417/228/336 416/228/336
+f 418/228/336 416/228/336 417/228/336
+f 419/147/337 418/228/337 420/147/337
+f 417/228/337 420/147/337 418/228/337
+f 420/146/338 421/147/338 419/146/338
+f 422/147/338 419/146/338 421/147/338
+f 289/96/339 350/203/315 290/97/313
+f 289/107/340 299/106/286 350/175/288
+f 365/229/282 364/230/282 366/231/282
+f 367/226/282 366/231/282 364/230/282
+f 364/230/282 359/227/282 367/226/282
+f 415/137/341 416/138/341 422/139/341
+f 422/139/341 418/232/341 419/140/341
+f 416/138/341 418/232/341 422/139/341
+f 413/137/342 421/139/342 414/138/342
+f 421/139/342 420/140/342 414/138/342
+f 414/138/342 420/140/342 417/232/342
+f 399/210/293 398/211/320 423/212/254
+f 424/213/321 423/212/254 398/211/320
+f 398/211/320 400/214/322 424/213/321
+f 425/215/323 424/213/321 400/214/322
+f 400/214/322 396/216/324 425/215/323
+f 426/217/325 425/215/323 396/216/324
+f 396/216/324 395/214/326 426/217/325
+f 427/215/327 426/217/325 395/214/326
+f 395/214/326 397/211/328 427/215/327
+f 428/213/329 427/215/327 397/211/328
+f 397/211/328 399/210/293 428/213/329
+f 423/212/254 428/213/329 399/210/293
+f 363/154/343 365/233/343 368/152/343
+f 366/234/269 368/152/269 365/233/269
+f 394/235/344 362/236/344 372/237/344
+f 370/238/345 372/237/345 362/236/345
+f 362/236/346 363/154/346 370/238/346
+f 368/152/347 370/238/347 363/154/347
+f 355/158/348 394/235/348 380/239/348
+f 372/237/349 380/239/349 394/235/349
+f 379/160/350 354/240/350 380/239/350
+f 355/158/351 380/239/351 354/240/351
+f 353/162/352 354/240/352 379/160/352
+f 290/160/353 299/240/353 289/162/353
+f 266/153/354 313/241/354 268/242/354
+f 312/243/355 268/242/355 313/241/355
+f 312/243/356 314/235/356 268/242/356
+f 285/156/357 268/242/357 314/235/357
+f 314/235/358 297/158/358 285/156/358
+f 291/159/359 285/156/359 297/158/359
+f 291/159/360 297/158/360 290/160/360
+f 299/240/360 290/160/360 297/158/360
+f 429/244/361 430/245/362 431/246/361
+f 432/247/362 431/246/361 430/245/362
+f 430/245/362 433/244/363 432/247/362
+f 434/246/364 432/247/362 433/244/363
+f 433/244/363 435/248/365 434/246/364
+f 436/249/366 434/246/364 435/248/365
+f 435/248/365 437/250/252 436/249/366
+f 438/251/367 436/249/366 437/250/252
+f 437/250/252 439/252/368 438/251/367
+f 440/253/369 438/251/367 439/252/368
+f 439/252/368 441/254/370 440/253/369
+f 442/255/370 440/253/369 441/254/370
+f 441/254/370 443/256/371 442/255/370
+f 444/257/371 442/255/370 443/256/371
+f 443/256/371 445/254/372 444/257/371
+f 446/255/373 444/257/371 445/254/372
+f 445/254/372 447/252/374 446/255/373
+f 448/253/375 446/255/373 447/252/374
+f 447/252/374 449/250/376 448/253/375
+f 450/251/251 448/253/375 449/250/376
+f 449/250/376 451/248/377 450/251/251
+f 452/249/378 450/251/251 451/248/377
+f 451/248/377 429/244/361 452/249/378
+f 431/246/361 452/249/378 429/244/361
+f 438/251/379 440/253/380 453/258/381
+f 454/259/382 453/258/381 440/253/380
+f 440/253/380 442/255/383 454/259/382
+f 455/260/384 454/259/382 442/255/383
+f 442/255/383 444/257/385 455/260/384
+f 456/261/386 455/260/384 444/257/385
+f 444/257/385 446/255/387 456/261/386
+f 457/260/388 456/261/386 446/255/387
+f 446/255/387 448/253/389 457/260/388
+f 458/259/390 457/260/388 448/253/389
+f 448/253/389 450/251/391 458/259/390
+f 459/258/392 458/259/390 450/251/391
+f 450/251/391 452/249/393 459/258/392
+f 460/262/394 459/258/392 452/249/393
+f 452/249/393 431/246/395 460/262/394
+f 461/263/396 460/262/394 431/246/395
+f 431/246/395 432/247/397 461/263/396
+f 462/264/398 461/263/396 432/247/397
+f 454/259/382 455/260/384 463/265/399
+f 455/260/384 456/261/386 464/266/400
+f 464/266/400 463/265/399 455/260/384
+f 463/265/399 464/266/400 465/267/401
+f 465/267/401 466/268/402 463/265/399
+f 467/269/403 463/265/399 466/268/402
+f 463/265/399 467/269/403 454/259/382
+f 453/258/381 454/259/382 467/269/403
+f 432/247/397 434/246/404 462/264/398
+f 468/263/405 462/264/398 434/246/404
+f 434/246/404 436/249/406 468/263/405
+f 469/262/407 468/263/405 436/249/406
+f 436/249/406 438/251/379 469/262/407
+f 453/258/381 469/262/407 438/251/379
+f 469/262/407 453/258/381 470/270/408
+f 467/269/403 470/270/408 453/258/381
+f 470/270/408 467/269/403 471/271/409
+f 466/268/402 471/271/409 467/269/403
+f 472/272/410 471/271/409 466/268/402
+f 472/272/410 466/268/402 465/267/401
+f 472/272/410 465/267/401 473/267/411
+f 473/267/411 465/267/401 464/266/400
+f 464/266/400 474/266/412 473/267/411
+f 474/266/412 464/266/400 456/261/386
+f 456/261/386 457/260/388 474/266/412
+f 475/266/413 474/266/412 457/260/388
+f 457/260/388 458/259/390 475/266/413
+f 476/265/414 475/266/413 458/259/390
+f 458/259/390 459/258/392 476/265/414
+f 477/269/415 476/265/414 459/258/392
+f 459/258/392 460/262/394 477/269/415
+f 478/270/416 477/269/415 460/262/394
+f 460/262/394 461/263/396 478/270/416
+f 479/273/417 478/270/416 461/263/396
+f 461/263/396 462/264/398 479/273/417
+f 480/274/418 479/273/417 462/264/398
+f 462/264/398 468/263/405 480/274/418
+f 481/273/419 480/274/418 468/263/405
+f 468/263/405 469/262/407 481/273/419
+f 470/270/408 481/273/419 469/262/407
+f 481/273/419 470/270/408 482/275/420
+f 471/271/409 482/275/420 470/270/408
+f 472/272/410 482/275/420 471/271/409
+f 472/272/410 483/275/421 482/275/420
+f 480/274/418 481/273/419 483/275/421
+f 482/275/420 483/275/421 481/273/419
+f 472/272/410 484/275/422 483/275/421
+f 483/275/421 484/275/422 480/274/418
+f 479/273/417 480/274/418 484/275/422
+f 484/275/422 485/271/423 479/273/417
+f 478/270/416 479/273/417 485/271/423
+f 485/271/423 486/268/424 478/270/416
+f 477/269/415 478/270/416 486/268/424
+f 486/268/424 487/267/425 477/269/415
+f 476/265/414 477/269/415 487/267/425
+f 487/267/425 488/267/426 476/265/414
+f 475/266/413 476/265/414 488/267/426
+f 488/267/426 489/276/427 475/266/413
+f 474/266/412 475/266/413 489/276/427
+f 489/276/427 473/267/411 474/266/412
+f 472/272/410 473/267/411 489/276/427
+f 472/272/410 489/276/427 488/267/426
+f 472/272/410 488/267/426 487/267/425
+f 472/272/410 487/267/425 486/268/424
+f 472/272/410 486/268/424 485/271/423
+f 472/272/410 485/271/423 484/275/422
+f 433/244/428 430/245/429 490/277/430
+f 491/278/431 490/277/430 430/245/429
+f 430/245/429 429/244/432 491/278/431
+f 492/277/433 491/278/431 429/244/432
+f 429/244/432 451/248/434 492/277/433
+f 493/279/435 492/277/433 451/248/434
+f 451/248/434 449/250/436 493/279/435
+f 494/280/437 493/279/435 449/250/436
+f 449/250/436 447/252/438 494/280/437
+f 495/281/439 494/280/437 447/252/438
+f 447/252/438 445/254/440 495/281/439
+f 496/282/441 495/281/439 445/254/440
+f 445/254/440 443/256/442 496/282/441
+f 497/282/443 496/282/441 443/256/442
+f 443/256/442 441/254/444 497/282/443
+f 498/282/445 497/282/443 441/254/444
+f 441/254/444 439/252/446 498/282/445
+f 499/281/447 498/282/445 439/252/446
+f 490/277/430 491/278/431 500/283/448
+f 501/283/449 500/283/448 491/278/431
+f 491/278/431 492/277/433 501/283/449
+f 439/252/446 437/250/450 499/281/447
+f 502/280/451 499/281/447 437/250/450
+f 437/250/450 435/248/452 502/280/451
+f 503/279/453 502/280/451 435/248/452
+f 435/248/452 433/244/428 503/279/453
+f 490/277/430 503/279/453 433/244/428
+f 503/279/453 490/277/430 504/284/454
+f 500/283/448 504/284/454 490/277/430
+f 504/284/454 500/283/448 505/284/455
+f 500/283/448 501/283/449 505/284/455
+f 501/283/449 506/283/456 505/284/455
+f 506/283/456 501/283/449 492/277/433
+f 492/277/433 493/279/435 506/283/456
+f 507/284/457 506/283/456 493/279/435
+f 493/279/435 494/280/437 507/284/457
+f 508/284/458 507/284/457 494/280/437
+f 494/280/437 495/281/439 508/284/458
+f 509/285/459 508/284/458 495/281/439
+f 495/281/439 496/282/441 509/285/459
+f 510/285/460 509/285/459 496/282/441
+f 496/282/441 497/282/443 510/285/460
+f 511/285/461 510/285/460 497/282/443
+f 497/282/443 498/282/445 511/285/461
+f 512/285/462 511/285/461 498/282/445
+f 498/282/445 499/281/447 512/285/462
+f 513/285/463 512/285/462 499/281/447
+f 499/281/447 502/280/451 513/285/463
+f 514/284/464 513/285/463 502/280/451
+f 502/280/451 503/279/453 514/284/464
+f 504/284/454 514/284/464 503/279/453
+f 514/284/464 504/284/454 505/284/455
+f 513/285/463 514/284/464 505/284/455
+f 512/285/462 513/285/463 505/284/455
+f 511/285/461 512/285/462 505/284/455
+f 510/285/460 511/285/461 505/284/455
+f 509/285/459 510/285/460 505/284/455
+f 508/284/458 509/285/459 505/284/455
+f 507/284/457 508/284/458 505/284/455
+f 506/283/456 507/284/457 505/284/455
+# 472 faces
+
+#
+# object P_51_Mustang_Right_Landing_Wheel
+#
+
+v -21.65 -7.03 18.48
+v -20.12 -7.12 18.43
+v -21.65 -7.03 18.62
+v -20.12 -7.12 18.57
+v -20.72 -9.30 17.99
+v -20.96 -9.30 18.00
+v -20.29 -0.52 17.44
+v -20.54 -0.52 17.45
+v -21.12 -9.30 18.19
+v -20.70 -0.51 17.64
+v -21.11 -9.30 18.43
+v -20.69 -0.51 17.88
+v -20.93 -9.30 18.59
+v -20.51 -0.51 18.04
+v -20.69 -9.30 18.58
+v -20.27 -0.52 18.03
+v -20.53 -9.30 18.39
+v -20.10 -0.52 17.84
+v -20.54 -9.30 18.15
+v -20.11 -0.52 17.60
+v -20.33 -12.95 18.23
+v -20.20 -10.30 18.07
+v -20.11 -12.93 18.22
+v -19.87 -10.28 18.05
+v -20.30 -9.53 18.02
+v -20.07 -9.01 17.98
+v -20.64 -9.29 18.02
+v -20.61 -8.74 17.98
+v -20.32 -12.95 18.73
+v -20.01 -12.93 18.71
+v -20.20 -10.30 18.56
+v -19.86 -10.28 18.55
+v -20.30 -9.53 18.52
+v -20.07 -9.01 18.48
+v -20.63 -9.29 18.51
+v -20.60 -8.73 18.48
+v -21.23 -1.10 17.16
+v -22.09 -3.52 17.35
+v -21.15 -1.12 18.27
+v -24.19 -9.64 18.88
+v -24.42 -9.57 15.50
+v -24.22 -9.64 15.49
+v -21.89 -3.59 17.34
+v -23.98 -9.71 18.87
+v -20.95 -1.19 18.26
+v -21.02 -1.16 17.16
+v -21.65 -6.86 18.47
+v -21.64 -6.86 18.61
+v -20.11 -6.80 18.41
+v -20.11 -6.80 18.55
+v -20.12 -6.80 17.67
+v -20.13 -7.12 17.69
+v -21.65 -6.86 17.72
+v -21.66 -7.04 17.74
+v -21.66 -7.04 17.88
+v -20.13 -7.12 17.83
+v -21.65 -6.86 17.87
+v -20.11 -6.80 17.81
+v -20.14 -11.43 20.48
+v -20.18 -12.67 20.94
+v -20.12 -10.55 19.48
+v -20.30 -15.29 18.74
+v -20.31 -15.01 17.47
+v -20.27 -14.90 19.94
+v -20.15 -10.67 17.01
+v -20.12 -10.27 18.21
+v -20.23 -13.94 20.74
+v -20.89 -10.51 16.93
+v -20.86 -10.09 18.22
+v -20.86 -10.40 19.58
+v -20.88 -11.34 20.66
+v -20.92 -12.66 21.15
+v -20.97 -14.03 20.94
+v -21.02 -15.05 20.07
+v -21.05 -15.47 18.78
+v -21.06 -15.17 17.42
+v -20.29 -14.13 16.47
+v -21.04 -14.23 16.35
+v -20.25 -12.89 16.01
+v -20.99 -12.90 15.85
+v -20.20 -11.62 16.21
+v -20.94 -11.54 16.07
+v -21.69 -11.63 16.26
+v -21.64 -10.67 17.07
+v -21.61 -10.28 18.27
+v -21.61 -10.56 19.54
+v -21.63 -11.44 20.54
+v -21.67 -12.68 21.00
+v -21.72 -13.94 20.80
+v -21.76 -14.90 19.99
+v -21.79 -15.29 18.79
+v -21.80 -15.01 17.52
+v -21.78 -14.14 16.52
+v -21.74 -12.90 16.06
+# 94 vertices
+
+vn -0.05 -1.00 0.00
+vn 0.32 -0.07 -0.95
+vn -0.45 -0.03 -0.89
+vn 0.33 -0.07 -0.94
+vn -0.43 -0.04 -0.90
+vn -0.95 0.03 -0.32
+vn -0.94 0.02 -0.35
+vn -0.90 0.07 0.44
+vn -0.90 0.07 0.42
+vn -0.33 0.07 0.94
+vn -0.32 0.07 0.95
+vn 0.43 0.04 0.90
+vn 0.45 0.03 0.89
+vn 0.94 -0.02 0.35
+vn 0.95 -0.03 0.32
+vn 0.90 -0.07 -0.42
+vn 0.90 -0.07 -0.44
+vn -0.03 -0.06 -1.00
+vn 0.03 0.06 1.00
+vn -0.01 -1.00 0.00
+vn 0.01 1.00 -0.00
+vn -0.94 0.34 0.07
+vn 0.94 -0.34 -0.07
+vn -1.00 0.05 0.01
+vn -0.04 1.00 -0.00
+vn 1.00 -0.05 -0.01
+vn 0.46 0.89 -0.01
+vn 0.99 0.16 -0.01
+vn 0.97 -0.10 -0.20
+vn 1.00 -0.06 -0.04
+vn 0.98 -0.10 -0.18
+vn 1.00 -0.06 -0.01
+vn 0.07 -1.00 0.00
+vn 0.06 -1.00 -0.00
+vn 0.05 -1.00 -0.01
+vn -0.99 -0.13 0.01
+vn -0.59 -0.81 0.01
+vn 0.32 0.95 -0.00
+vn 0.06 0.05 1.00
+vn -0.32 -0.95 0.00
+vn 0.05 0.27 -0.96
+vn -0.06 -0.05 -1.00
+vn 1.00 -0.04 -0.01
+vn 0.22 0.81 -0.55
+vn -0.02 0.83 -0.56
+vn 0.24 0.97 -0.05
+vn -0.00 1.00 -0.05
+vn 0.25 0.87 0.44
+vn 0.01 0.89 0.45
+vn 0.26 0.55 0.79
+vn 0.03 0.57 0.82
+vn 0.27 0.10 0.96
+vn 0.03 0.10 0.99
+vn 0.27 -0.40 0.87
+vn 0.03 -0.42 0.91
+vn 0.26 -0.80 0.53
+vn 0.02 -0.83 0.56
+vn 0.24 -0.97 0.04
+vn 0.00 -1.00 0.05
+vn 0.22 -0.87 -0.45
+vn -0.01 -0.89 -0.45
+vn 0.20 -0.55 -0.81
+vn -0.03 -0.57 -0.82
+vn 0.20 -0.10 -0.97
+vn -0.03 -0.10 -0.99
+vn 0.21 0.40 -0.89
+vn -0.03 0.42 -0.91
+vn -0.27 0.40 -0.87
+vn -0.26 0.80 -0.53
+vn -0.24 0.97 -0.04
+vn -0.22 0.87 0.45
+vn -0.20 0.55 0.81
+vn -0.20 0.10 0.97
+vn -0.21 -0.40 0.89
+vn -0.22 -0.81 0.55
+vn -0.24 -0.97 0.05
+vn -0.25 -0.87 -0.44
+vn -0.26 -0.55 -0.79
+vn -0.27 -0.10 -0.96
+vn -1.00 0.04 0.01
+# 80 vertex normals
+
+vt 0.07 0.76 0.00
+vt 0.30 0.92 0.00
+vt 0.09 0.92 0.00
+vt 0.30 0.93 0.00
+vt 0.09 0.93 0.00
+vt 0.30 0.94 0.00
+vt 0.09 0.94 0.00
+vt 0.44 0.70 0.00
+vt 0.44 0.73 0.00
+vt 0.44 0.74 0.00
+vt 0.43 0.74 0.00
+vt 0.43 0.75 0.00
+vt 0.32 0.98 0.00
+vt 0.31 0.98 0.00
+vt 0.33 0.98 0.00
+vt 0.33 0.99 0.00
+vt 0.32 1.00 0.00
+vt 0.33 1.00 0.00
+vt 0.47 0.08 0.00
+vt 0.53 0.08 0.00
+vt 0.47 0.11 0.00
+vt 0.67 0.11 0.00
+vt 0.66 0.03 0.00
+vt 0.61 0.03 0.00
+vt 0.47 0.00 0.00
+vt 0.66 0.00 0.00
+vt 0.08 0.75 0.00
+vt 0.09 0.75 0.00
+vt 0.07 0.75 0.00
+vt 0.04 0.84 0.00
+vt 0.04 0.85 0.00
+vt 0.03 0.84 0.00
+vt 0.03 0.85 0.00
+vt 0.08 0.76 0.00
+vt 0.09 0.74 0.00
+vt 0.43 0.73 0.00
+vt 0.42 0.73 0.00
+vt 0.42 0.74 0.00
+vt 0.43 0.72 0.00
+vt 0.42 0.72 0.00
+vt 0.46 0.72 0.00
+vt 0.46 0.73 0.00
+vt 0.45 0.73 0.00
+vt 0.03 0.68 0.00
+vt 0.05 0.68 0.00
+vt 0.16 0.67 0.00
+vt 0.03 0.67 0.00
+vt 0.08 0.67 0.00
+vt 0.08 0.68 0.00
+vt 0.07 0.67 0.00
+vt 0.07 0.66 0.00
+vt 0.16 0.66 0.00
+vt 0.03 0.66 0.00
+vt 0.31 0.99 0.00
+vt 0.85 0.94 0.00
+vt 0.85 0.96 0.00
+vt 0.84 0.93 0.00
+vt 0.80 0.99 0.00
+vt 0.78 0.98 0.00
+vt 0.82 0.99 0.00
+vt 0.80 0.92 0.00
+vt 0.82 0.92 0.00
+vt 0.84 0.98 0.00
+vt 0.32 0.78 0.00
+vt 0.32 0.76 0.00
+vt 0.34 0.78 0.00
+vt 0.34 0.76 0.00
+vt 0.36 0.78 0.00
+vt 0.36 0.76 0.00
+vt 0.38 0.78 0.00
+vt 0.38 0.76 0.00
+vt 0.39 0.78 0.00
+vt 0.39 0.76 0.00
+vt 0.31 0.78 0.00
+vt 0.31 0.76 0.00
+vt 0.29 0.78 0.00
+vt 0.29 0.76 0.00
+vt 0.31 0.75 0.00
+vt 0.32 0.75 0.00
+vt 0.34 0.75 0.00
+vt 0.36 0.75 0.00
+vt 0.38 0.75 0.00
+vt 0.39 0.75 0.00
+vt 0.29 0.75 0.00
+vt 0.78 0.96 0.00
+vt 0.78 0.94 0.00
+vt 0.79 0.93 0.00
+# 87 texture coords
+
+g P_51_Mustang_Right_Landing_Wheel
+f 515/286/465 516/286/465 517/286/465
+f 518/286/465 517/286/465 516/286/465
+f 519/287/466 520/287/467 521/288/468
+f 522/288/469 521/288/468 520/287/467
+f 520/287/467 523/289/470 522/288/469
+f 524/290/471 522/288/469 523/289/470
+f 523/289/470 525/291/472 524/290/471
+f 526/292/473 524/290/471 525/291/472
+f 525/291/472 527/291/474 526/292/473
+f 528/292/475 526/292/473 527/291/474
+f 527/291/474 529/291/476 528/292/475
+f 530/292/477 528/292/475 529/291/476
+f 529/291/476 531/291/478 530/292/477
+f 532/292/479 530/292/477 531/291/478
+f 531/291/478 533/289/480 532/292/479
+f 534/290/481 532/292/479 533/289/480
+f 533/289/480 519/287/466 534/290/481
+f 521/288/468 534/290/481 519/287/466
+f 535/293/482 536/294/482 537/293/482
+f 537/293/482 536/294/482 538/294/482
+f 536/294/482 539/295/482 538/294/482
+f 538/294/482 539/295/482 540/295/482
+f 540/295/482 539/295/482 541/296/482
+f 542/297/482 540/295/482 541/296/482
+f 543/293/483 544/293/483 545/294/483
+f 544/293/483 546/294/483 545/294/483
+f 545/294/483 546/294/483 547/295/483
+f 546/294/483 548/295/483 547/295/483
+f 547/295/483 548/295/483 549/296/483
+f 548/295/483 550/297/483 549/296/483
+f 533/298/484 531/299/484 519/300/484
+f 519/300/484 531/299/484 523/301/484
+f 531/299/484 527/302/484 523/301/484
+f 523/301/484 527/302/484 525/303/484
+f 520/300/484 519/300/484 523/301/484
+f 530/303/485 532/301/485 528/302/485
+f 532/301/485 521/300/485 528/302/485
+f 521/300/485 524/299/485 528/302/485
+f 522/298/485 524/299/485 521/300/485
+f 534/300/485 521/300/485 532/301/485
+f 551/304/486 552/305/486 553/306/486
+f 552/305/486 554/307/486 553/306/486
+f 555/308/486 554/307/486 552/305/486
+f 556/304/487 557/309/487 558/310/487
+f 558/310/487 557/309/487 559/311/487
+f 557/309/487 560/308/487 559/311/487
+f 561/312/488 515/312/488 562/312/488
+f 517/312/488 562/312/488 515/312/488
+f 563/313/489 561/312/489 564/313/489
+f 562/312/489 564/313/489 561/312/489
+f 516/314/490 563/314/490 518/314/490
+f 564/314/490 518/314/490 563/314/490
+f 565/315/482 566/316/482 567/317/482
+f 568/318/482 567/317/482 566/316/482
+f 569/316/483 570/318/483 571/315/483
+f 572/317/483 571/315/483 570/318/483
+f 568/319/465 566/286/465 569/312/465
+f 570/314/465 569/312/465 566/286/465
+f 567/313/488 568/313/488 571/313/488
+f 569/313/488 571/313/488 568/313/488
+f 565/312/489 567/312/489 572/312/489
+f 571/312/489 572/312/489 567/312/489
+f 566/320/490 565/320/490 570/320/490
+f 572/320/490 570/320/490 565/320/490
+f 540/321/491 542/322/491 548/296/491
+f 550/323/491 548/296/491 542/322/491
+f 538/324/492 540/325/492 546/321/492
+f 548/322/492 546/321/492 540/325/492
+f 537/326/493 538/324/494 544/327/495
+f 546/321/496 544/327/495 538/324/494
+f 535/296/497 537/321/498 543/296/499
+f 544/321/499 543/296/499 537/321/498
+f 536/328/488 535/322/488 545/328/488
+f 543/322/488 545/328/488 535/322/488
+f 539/327/500 536/328/500 547/327/500
+f 545/328/500 547/327/500 536/328/500
+f 541/296/501 539/296/501 549/323/501
+f 547/323/501 549/323/501 539/296/501
+f 559/329/502 560/330/502 553/329/502
+f 551/330/502 553/329/502 560/330/502
+f 553/331/503 554/332/503 559/331/503
+f 558/332/503 559/331/503 554/332/503
+f 554/333/504 555/332/504 558/334/504
+f 556/329/504 558/334/504 555/332/504
+f 557/335/505 556/331/505 552/336/505
+f 555/337/505 552/336/505 556/331/505
+f 552/336/506 551/338/506 557/335/506
+f 560/332/506 557/335/506 551/338/506
+f 528/302/485 524/299/485 526/339/485
+f 563/315/482 516/316/482 561/317/482
+f 515/318/482 561/317/482 516/316/482
+f 517/316/483 518/318/483 562/315/483
+f 564/317/483 562/315/483 518/318/483
+f 529/339/484 527/302/484 531/299/484
+f 573/340/507 574/341/507 575/342/507
+f 576/343/507 577/344/507 578/345/507
+f 577/344/507 574/341/507 578/345/507
+f 579/346/507 574/341/507 577/344/507
+f 575/342/507 574/341/507 579/346/507
+f 580/347/507 575/342/507 579/346/507
+f 578/345/507 574/341/507 581/348/507
+f 579/349/508 582/350/509 580/351/510
+f 583/352/511 580/351/510 582/350/509
+f 580/351/510 583/352/511 575/353/512
+f 584/354/513 575/353/512 583/352/511
+f 575/353/512 584/354/513 573/355/514
+f 585/356/515 573/355/514 584/354/513
+f 573/355/514 585/356/515 574/357/516
+f 586/358/517 574/357/516 585/356/515
+f 574/357/516 586/358/517 581/355/518
+f 587/356/519 581/355/518 586/358/517
+f 581/355/518 587/356/519 578/353/520
+f 588/354/521 578/353/520 587/356/519
+f 578/353/520 588/354/521 576/351/522
+f 589/352/523 576/351/522 588/354/521
+f 576/351/522 589/352/523 577/349/524
+f 590/350/525 577/349/524 589/352/523
+f 577/349/524 590/350/525 591/359/526
+f 592/360/527 591/359/526 590/350/525
+f 591/359/526 592/360/527 593/361/528
+f 594/362/529 593/361/528 592/360/527
+f 593/361/528 594/362/529 595/359/530
+f 596/360/531 595/359/530 594/362/529
+f 595/359/530 596/360/531 579/349/508
+f 582/350/509 579/349/508 596/360/531
+f 596/360/531 597/363/532 582/350/509
+f 598/364/533 582/350/509 597/363/532
+f 582/350/509 598/364/533 583/352/511
+f 599/365/534 583/352/511 598/364/533
+f 583/352/511 599/365/534 584/354/513
+f 600/366/535 584/354/513 599/365/534
+f 584/354/513 600/366/535 585/356/515
+f 601/367/536 585/356/515 600/366/535
+f 585/356/515 601/367/536 586/358/517
+f 602/368/537 586/358/517 601/367/536
+f 586/358/517 602/368/537 587/356/519
+f 603/367/538 587/356/519 602/368/537
+f 587/356/519 603/367/538 588/354/521
+f 604/366/539 588/354/521 603/367/538
+f 588/354/521 604/366/539 589/352/523
+f 605/365/540 589/352/523 604/366/539
+f 589/352/523 605/365/540 590/350/525
+f 606/364/541 590/350/525 605/365/540
+f 590/350/525 606/364/541 592/360/527
+f 607/363/542 592/360/527 606/364/541
+f 592/360/527 607/363/542 594/362/529
+f 608/369/543 594/362/529 607/363/542
+f 594/362/529 608/369/543 596/360/531
+f 597/363/532 596/360/531 608/369/543
+f 604/344/544 603/370/544 605/343/544
+f 605/343/544 603/370/544 607/348/544
+f 607/348/544 603/370/544 599/347/544
+f 597/340/544 607/348/544 599/347/544
+f 598/342/544 597/340/544 599/347/544
+f 608/341/544 607/348/544 597/340/544
+f 606/345/544 605/343/544 607/348/544
+f 591/370/507 593/371/507 577/344/507
+f 593/371/507 579/346/507 577/344/507
+f 595/372/507 579/346/507 593/371/507
+f 600/346/544 599/347/544 601/372/544
+f 599/347/544 603/370/544 601/372/544
+f 601/372/544 603/370/544 602/371/544
+# 162 faces
+
+#
+# object P_51_Mustang_Hull
+#
+
+v -2.18 8.58 9.73
+v -2.30 8.86 6.02
+v -2.39 8.59 9.73
+v -3.01 6.76 9.95
+v -3.00 7.11 6.05
+v -2.52 8.87 6.26
+v -3.01 7.30 3.85
+v -2.47 9.05 4.06
+v -2.46 9.23 1.97
+v -2.94 7.47 1.76
+v -2.64 7.71 -0.97
+v -2.18 9.48 -0.86
+v -1.61 9.68 -3.39
+v -2.16 7.97 -4.05
+v -1.03 9.75 -4.33
+v -1.12 8.59 -5.66
+v 0.11 9.80 -4.96
+v -0.16 8.78 -6.15
+v 0.64 8.86 -6.31
+v 0.67 9.81 -5.10
+v 1.22 9.79 -4.97
+v 1.42 8.77 -6.17
+v 2.36 8.56 -5.69
+v 2.34 9.73 -4.36
+v 3.35 7.92 -4.07
+v 2.94 9.65 -3.40
+v 3.68 7.66 -1.02
+v 3.37 9.43 -0.91
+v 3.56 9.19 1.92
+v 3.88 7.42 1.70
+v 3.89 7.24 3.80
+v 3.50 9.01 4.01
+v 3.48 8.82 6.21
+v 3.80 7.05 6.00
+v 3.24 8.55 9.69
+v 3.68 6.70 9.89
+v 3.42 6.70 9.89
+v 3.02 8.54 9.69
+v 3.54 7.05 5.77
+v 3.25 8.81 5.98
+v 3.62 7.24 3.66
+v 3.27 9.00 3.86
+v 3.32 9.19 1.84
+v 3.62 7.42 1.64
+v 3.43 7.66 -0.98
+v 3.15 9.44 -0.88
+v 2.76 9.66 -3.28
+v 3.14 7.93 -3.92
+v 2.21 9.73 -4.21
+v 2.21 8.57 -5.48
+v 1.17 9.80 -4.74
+v 1.35 8.78 -5.89
+v 0.63 8.87 -6.03
+v 0.66 9.82 -4.87
+v 0.14 9.81 -4.73
+v -0.11 8.79 -5.88
+v -1.00 8.60 -5.46
+v -0.91 9.76 -4.19
+v -1.97 7.97 -3.90
+v -1.45 9.69 -3.27
+v -2.41 7.71 -0.94
+v -1.97 9.47 -0.84
+v -2.23 9.23 1.89
+v -2.68 7.47 1.69
+v -2.76 7.29 3.71
+v -2.25 9.05 3.90
+v -2.75 7.10 5.82
+v -2.76 6.75 9.94
+v -2.84 6.73 10.23
+v -0.81 12.12 9.64
+v -3.12 6.71 10.24
+v -1.01 12.45 9.62
+v 2.05 12.10 9.61
+v 2.28 12.42 9.59
+v 3.57 6.66 10.17
+v 3.86 6.66 10.17
+v 3.58 6.71 9.84
+v 2.05 12.09 9.29
+v -0.81 12.12 9.32
+v -2.83 6.78 9.90
+v 3.86 6.71 9.84
+v 2.28 12.42 9.26
+v -1.00 12.44 9.30
+v -3.12 6.76 9.90
+v 4.66 -1.79 -1.03
+v 4.25 -0.21 1.79
+v 5.11 -0.16 2.78
+v -3.87 -3.05 -1.87
+v -4.48 -1.72 -0.95
+v -3.60 -2.34 -4.87
+v -3.65 -3.03 1.13
+v -3.68 -1.87 2.11
+v -2.89 -2.82 3.93
+v -2.58 -1.80 4.33
+v -1.34 -1.85 5.56
+v -1.63 -3.21 5.62
+v -0.01 -1.92 6.45
+v -0.09 -3.54 6.63
+v 1.51 -3.23 5.59
+v 1.35 -1.87 5.53
+v 2.85 -2.86 3.87
+v 2.62 -1.84 4.28
+v 3.78 -1.93 2.04
+v 3.66 -3.09 1.06
+v 3.95 -3.11 -1.94
+v 3.82 -2.40 -4.94
+v 3.26 -4.73 -4.88
+v 3.54 -4.03 -1.52
+v 3.30 -4.95 -1.65
+v 2.58 -5.40 -4.82
+v 3.39 -3.91 1.68
+v 2.74 -3.53 4.26
+v 2.35 -3.57 6.63
+v 3.21 -4.15 4.04
+v 3.01 -4.04 6.65
+v 3.11 -5.17 4.28
+v 2.84 -5.09 6.73
+v 2.20 -5.93 4.14
+v 1.97 -5.61 6.76
+v -0.20 -5.90 6.80
+v 3.21 -5.14 1.70
+v 2.63 -5.80 -1.55
+v 2.42 -5.98 1.71
+v -2.81 -5.76 -1.50
+v -3.47 -4.44 -1.52
+v -2.64 -5.36 -4.77
+v -3.41 -5.09 1.76
+v -2.70 -5.94 1.75
+v -3.37 -5.12 4.34
+v -2.53 -5.90 4.18
+v -3.16 -5.04 6.79
+v -2.34 -5.58 6.80
+v -0.18 -6.23 2.91
+v 1.26 -6.32 1.56
+v 1.15 -6.28 -1.34
+v 1.38 -5.76 -5.00
+v 2.45 -4.83 -8.13
+v -3.37 -4.10 4.10
+v -3.47 -3.86 1.74
+v -2.85 -3.49 4.32
+v -3.10 -2.40 -8.95
+v -2.97 -3.71 -8.45
+v -3.25 -4.68 -4.82
+v -2.52 -3.54 6.68
+v -3.23 -3.99 6.71
+v 2.64 7.92 -7.83
+v 0.66 8.54 -8.04
+v 1.70 8.81 -6.12
+v 0.68 8.16 -10.79
+v -1.38 7.95 -7.79
+v -1.27 7.48 -10.79
+v -1.94 6.54 -10.08
+v -1.76 6.04 -15.12
+v -2.35 4.01 -14.71
+v -2.68 4.18 -10.15
+v -2.65 0.18 -14.70
+v -3.13 0.11 -9.48
+v -2.51 -1.75 -14.35
+v -2.17 -2.56 -13.63
+v -2.37 -4.79 -8.08
+v 0.70 7.68 -15.64
+v -0.96 7.14 -15.33
+v 3.16 -3.76 -8.51
+v 2.57 -2.60 -13.68
+v 0.19 -2.88 -13.74
+v 0.33 -0.98 -18.94
+v -1.92 -1.05 -18.81
+v -2.26 -0.55 -18.26
+v -2.16 1.12 -18.78
+v -1.95 3.55 -18.87
+v -1.41 5.63 -19.24
+v -0.63 6.76 -19.48
+v -1.82 0.96 -23.00
+v -1.73 -0.34 -22.73
+v 0.33 -2.07 -22.55
+v 2.58 -1.08 -18.86
+v 3.00 -1.79 -14.41
+v 3.43 -2.45 -9.01
+v 3.70 0.06 -9.54
+v 3.90 0.33 -5.99
+v 3.73 5.02 -6.62
+v 3.92 4.94 -3.00
+v 3.27 7.20 -5.88
+v 3.38 7.92 -4.06
+v 2.45 8.56 -5.59
+v -1.49 3.34 -25.54
+v -1.66 1.28 -25.54
+v -1.68 3.36 -23.04
+v -1.44 -0.13 -25.65
+v 0.43 -0.87 -25.61
+v 2.56 -0.37 -22.78
+v 2.94 -0.59 -18.32
+v 3.33 0.13 -14.76
+v 3.65 4.13 -10.21
+v 3.13 6.50 -10.13
+v 2.56 7.45 -10.83
+v 3.39 3.96 -14.77
+v 3.02 1.08 -18.84
+v -1.36 0.20 -28.16
+v 0.48 -0.62 -27.84
+v 2.38 -0.16 -25.69
+v 2.79 0.93 -23.05
+v 3.03 3.51 -18.93
+v 3.01 6.01 -15.17
+v 2.31 7.11 -15.36
+v 2.69 5.60 -19.28
+v 2.87 3.33 -23.10
+v 2.72 1.24 -25.59
+v 2.39 0.17 -28.20
+v 0.56 -0.18 -32.31
+v -1.02 0.49 -32.48
+v -1.45 1.45 -28.24
+v -1.11 1.83 -32.23
+v -1.22 3.44 -28.23
+v -0.97 3.60 -32.20
+v -0.54 0.61 -36.78
+v -0.65 1.57 -37.11
+v -0.39 0.69 -37.86
+v -0.54 1.56 -37.94
+v -0.40 3.34 -38.12
+v -0.52 3.41 -37.33
+v -0.81 4.47 -34.00
+v -0.80 3.33 -33.98
+v -1.08 4.53 -32.20
+v -1.18 4.91 -28.36
+v -1.43 5.01 -25.55
+v -1.39 5.21 -23.17
+v -1.29 5.80 -25.86
+v -0.82 5.27 -34.30
+v -1.17 5.60 -32.19
+v -0.67 5.70 -35.24
+v -1.25 5.89 -30.06
+v -0.71 6.30 -31.82
+v -1.23 6.04 -28.10
+v -0.11 6.62 -25.95
+v -0.61 6.31 -23.30
+v -0.34 5.20 -38.31
+v 0.09 7.37 -36.51
+v 0.29 7.13 -38.50
+v 0.20 8.38 -37.33
+v 0.34 8.23 -38.61
+v 0.86 15.56 -39.24
+v 0.26 8.62 -35.31
+v 0.18 7.65 -34.16
+v 0.30 8.02 -31.06
+v 0.74 7.30 -20.27
+v 2.04 6.74 -19.51
+v 1.68 6.61 -25.97
+v 2.08 6.29 -23.33
+v 2.78 5.77 -25.91
+v 2.84 4.97 -25.60
+v 2.67 4.88 -28.41
+v 2.57 3.42 -28.27
+v 2.44 3.57 -32.24
+v 2.41 1.80 -32.27
+v 2.28 1.75 -33.92
+v 2.14 0.64 -33.77
+v 1.86 0.59 -36.81
+v 0.59 -0.02 -33.73
+v 0.65 0.31 -37.01
+v 2.30 3.31 -34.01
+v 2.63 4.50 -32.24
+v 2.42 4.44 -34.04
+v 2.83 5.57 -32.24
+v 1.89 16.66 -36.52
+v 1.85 15.87 -36.07
+v 1.97 16.49 -38.45
+v 1.95 15.68 -38.16
+v 1.92 15.55 -39.26
+v 1.73 8.61 -35.34
+v 1.85 8.37 -37.37
+v 1.68 7.64 -34.19
+v 1.83 7.36 -36.54
+v 2.41 6.27 -31.86
+v 2.42 5.67 -35.28
+v 2.88 5.86 -30.11
+v 2.51 5.25 -34.34
+v 2.12 3.39 -37.36
+v 2.07 1.55 -37.14
+v 2.81 6.01 -28.14
+v 1.48 8.01 -31.09
+v 0.89 8.76 -29.21
+v 1.54 8.93 -32.66
+v 0.96 9.49 -30.87
+v 1.34 15.98 -35.15
+v 0.84 15.88 -36.04
+v 0.90 16.67 -36.50
+v 0.87 16.50 -38.43
+v 0.81 15.69 -38.13
+v 0.92 16.38 -39.42
+v 0.38 8.94 -32.64
+v 0.96 17.20 -36.78
+v 1.38 16.76 -35.70
+v 1.06 16.91 -39.48
+v 1.94 16.37 -39.44
+v 1.94 16.37 -39.43
+v 1.94 16.28 -39.43
+v 1.85 16.90 -39.49
+v 1.89 17.19 -36.80
+v 1.41 17.28 -36.06
+v 1.45 17.57 -37.12
+v 1.48 17.32 -39.52
+v 1.44 17.63 -36.65
+v 1.99 1.54 -37.97
+v 1.75 0.67 -37.88
+v 2.02 3.32 -38.14
+v 2.14 5.18 -38.33
+v 1.69 7.13 -38.52
+v 1.75 8.22 -38.63
+v 0.67 0.46 -37.85
+v 3.86 7.51 0.69
+v 3.95 4.68 1.12
+v 3.90 7.06 5.85
+v 3.95 4.60 6.04
+v 3.79 6.68 10.01
+v 3.87 4.45 9.55
+v 3.70 6.44 11.84
+v 3.81 3.46 11.93
+v 3.68 6.42 15.10
+v 3.73 4.91 15.20
+v 3.73 5.37 19.12
+v 3.69 2.76 19.65
+v 3.60 2.71 23.29
+v 3.53 0.63 23.15
+v 3.34 0.90 26.42
+v 3.07 -0.41 26.45
+v 2.86 1.14 31.85
+v 1.48 -0.38 32.12
+v 3.83 2.01 9.53
+v 3.89 1.66 6.29
+v 4.03 1.15 1.42
+v 4.05 0.52 -2.36
+v 4.15 -0.95 -1.80
+v 4.21 0.67 6.43
+v 4.10 1.18 9.55
+v 4.11 1.23 12.19
+v 3.73 2.28 15.62
+v 0.99 0.57 36.00
+v -0.28 -0.63 32.46
+v -0.28 0.36 36.21
+v -1.53 0.59 36.02
+v -2.00 -0.36 32.15
+v -3.23 1.19 31.90
+v -3.45 -0.36 26.51
+v -3.60 0.95 26.49
+v -3.73 0.69 23.22
+v -3.61 2.76 23.36
+v -3.60 2.82 19.72
+v -3.38 5.42 19.19
+v -3.33 4.97 15.27
+v -3.14 6.47 15.16
+v -3.46 3.51 12.00
+v -3.08 6.49 11.90
+v -3.37 4.51 9.62
+v -3.10 6.74 10.07
+v -2.61 -1.47 26.73
+v -0.26 -1.79 26.94
+v -3.76 -0.41 24.24
+v -3.32 -1.40 24.00
+v -2.16 -1.98 24.36
+v -0.25 -2.12 24.38
+v 2.12 -1.51 26.69
+v 2.91 -1.45 23.95
+v 3.44 -0.47 24.18
+v 1.68 -2.00 24.32
+v -3.35 4.66 6.11
+v -3.06 7.12 5.92
+v -3.22 4.74 1.19
+v -2.85 7.57 0.76
+v -3.06 5.00 -2.93
+v -2.21 7.96 -4.00
+v -2.13 7.24 -5.83
+v -1.19 8.59 -5.55
+v -0.40 8.83 -6.10
+v 0.66 8.89 -6.31
+v -2.77 5.07 -6.56
+v -3.39 0.39 -5.92
+v -3.61 0.58 -2.29
+v -3.64 1.21 1.49
+v -3.57 1.72 6.36
+v -3.56 2.07 9.60
+v -3.87 -0.89 -1.73
+v -3.99 -0.15 1.87
+v -3.99 0.73 6.51
+v -3.91 1.24 9.63
+v -3.98 1.29 12.27
+v -3.58 2.34 15.69
+v 3.48 8.59 10.06
+v 3.42 7.85 11.79
+v 3.40 7.97 12.78
+v 3.48 7.69 15.11
+v 3.72 6.84 18.67
+v 3.66 5.67 23.35
+v 3.50 2.82 26.85
+v 3.33 3.01 31.94
+v 2.17 1.58 35.93
+v 2.97 3.24 35.96
+v 1.87 2.09 38.21
+v 2.20 3.58 38.12
+v 3.30 5.02 36.17
+v 0.83 1.30 38.26
+v 2.01 3.59 38.71
+v 2.70 5.55 38.59
+v 3.26 6.60 35.87
+v 2.69 6.79 38.51
+v 2.56 8.39 35.96
+v 2.08 8.17 38.43
+v 2.14 8.94 35.78
+v 1.33 8.81 38.39
+v 1.17 9.51 35.68
+v 0.66 9.21 38.36
+v 0.16 9.58 35.68
+v 0.11 9.29 38.36
+v -0.45 9.22 38.37
+v -0.86 9.52 35.70
+v -1.16 8.83 38.41
+v -1.88 8.97 35.82
+v -1.96 8.20 38.46
+v -2.36 8.43 36.01
+v -0.94 9.87 31.34
+v -0.99 10.19 26.34
+v 0.31 10.34 26.77
+v 0.24 10.10 31.35
+v 1.40 9.85 31.31
+v 2.43 9.42 31.16
+v 2.98 8.72 31.28
+v 3.55 6.98 31.31
+v 3.30 9.02 26.28
+v 2.49 9.75 26.24
+v 2.79 9.81 22.99
+v 1.60 10.17 26.31
+v 1.80 10.21 23.30
+v 2.05 10.21 20.89
+v 0.35 10.44 23.69
+v 0.39 10.50 21.00
+v 0.42 10.41 17.76
+v 0.46 10.45 15.10
+v -1.03 10.08 15.41
+v -3.29 7.11 21.42
+v -3.28 7.11 23.77
+v -2.82 8.99 21.40
+v -2.82 8.71 18.17
+v -2.21 9.52 17.94
+v -2.03 9.13 15.29
+v -2.22 8.81 13.72
+v -1.24 9.98 14.02
+v 0.48 10.47 13.79
+v 1.91 10.06 15.38
+v 2.10 10.07 18.02
+v 2.87 9.77 21.15
+v 3.35 9.04 23.40
+v 3.64 6.98 26.77
+v -3.23 6.90 18.74
+v -3.39 5.73 23.42
+v -2.82 7.74 15.17
+v -2.65 8.02 12.84
+v -3.59 2.87 26.92
+v -2.66 7.90 11.85
+v -2.61 8.64 10.12
+v -2.70 6.83 38.56
+v -3.20 6.62 35.03
+v -2.83 5.59 38.64
+v -3.42 5.07 36.23
+v -2.33 3.62 38.75
+v -2.50 3.62 38.16
+v -3.25 3.29 36.02
+v -2.32 2.13 38.25
+v -2.60 1.62 35.98
+v -1.35 1.32 38.28
+v -3.53 3.06 32.00
+v -3.56 5.54 26.97
+v -3.59 4.96 32.12
+v -3.34 7.04 26.84
+v -2.77 9.09 23.46
+v -2.17 9.81 21.20
+v -1.29 10.09 18.05
+v -1.30 10.23 20.93
+v -1.11 10.24 23.32
+v -2.80 9.06 26.34
+v -2.13 9.85 23.04
+v -1.92 9.78 26.28
+v -2.63 8.76 31.33
+v -3.37 7.03 31.38
+v -2.01 9.46 31.20
+v 3.57 4.91 32.06
+v 3.72 5.49 26.90
+v 3.66 7.05 23.70
+v 3.73 7.06 21.36
+v 3.44 8.94 21.34
+v 3.50 8.66 18.11
+v 2.97 9.48 17.90
+v 2.82 9.09 15.25
+v 3.02 8.77 13.67
+v 2.14 9.95 13.99
+v -8.03 6.05 -27.42
+v -4.52 6.07 -27.32
+v -8.03 5.97 -28.86
+v -11.48 5.96 -28.73
+v -11.12 5.68 -31.09
+v -13.81 5.66 -30.77
+v -14.13 5.91 -28.57
+v -15.24 5.49 -30.33
+v -15.27 5.57 -28.02
+v -14.18 5.73 -27.39
+v -11.49 6.01 -27.59
+v -11.64 5.76 -26.95
+v -8.48 5.76 -26.64
+v -5.05 5.77 -26.30
+v -2.22 5.77 -26.09
+v -1.90 6.05 -27.63
+v -1.72 5.88 -29.69
+v -4.26 5.97 -29.14
+v -4.42 5.63 -31.75
+v -7.79 5.68 -31.43
+v -1.74 5.55 -32.08
+v 4.34 6.11 32.28
+v 4.06 6.10 32.66
+v 4.63 6.10 32.53
+v 4.17 6.09 33.03
+v 4.75 5.76 32.68
+v 4.21 5.75 33.23
+v 4.60 5.42 32.56
+v 4.14 5.41 33.05
+v 4.31 5.43 32.30
+v 4.02 5.42 32.69
+v 4.19 5.77 32.16
+v 3.98 5.77 32.49
+v 3.79 5.77 32.46
+v 3.80 6.10 32.64
+v 3.78 6.10 33.03
+v 3.75 5.75 33.24
+v 3.74 5.42 33.06
+v 3.76 5.42 32.67
+v 13.07 5.77 -29.01
+v 12.75 5.49 -31.56
+v 9.62 5.83 -29.06
+v 9.43 5.54 -31.80
+v 5.87 5.90 -29.25
+v 6.06 5.54 -32.00
+v 3.33 5.84 -29.75
+v 3.46 6.01 -27.69
+v 3.72 5.73 -26.16
+v 6.08 5.99 -27.44
+v 6.55 5.68 -26.43
+v 9.59 5.91 -27.62
+v 9.99 5.62 -26.85
+v 13.05 5.81 -27.87
+v 13.16 5.56 -27.23
+v 15.71 5.50 -27.73
+v 15.71 5.68 -28.91
+v 3.39 5.51 -32.16
+v 16.80 5.32 -28.38
+v 16.83 5.24 -30.69
+v 15.57 5.42 -31.45
+v 16.72 5.01 -33.40
+v 15.72 4.99 -33.73
+v 2.75 5.18 -23.22
+v 2.74 3.31 -25.59
+v 2.61 1.41 -28.29
+v 2.21 0.46 -32.52
+v -0.90 0.66 -33.74
+v -0.94 1.77 -33.88
+v -3.75 5.44 34.55
+v -3.73 5.78 34.73
+v -4.14 5.45 34.56
+v -4.02 5.45 34.19
+v -4.29 5.46 33.81
+v -4.13 5.81 33.67
+v -3.94 5.80 33.99
+v -4.26 6.14 33.78
+v -3.98 6.13 34.16
+v -4.55 6.14 34.05
+v -4.11 6.13 34.53
+v -4.72 5.80 34.19
+v -4.19 5.78 34.73
+v -4.59 5.46 34.07
+v -3.71 6.12 34.53
+v -3.72 6.13 34.14
+v -3.74 5.80 33.96
+v -3.76 5.45 34.16
+v -4.87 -0.09 2.87
+v -4.96 0.33 6.76
+v -4.97 0.69 9.85
+v -4.97 0.81 12.34
+v -4.02 1.40 15.81
+v -5.09 0.90 16.22
+v -4.95 0.55 19.82
+v -3.90 1.32 19.99
+v -4.83 0.16 22.21
+v -4.59 -0.55 23.22
+v 5.14 0.25 6.67
+v 6.54 -0.19 3.45
+v 6.70 0.02 6.36
+v 5.11 0.61 9.76
+v 6.75 0.38 9.22
+v 5.06 0.73 12.25
+v 6.64 0.56 12.08
+v 5.08 0.82 16.12
+v 6.67 0.70 16.38
+v 6.69 0.53 18.92
+v 4.83 0.58 19.72
+v 5.76 -0.33 22.01
+v 4.60 0.08 22.12
+v 4.27 -0.62 23.14
+v 6.08 -0.69 22.43
+v 8.22 -0.70 21.64
+v -2.94 -4.05 6.84
+v -2.50 -4.14 5.16
+v -2.29 -3.64 6.81
+v -1.95 -3.79 5.13
+v -0.10 -3.68 6.76
+v 2.10 -3.67 6.76
+v 1.79 -3.82 5.09
+v 2.71 -4.09 6.78
+v 2.31 -4.18 5.11
+v -2.69 8.37 10.10
+v -1.01 12.37 9.64
+v -2.40 8.38 10.10
+v -0.82 12.04 9.66
+v 2.27 12.34 9.61
+v 2.05 12.02 9.63
+v 3.51 8.33 10.04
+v 3.22 8.33 10.04
+v 3.84 1.26 19.92
+v 4.07 1.34 15.73
+v -4.70 -0.90 3.35
+v -4.70 -1.20 6.48
+v -6.30 -0.85 3.61
+v -6.56 -1.14 6.50
+v -12.47 -0.77 4.38
+v -12.73 -0.99 6.36
+v -6.67 -1.53 9.41
+v -14.07 -1.37 9.24
+v -6.52 -1.75 12.40
+v -13.54 -1.60 12.35
+v -6.88 -1.99 14.90
+v -14.82 -1.75 15.41
+v -7.22 -1.67 18.64
+v -4.86 -2.15 14.61
+v -4.82 -1.75 19.27
+v -3.62 -2.25 14.45
+v -3.44 -1.80 19.64
+v -1.88 -2.40 14.58
+v -1.67 -2.00 20.13
+v -0.19 -2.16 20.12
+v -3.22 -1.95 12.03
+v -4.78 -1.81 12.13
+v -4.74 -1.59 9.42
+v -2.95 -1.72 9.49
+v -1.52 -2.01 12.24
+v -0.12 -2.14 14.54
+v 1.61 -2.42 14.55
+v 1.30 -2.02 20.10
+v 3.10 -1.85 19.57
+v 3.08 -1.79 21.12
+v 4.47 -1.76 20.56
+v 3.43 -1.11 22.63
+v -0.09 -2.11 12.44
+v -2.90 -1.39 6.33
+v -1.41 -1.87 9.61
+v -0.05 -1.96 9.46
+v 1.31 -1.89 9.58
+v 1.35 -2.03 12.21
+v -1.47 -1.58 6.59
+v 1.48 -1.60 6.57
+v 4.85 -0.98 3.26
+v 6.45 -0.95 3.49
+v 4.75 -1.28 6.39
+v 6.61 -1.24 6.37
+v 4.68 -1.66 9.33
+v 6.61 -1.63 9.28
+v 4.63 -1.88 12.04
+v 6.36 -1.85 12.28
+v 4.61 -2.22 14.52
+v 6.63 -2.09 14.77
+v 6.91 -1.78 18.50
+v 4.50 -1.82 19.18
+v 7.17 -1.73 19.64
+v 3.37 -2.30 14.39
+v 3.06 -1.99 11.97
+v 2.87 -1.77 9.44
+v 2.93 -1.44 6.28
+v -0.21 -2.18 21.60
+v 1.16 -2.18 21.93
+v -13.50 -1.56 17.59
+v -7.50 -1.61 19.78
+v -4.83 -1.69 20.65
+v -3.45 -1.74 21.19
+v -1.59 -2.16 21.95
+v -3.78 -1.05 22.70
+v -14.13 -0.49 20.28
+v -8.50 -0.57 21.80
+v -6.38 -0.59 22.55
+v -6.57 0.66 12.21
+v -6.69 0.77 16.50
+v -13.44 0.66 12.23
+v -14.35 0.80 15.32
+v -6.79 0.64 19.05
+v -13.40 0.59 18.05
+v -6.02 -0.24 22.12
+v -14.04 0.46 9.14
+v -6.62 0.48 9.35
+v -6.54 0.12 6.49
+v -6.32 -0.09 3.57
+v -12.44 -0.05 4.34
+v -12.67 0.19 6.29
+v -2.87 -5.00 6.90
+v -2.45 -4.96 5.21
+v 2.56 -5.05 6.85
+v 2.18 -4.99 5.17
+v 1.76 -5.52 6.88
+v 1.50 -5.39 5.19
+v -0.19 -5.70 6.91
+v -2.13 -5.49 6.92
+v -1.81 -5.37 5.22
+v -3.14 5.42 35.50
+v -3.77 5.43 35.52
+v -3.16 5.24 35.02
+v -3.79 5.24 35.05
+v -3.34 5.42 26.54
+v -3.97 5.42 26.57
+v -3.34 5.62 26.05
+v -3.97 5.63 26.08
+v -3.93 6.43 26.05
+v -3.91 6.61 26.52
+v -3.30 6.42 26.02
+v -3.28 6.61 26.49
+v -3.73 6.43 35.00
+v -3.10 6.43 34.97
+v -3.73 6.23 35.49
+v -3.10 6.22 35.46
+v -3.88 5.93 27.60
+v -3.87 6.28 27.39
+v -4.34 5.93 27.59
+v -4.29 5.60 27.42
+v -4.74 5.61 26.94
+v -4.44 5.61 26.67
+v -4.17 5.60 27.05
+v -4.28 5.96 26.53
+v -4.09 5.95 26.85
+v -4.41 6.30 26.65
+v -4.13 6.29 27.02
+v -4.70 6.29 26.91
+v -4.26 6.28 27.39
+v -4.87 5.95 27.05
+v -3.87 6.28 27.00
+v -3.89 5.95 26.82
+v -3.91 5.60 27.03
+v -3.90 5.59 27.42
+v -1.21 9.64 14.41
+v -0.71 12.35 9.95
+v -1.44 9.65 14.42
+v -1.02 12.35 9.90
+v -1.45 9.34 14.15
+v -1.00 12.00 9.77
+v -1.22 9.34 14.15
+v -0.69 12.00 9.83
+v 2.22 12.32 9.86
+v 1.90 12.33 9.92
+v 2.27 9.62 14.38
+v 2.04 9.62 14.38
+v 2.17 11.98 9.74
+v 2.26 9.31 14.12
+v 1.85 11.98 9.80
+v 2.03 9.31 14.12
+v 0.81 -4.99 -22.81
+v -0.46 -4.98 -22.79
+v 0.82 -4.71 -23.17
+v -0.44 -4.70 -23.15
+v 0.89 -3.01 -22.29
+v -0.38 -3.00 -22.28
+v 0.96 -1.67 -22.95
+v -0.30 -1.66 -22.94
+v 0.96 -1.54 -22.03
+v -0.31 -1.53 -22.02
+v 0.89 -2.88 -21.51
+v -0.38 -2.87 -21.49
+v -1.47 -5.74 -4.97
+v -1.38 -6.26 -1.31
+v -1.57 -6.30 1.58
+v -0.12 -6.30 -1.26
+v -0.03 -5.59 -5.78
+v 0.03 -5.10 -8.16
+v 3.48 5.22 -27.47
+v 3.30 5.03 -29.46
+v 3.33 4.89 -32.33
+v 5.82 5.02 -29.12
+v 6.03 4.88 -32.03
+v 9.40 4.92 -31.81
+v 9.58 5.05 -28.94
+v 12.73 4.96 -31.49
+v 13.03 5.07 -28.91
+v 15.50 5.01 -31.28
+v 15.68 5.13 -28.83
+v 13.02 5.21 -27.78
+v 6.03 5.22 -27.32
+v 9.54 5.21 -27.51
+v -0.26 1.32 38.26
+v -15.08 5.26 -33.04
+v -14.07 5.22 -33.39
+v -14.09 5.21 -32.45
+v -13.95 5.24 -30.69
+v -14.16 5.36 -28.49
+v -11.51 5.26 -28.63
+v -11.52 5.40 -27.50
+v -8.05 5.35 -27.31
+v -4.55 5.31 -27.20
+v -1.99 5.26 -27.41
+v -1.77 5.07 -29.40
+v -1.73 4.93 -32.15
+v -4.31 5.09 -29.00
+v -8.06 5.19 -28.74
+v -4.44 4.96 -31.91
+v -7.82 5.05 -31.65
+v -11.33 5.14 -31.30
+v -1.04 1.63 37.01
+v 0.59 1.62 36.99
+v -1.77 2.24 36.99
+v -1.91 3.36 36.92
+v 1.37 2.21 36.96
+v 1.61 3.33 36.89
+v 2.64 -0.09 1.94
+v 2.34 6.46 -0.67
+v -2.37 -0.05 1.99
+v -1.39 6.49 -0.64
+v 2.56 -0.95 10.54
+v -2.59 -0.91 10.59
+v 2.52 4.84 11.25
+v -2.03 4.88 11.29
+v 2.59 6.63 11.43
+v -1.94 6.67 11.48
+v 0.49 10.12 11.77
+v 2.05 9.05 11.64
+v -1.17 9.07 11.67
+v 1.94 3.49 38.22
+v -2.26 3.52 38.26
+v -2.09 2.18 38.33
+v -1.23 1.46 38.36
+v 0.72 1.45 38.34
+v 1.65 2.15 38.30
+v -3.85 5.90 29.03
+v -3.83 6.25 28.83
+v -4.31 5.90 29.03
+v -4.26 5.57 28.86
+v -4.71 5.58 28.37
+v -4.41 5.58 28.11
+v -4.14 5.57 28.49
+v -4.25 5.93 27.97
+v -4.06 5.92 28.29
+v -4.38 6.27 28.08
+v -4.10 6.26 28.46
+v -4.67 6.26 28.35
+v -4.23 6.25 28.83
+v -4.84 5.92 28.49
+v -3.84 6.25 28.44
+v -3.86 5.92 28.26
+v -3.88 5.57 28.46
+v -3.87 5.56 28.85
+v -3.82 5.87 30.47
+v -3.80 6.22 30.26
+v -4.28 5.87 30.46
+v -4.23 5.54 30.29
+v -4.68 5.55 29.81
+v -4.38 5.55 29.54
+v -4.10 5.54 29.92
+v -4.22 5.90 29.40
+v -4.03 5.89 29.72
+v -4.35 6.24 29.52
+v -4.07 6.23 29.89
+v -4.64 6.23 29.78
+v -4.20 6.22 30.26
+v -4.80 5.89 29.92
+v -3.81 6.22 29.87
+v -3.83 5.89 29.69
+v -3.85 5.54 29.90
+v -3.84 5.53 30.29
+v -3.79 5.84 31.87
+v -3.78 6.19 31.66
+v -4.25 5.84 31.87
+v -4.20 5.51 31.69
+v -4.65 5.52 31.21
+v -4.35 5.52 30.95
+v -4.08 5.51 31.32
+v -4.19 5.87 30.80
+v -4.00 5.86 31.12
+v -4.32 6.21 30.92
+v -4.04 6.20 31.30
+v -4.61 6.20 31.18
+v -4.17 6.19 31.67
+v -4.78 5.86 31.33
+v -3.78 6.19 31.27
+v -3.80 5.86 31.09
+v -3.82 5.51 31.30
+v -3.81 5.50 31.69
+v -3.76 5.81 33.31
+v -3.74 6.16 33.10
+v -4.22 5.81 33.31
+v -4.17 5.48 33.13
+v -4.62 5.49 32.65
+v -4.32 5.49 32.38
+v -4.05 5.48 32.76
+v -4.16 5.84 32.24
+v -3.97 5.83 32.56
+v -4.29 6.17 32.36
+v -4.01 6.16 32.73
+v -4.58 6.17 32.62
+v -4.14 6.16 33.11
+v -4.75 5.83 32.77
+v -3.75 6.16 32.71
+v -3.77 5.83 32.53
+v -3.79 5.48 32.74
+v -3.78 5.47 33.13
+v 4.13 5.56 26.00
+v 4.09 5.36 26.49
+v 3.50 5.57 25.99
+v 3.46 5.36 26.48
+v 3.69 5.18 34.98
+v 3.06 5.19 34.96
+v 3.67 5.37 35.45
+v 3.04 5.37 35.44
+v 3.08 6.18 35.41
+v 3.71 6.17 35.42
+v 3.11 6.38 34.92
+v 3.74 6.38 34.93
+v 3.52 6.56 26.43
+v 4.15 6.55 26.45
+v 3.53 6.37 25.96
+v 4.16 6.37 25.97
+v 4.02 5.53 27.34
+v 4.41 5.53 27.34
+v 4.03 5.87 27.52
+v 4.49 5.87 27.51
+v 4.05 6.21 27.31
+v 4.45 6.21 27.31
+v 4.07 6.22 26.92
+v 4.33 6.22 26.94
+v 4.06 5.89 26.74
+v 4.26 5.88 26.77
+v 4.04 5.54 26.95
+v 4.30 5.54 26.97
+v 4.59 5.54 26.59
+v 4.87 5.54 26.85
+v 5.03 5.87 26.96
+v 4.90 6.22 26.82
+v 4.62 6.23 26.56
+v 4.46 5.89 26.45
+v 3.95 5.50 28.78
+v 4.34 5.50 28.78
+v 3.96 5.84 28.96
+v 4.42 5.84 28.95
+v 3.98 6.19 28.75
+v 4.38 6.18 28.75
+v 4.00 6.19 28.36
+v 4.26 6.19 28.38
+v 4.00 5.86 28.18
+v 4.19 5.85 28.21
+v 3.97 5.51 28.39
+v 4.23 5.51 28.41
+v 4.52 5.52 28.03
+v 4.80 5.51 28.28
+v 4.96 5.84 28.40
+v 4.83 6.19 28.26
+v 4.55 6.20 28.00
+v 4.39 5.86 27.88
+v 3.88 5.47 30.21
+v 4.27 5.47 30.21
+v 3.89 5.81 30.39
+v 4.35 5.81 30.38
+v 3.91 6.16 30.19
+v 4.31 6.15 30.18
+v 3.93 6.16 29.80
+v 4.19 6.16 29.81
+v 3.93 5.83 29.62
+v 4.12 5.82 29.64
+v 3.90 5.48 29.82
+v 4.16 5.48 29.84
+v 4.45 5.49 29.46
+v 4.73 5.48 29.72
+v 4.89 5.81 29.83
+v 4.77 6.16 29.69
+v 4.48 6.17 29.43
+v 4.32 5.83 29.32
+v 3.81 5.45 31.62
+v 4.21 5.44 31.61
+v 3.82 5.78 31.80
+v 4.28 5.78 31.79
+v 3.85 6.13 31.59
+v 4.24 6.12 31.59
+v 3.87 6.13 31.20
+v 4.12 6.13 31.22
+v 3.86 5.80 31.02
+v 4.05 5.80 31.05
+v 3.83 5.45 31.23
+v 4.09 5.45 31.25
+v 4.38 5.46 30.86
+v 4.67 5.45 31.12
+v 4.82 5.79 31.24
+v 4.70 6.13 31.09
+v 4.41 6.14 30.84
+v 4.26 5.80 30.72
+v 3.68 5.39 34.48
+v 4.07 5.38 34.48
+v 3.68 5.72 34.66
+v 4.14 5.72 34.65
+v 3.71 6.07 34.46
+v 4.10 6.06 34.45
+v 3.73 6.08 34.07
+v 3.99 6.07 34.08
+v 3.72 5.74 33.89
+v 3.91 5.74 33.91
+v 3.69 5.39 34.09
+v 3.95 5.39 34.11
+v 4.24 5.40 33.73
+v 4.53 5.39 33.99
+v 4.69 5.73 34.10
+v 4.56 6.07 33.96
+v 4.28 6.08 33.70
+v 4.12 5.74 33.59
+v 2.00 9.86 13.69
+v 0.48 10.50 13.49
+v 2.82 8.80 13.37
+v 3.16 8.00 12.53
+v 3.18 7.88 11.58
+v 3.25 8.63 9.91
+v 3.52 6.72 9.87
+v 3.62 7.10 5.87
+v 3.59 7.56 0.92
+v 3.15 7.97 -3.64
+v 2.31 8.62 -5.12
+v 1.61 8.87 -5.63
+v 0.65 8.95 -5.81
+v -0.32 8.88 -5.61
+v -1.05 8.64 -5.08
+v -1.99 8.01 -3.59
+v -2.58 7.61 0.98
+v -2.78 7.15 5.93
+v -2.82 6.77 9.93
+v -2.37 8.67 9.96
+v -2.41 7.93 11.63
+v -2.41 8.05 12.58
+v -2.01 8.84 13.42
+v -1.11 9.89 13.72
+v 2.65 -0.56 6.70
+v -2.55 -0.52 6.75
+v -2.25 3.17 2.89
+v 2.75 3.13 2.84
+v -1.08 9.58 0.57
+v 2.23 9.55 0.54
+v -2.17 3.24 6.44
+v 2.58 3.21 6.40
+v -2.27 0.09 6.82
+v 2.37 0.05 6.77
+v -1.09 9.25 -0.17
+v 2.22 9.22 -0.20
+v -1.96 -0.05 1.55
+v 2.19 -0.09 1.51
+v 3.50 8.34 10.37
+v 2.27 12.35 9.94
+v -1.02 12.37 9.97
+v -2.69 8.38 10.43
+v 3.22 8.34 10.37
+v 2.04 12.02 9.96
+v -0.82 12.04 9.99
+v -2.41 8.39 10.42
+v 1.01 7.38 -18.16
+v 1.12 12.77 -18.66
+v 0.72 7.40 -17.87
+v 0.98 12.78 -18.51
+v 0.43 7.39 -18.16
+v 0.84 12.77 -18.65
+v 0.72 7.38 -18.45
+v 0.98 12.77 -18.80
+v 15.64 4.97 -32.81
+# 1073 vertices
+
+vn 0.05 1.00 0.07
+vn -0.95 0.32 0.03
+vn -0.95 0.31 0.03
+vn -0.96 0.27 0.04
+vn -0.96 0.28 0.01
+vn -0.96 0.29 0.01
+vn -0.96 0.27 -0.04
+vn -0.96 0.27 -0.05
+vn -0.95 0.28 -0.12
+vn -0.96 0.26 -0.14
+vn -0.88 0.37 -0.28
+vn -0.88 0.40 -0.26
+vn -0.66 0.56 -0.49
+vn -0.59 0.64 -0.49
+vn -0.29 0.75 -0.59
+vn -0.31 0.76 -0.57
+vn 0.00 0.78 -0.62
+vn 0.00 0.79 -0.62
+vn 0.30 0.74 -0.60
+vn 0.32 0.75 -0.58
+vn 0.60 0.62 -0.50
+vn 0.69 0.52 -0.50
+vn 0.91 0.34 -0.25
+vn 0.91 0.30 -0.27
+vn 0.98 0.19 -0.09
+vn 0.98 0.18 -0.10
+vn 0.98 0.19 -0.01
+vn 0.98 0.18 -0.02
+vn 0.98 0.19 0.03
+vn 0.98 0.21 0.04
+vn 0.98 0.18 0.06
+vn 0.97 0.22 0.06
+vn 0.97 0.24 0.05
+vn -0.97 -0.22 -0.05
+vn -0.98 -0.20 -0.05
+vn -0.98 -0.17 -0.06
+vn -0.98 -0.16 -0.06
+vn -0.98 -0.18 -0.03
+vn -0.98 -0.19 -0.04
+vn -0.99 -0.17 0.01
+vn -0.99 -0.17 0.02
+vn -0.98 -0.18 0.08
+vn -0.98 -0.16 0.10
+vn -0.92 -0.28 0.27
+vn -0.92 -0.31 0.24
+vn -0.69 -0.51 0.51
+vn -0.62 -0.60 0.51
+vn -0.30 -0.73 0.62
+vn -0.33 -0.73 0.60
+vn -0.00 -0.77 0.64
+vn -0.00 -0.78 0.63
+vn 0.29 -0.74 0.61
+vn 0.32 -0.74 0.59
+vn 0.60 -0.62 0.50
+vn 0.67 -0.55 0.50
+vn 0.89 -0.38 0.25
+vn 0.89 -0.35 0.28
+vn 0.96 -0.26 0.11
+vn 0.96 -0.25 0.13
+vn 0.97 -0.26 0.04
+vn 0.97 -0.25 0.04
+vn 0.96 -0.26 -0.01
+vn 0.96 -0.28 -0.01
+vn 0.97 -0.25 -0.03
+vn 0.96 -0.29 -0.03
+vn 0.95 -0.30 -0.02
+vn 0.01 0.11 0.99
+vn 0.03 0.08 1.00
+vn 0.01 0.10 0.99
+vn -0.01 0.08 1.00
+vn -0.96 -0.28 -0.06
+vn -0.62 -0.79 -0.00
+vn -0.59 -0.81 -0.00
+vn 0.59 -0.81 0.01
+vn 0.54 -0.84 0.01
+vn 0.93 -0.36 -0.03
+vn 0.93 -0.36 -0.04
+vn -0.01 -0.10 -0.99
+vn 0.01 -0.08 -1.00
+vn -0.03 -0.08 -1.00
+vn 0.01 1.00 0.09
+vn -0.07 0.99 0.07
+vn -0.01 1.00 0.08
+vn -0.01 1.00 0.09
+vn 0.10 0.99 0.09
+vn 0.25 0.97 0.08
+vn -0.11 0.99 0.08
+vn 0.08 0.99 0.08
+vn -0.03 1.00 0.07
+vn -0.75 0.66 0.05
+vn 0.13 0.99 0.09
+vn 0.20 0.98 0.09
+vn -0.03 1.00 0.08
+vn -0.03 1.00 0.09
+vn 0.05 1.00 0.08
+vn 0.03 1.00 0.05
+vn 0.05 1.00 -0.03
+vn 0.08 0.99 -0.08
+vn 0.06 1.00 0.01
+vn 0.08 1.00 0.03
+vn 0.06 1.00 0.05
+vn -0.01 1.00 0.05
+vn -0.05 1.00 0.04
+vn -0.07 1.00 0.03
+vn -0.04 1.00 0.01
+vn -0.07 0.99 -0.09
+vn -0.04 1.00 -0.03
+vn -0.05 -0.95 -0.32
+vn -0.21 -0.95 -0.25
+vn -0.32 -0.93 -0.19
+vn -0.19 -0.98 -0.10
+vn -0.26 -0.93 0.26
+vn -0.13 -0.99 0.03
+vn 0.11 -0.99 0.04
+vn 0.21 -0.95 -0.25
+vn 0.31 -0.94 -0.16
+vn 0.18 -0.98 -0.08
+vn 0.25 -0.93 0.28
+vn 0.03 -0.95 -0.32
+vn 0.08 -0.99 -0.08
+vn -0.50 -0.86 -0.08
+vn -0.04 -1.00 -0.09
+vn -0.09 -0.99 -0.09
+vn -0.18 -0.98 -0.09
+vn -0.01 -1.00 -0.09
+vn -0.04 -0.99 -0.09
+vn 0.02 -1.00 -0.08
+vn -0.03 -1.00 -0.09
+vn 0.47 -0.88 -0.06
+vn -0.09 -0.99 -0.08
+vn -0.14 -0.99 -0.08
+vn -0.00 -1.00 -0.09
+vn 0.02 -1.00 -0.09
+vn 0.07 -0.99 -0.08
+vn 0.96 0.27 0.06
+vn 0.60 0.80 0.00
+vn 0.62 0.78 0.00
+vn -0.55 0.84 -0.01
+vn -0.59 0.81 -0.01
+vn -0.94 0.35 0.03
+vn -0.94 0.35 0.04
+vn 0.41 0.82 -0.40
+vn -0.95 -0.30 -0.05
+vn -1.00 0.04 -0.08
+vn -0.99 -0.05 -0.12
+vn -0.96 -0.21 0.16
+vn -0.94 -0.19 0.29
+vn -0.89 0.08 0.45
+vn -0.78 -0.00 0.62
+vn -0.65 0.14 0.75
+vn -0.63 0.51 0.59
+vn 0.02 0.13 0.99
+vn -0.01 0.11 0.99
+vn 0.65 0.46 0.61
+vn 0.66 0.08 0.75
+vn 0.89 -0.00 0.46
+vn 0.78 -0.07 0.62
+vn 0.91 -0.27 0.30
+vn 0.94 -0.30 0.18
+vn 1.00 -0.03 -0.06
+vn 0.92 -0.40 -0.02
+vn 0.99 -0.14 -0.10
+vn 0.86 -0.51 -0.10
+vn 0.95 -0.32 0.04
+vn 0.89 -0.45 -0.02
+vn 0.52 -0.85 -0.13
+vn 0.98 -0.12 0.13
+vn 0.84 0.44 0.32
+vn 0.51 0.86 0.05
+vn 0.96 0.25 0.09
+vn 0.91 0.41 0.06
+vn 0.88 -0.46 0.08
+vn 0.82 -0.55 0.13
+vn 0.38 -0.92 0.10
+vn 0.32 -0.94 0.14
+vn -0.01 -0.99 0.11
+vn 0.90 -0.43 0.03
+vn 0.56 -0.82 -0.06
+vn 0.52 -0.86 0.02
+vn -0.65 -0.76 -0.09
+vn -0.94 -0.35 -0.03
+vn -0.56 -0.82 -0.13
+vn -0.93 -0.36 0.00
+vn -0.55 -0.84 0.00
+vn -0.92 -0.40 0.06
+vn -0.41 -0.91 0.09
+vn -0.86 -0.50 0.12
+vn -0.35 -0.93 0.14
+vn -0.01 -1.00 0.08
+vn 0.13 -0.99 0.03
+vn 0.15 -0.99 -0.08
+vn 0.13 -0.98 -0.17
+vn 0.47 -0.84 -0.26
+vn -0.94 0.33 0.07
+vn -0.99 -0.03 0.11
+vn -0.81 0.51 0.29
+vn -0.99 -0.10 -0.13
+vn -0.92 -0.35 -0.19
+vn -0.89 -0.45 -0.10
+vn -0.48 0.87 0.03
+vn -0.89 0.46 0.04
+vn 0.66 0.74 -0.13
+vn 0.01 0.98 -0.20
+vn 0.46 0.85 -0.26
+vn 0.01 0.99 -0.13
+vn -0.62 0.77 -0.14
+vn -0.62 0.77 -0.12
+vn -0.91 0.41 -0.10
+vn -0.90 0.42 -0.10
+vn -0.98 0.17 -0.09
+vn -0.98 0.19 -0.08
+vn -1.00 -0.00 -0.09
+vn -1.00 0.03 -0.09
+vn -0.94 -0.31 -0.14
+vn -0.56 -0.78 -0.29
+vn -0.50 -0.82 -0.28
+vn 0.01 0.99 -0.10
+vn -0.60 0.79 -0.11
+vn 0.89 -0.42 -0.16
+vn 0.52 -0.81 -0.27
+vn -0.01 -0.93 -0.36
+vn -0.01 -1.00 0.00
+vn -0.58 -0.81 -0.14
+vn -0.97 -0.19 -0.14
+vn -0.99 0.05 -0.10
+vn -0.98 0.16 -0.09
+vn -0.91 0.40 -0.09
+vn -0.63 0.77 -0.09
+vn -1.00 -0.02 -0.08
+vn -0.87 -0.47 -0.16
+vn -0.02 -0.99 -0.17
+vn 0.54 -0.83 -0.11
+vn 0.91 -0.39 -0.12
+vn 0.98 -0.19 -0.11
+vn 1.00 -0.06 -0.06
+vn 1.00 -0.02 -0.06
+vn 0.99 0.13 -0.06
+vn 1.00 0.08 -0.05
+vn 0.91 0.39 -0.13
+vn 0.96 0.25 -0.14
+vn -0.99 0.07 -0.07
+vn -1.00 -0.03 -0.07
+vn -0.99 0.11 -0.06
+vn -0.77 -0.62 -0.11
+vn -0.01 -0.99 -0.17
+vn 0.83 -0.54 -0.13
+vn 0.95 -0.28 -0.11
+vn 0.99 -0.09 -0.07
+vn 0.99 0.10 -0.06
+vn 0.94 0.34 -0.08
+vn 0.66 0.74 -0.11
+vn 0.99 0.08 -0.07
+vn 1.00 -0.04 -0.08
+vn -0.81 -0.58 -0.11
+vn -0.01 -0.99 -0.11
+vn 0.74 -0.67 -0.08
+vn 0.99 -0.11 -0.05
+vn 1.00 0.07 -0.07
+vn 0.93 0.35 -0.09
+vn 0.63 0.77 -0.10
+vn 0.94 0.32 -0.07
+vn 1.00 0.02 -0.03
+vn 0.99 -0.12 -0.04
+vn 0.78 -0.63 -0.08
+vn -0.01 -0.99 -0.10
+vn -0.81 -0.57 -0.12
+vn -1.00 0.01 -0.08
+vn -1.00 0.02 -0.09
+vn -0.99 0.07 -0.08
+vn -1.00 -0.02 -0.07
+vn -0.75 -0.65 -0.12
+vn -0.99 -0.05 -0.11
+vn -0.72 -0.67 -0.16
+vn -0.99 -0.06 -0.13
+vn -0.99 0.05 -0.13
+vn -0.98 0.14 -0.14
+vn -0.99 -0.03 -0.13
+vn -0.99 0.03 -0.10
+vn -0.99 -0.09 -0.09
+vn -1.00 0.02 -0.07
+vn -0.99 0.15 0.00
+vn -0.93 0.36 -0.04
+vn -0.84 0.53 0.04
+vn -0.98 -0.05 -0.18
+vn -0.91 0.39 -0.13
+vn -0.97 0.20 -0.11
+vn -0.71 0.70 -0.06
+vn -0.80 0.60 -0.04
+vn -0.49 0.87 0.01
+vn -0.72 0.69 0.04
+vn -0.70 0.71 -0.03
+vn -0.98 0.16 -0.12
+vn -0.97 0.22 -0.07
+vn -1.00 0.07 -0.05
+vn -0.99 0.05 -0.11
+vn -0.99 0.10 0.02
+vn -0.95 0.32 0.00
+vn -0.94 0.32 0.07
+vn -0.00 1.00 -0.06
+vn 0.67 0.73 -0.07
+vn 0.75 0.65 0.06
+vn 0.84 0.55 -0.03
+vn 0.88 0.48 0.07
+vn 1.00 0.06 0.03
+vn 1.00 -0.07 -0.05
+vn 1.00 -0.03 -0.05
+vn 0.99 -0.11 -0.04
+vn 1.00 -0.07 -0.06
+vn 0.99 -0.08 -0.07
+vn 0.80 -0.59 -0.09
+vn 0.71 -0.70 -0.10
+vn -0.01 -0.99 -0.12
+vn 1.00 -0.06 -0.07
+vn 0.98 -0.18 -0.06
+vn 0.99 -0.13 -0.09
+vn 0.94 0.33 -0.11
+vn 0.96 0.13 0.26
+vn 0.96 0.11 0.26
+vn 0.99 0.13 0.01
+vn 1.00 -0.03 0.02
+vn 1.00 -0.03 -0.01
+vn 1.00 0.01 0.06
+vn 1.00 -0.02 -0.02
+vn 0.97 0.25 0.04
+vn 0.99 0.14 -0.03
+vn 0.83 0.55 -0.02
+vn 0.98 0.16 -0.09
+vn 0.75 0.66 -0.04
+vn 0.99 -0.11 -0.11
+vn 0.99 -0.05 -0.09
+vn 0.99 -0.14 -0.08
+vn 0.52 0.85 0.02
+vn 0.96 0.26 0.10
+vn 0.02 0.97 0.22
+vn 0.99 0.08 0.14
+vn 0.03 0.82 0.57
+vn 0.01 0.55 0.84
+vn -0.95 0.20 0.23
+vn -0.95 0.22 0.24
+vn -0.98 0.19 -0.06
+vn -1.00 0.07 -0.02
+vn -0.63 0.76 -0.13
+vn -0.98 0.18 0.11
+vn -0.98 0.17 -0.08
+vn -0.83 0.53 0.15
+vn 0.01 0.57 0.82
+vn -0.86 0.50 -0.08
+vn 1.00 -0.03 -0.02
+vn 1.00 0.03 -0.03
+vn 0.90 0.44 -0.05
+vn 0.87 0.46 0.16
+vn -0.06 0.74 0.67
+vn -0.06 1.00 0.01
+vn 0.04 0.99 -0.10
+vn -1.00 0.05 -0.02
+vn 0.98 -0.15 -0.10
+vn 0.70 -0.71 -0.13
+vn 0.99 -0.05 -0.13
+vn 0.99 0.08 -0.11
+vn 0.99 0.08 -0.08
+vn 1.00 0.06 -0.02
+vn 1.00 0.03 -0.00
+vn 1.00 0.02 0.01
+vn 1.00 0.01 0.02
+vn 1.00 0.08 0.06
+vn 1.00 0.01 0.03
+vn 0.99 0.11 0.03
+vn 1.00 0.07 0.02
+vn 1.00 0.09 -0.00
+vn 1.00 -0.00 0.01
+vn 1.00 0.03 0.03
+vn 1.00 -0.03 0.03
+vn 1.00 -0.03 0.07
+vn 0.99 -0.14 0.07
+vn 0.89 -0.42 0.16
+vn 0.88 -0.44 0.17
+vn 0.49 -0.84 0.25
+vn 0.98 0.17 -0.05
+vn 0.99 0.14 -0.00
+vn 1.00 0.08 -0.01
+vn 1.00 0.03 -0.04
+vn 0.97 0.21 -0.13
+vn 0.98 0.19 -0.04
+vn 0.95 0.30 -0.03
+vn 0.96 0.27 -0.05
+vn 0.99 0.15 0.03
+vn 0.99 0.17 0.02
+vn 0.50 -0.83 0.25
+vn -0.01 -0.97 0.24
+vn -0.01 -0.97 0.26
+vn -0.53 -0.81 0.25
+vn -0.52 -0.82 0.24
+vn -0.92 -0.37 0.15
+vn -0.93 -0.35 0.14
+vn -1.00 -0.05 0.05
+vn -1.00 0.07 0.05
+vn -1.00 0.06 0.01
+vn -0.99 0.13 0.00
+vn -1.00 0.09 -0.02
+vn -0.99 0.11 -0.02
+vn -0.98 0.18 -0.03
+vn -0.99 0.16 -0.01
+vn -0.98 0.20 0.00
+vn -0.99 0.10 0.00
+vn -0.98 0.17 0.03
+vn -0.51 -0.84 0.20
+vn -0.01 -0.99 0.17
+vn -0.98 -0.10 0.14
+vn -0.73 -0.67 0.14
+vn -0.27 -0.95 0.15
+vn -0.01 -0.99 0.16
+vn 0.47 -0.86 0.20
+vn 0.69 -0.71 0.15
+vn 0.97 -0.18 0.16
+vn 0.25 -0.96 0.16
+vn -0.99 0.10 -0.01
+vn -0.99 0.12 -0.01
+vn -0.99 0.12 -0.03
+vn -0.99 0.15 -0.05
+vn -0.98 0.17 -0.07
+vn -0.93 0.33 -0.16
+vn -0.88 0.46 -0.15
+vn -0.66 0.56 -0.50
+vn -0.43 0.86 -0.26
+vn -0.97 0.22 -0.08
+vn -0.99 0.12 -0.06
+vn -0.98 0.17 -0.03
+vn -0.97 0.22 -0.02
+vn -0.96 0.25 -0.07
+vn -0.95 0.29 -0.15
+vn -0.96 0.28 -0.06
+vn -0.92 0.38 -0.05
+vn -0.94 0.35 -0.08
+vn -0.97 0.24 0.00
+vn -0.97 0.25 -0.00
+vn 0.98 0.16 0.10
+vn 0.98 0.19 0.05
+vn 0.97 0.25 -0.00
+vn 0.96 0.28 -0.03
+vn 1.00 0.06 -0.01
+vn 1.00 -0.02 0.01
+vn 0.99 -0.09 0.04
+vn 0.98 -0.20 0.08
+vn 0.78 -0.59 0.20
+vn 0.94 -0.29 0.20
+vn 0.79 -0.54 0.29
+vn 0.91 -0.25 0.32
+vn 0.98 -0.09 0.19
+vn 0.61 -0.75 0.26
+vn 0.91 -0.31 0.29
+vn 0.96 -0.12 0.25
+vn 0.97 0.19 0.14
+vn 0.96 0.21 0.20
+vn 0.85 0.50 0.16
+vn 0.78 0.58 0.22
+vn 0.63 0.76 0.15
+vn 0.56 0.80 0.21
+vn 0.30 0.94 0.13
+vn 0.30 0.94 0.15
+vn 0.01 0.99 0.12
+vn 0.01 0.99 0.11
+vn -0.28 0.95 0.14
+vn -0.28 0.95 0.12
+vn -0.52 0.83 0.19
+vn -0.60 0.79 0.13
+vn -0.75 0.63 0.20
+vn -0.83 0.54 0.13
+vn -0.28 0.96 0.08
+vn -0.27 0.96 0.04
+vn 0.01 1.00 0.05
+vn 0.01 1.00 0.07
+vn 0.31 0.95 0.09
+vn 0.61 0.79 0.09
+vn 0.87 0.48 0.09
+vn 0.98 0.16 0.06
+vn 0.87 0.48 0.05
+vn 0.55 0.83 0.07
+vn 0.61 0.79 0.03
+vn 0.29 0.96 0.05
+vn 0.28 0.96 0.03
+vn 0.33 0.95 -0.01
+vn 0.01 1.00 0.02
+vn 0.01 1.00 -0.01
+vn 0.01 1.00 -0.02
+vn -0.46 0.89 -0.04
+vn -0.99 0.14 -0.02
+vn -0.98 0.17 -0.01
+vn -0.90 0.44 -0.02
+vn -0.91 0.41 -0.08
+vn -0.69 0.72 -0.09
+vn -0.77 0.63 -0.10
+vn -0.84 0.54 0.01
+vn -0.58 0.82 0.03
+vn 0.49 0.87 -0.03
+vn 0.39 0.92 -0.04
+vn 0.67 0.75 -0.01
+vn 0.92 0.39 0.02
+vn 0.99 0.11 0.02
+vn -0.99 0.15 -0.04
+vn -0.93 0.36 -0.06
+vn -0.94 0.34 -0.02
+vn -1.00 0.00 0.01
+vn -0.96 0.27 0.02
+vn -0.97 0.24 0.08
+vn -0.95 0.28 0.14
+vn -0.95 0.29 0.09
+vn -0.98 -0.02 0.21
+vn -0.98 0.04 0.17
+vn -0.93 -0.23 0.27
+vn -0.94 -0.17 0.31
+vn -0.96 -0.21 0.18
+vn -0.83 -0.48 0.28
+vn -0.82 -0.54 0.19
+vn -0.64 -0.72 0.26
+vn -0.99 -0.11 0.06
+vn -1.00 0.08 -0.01
+vn -1.00 0.04 0.03
+vn -0.98 0.20 -0.01
+vn -0.89 0.46 -0.00
+vn -0.63 0.78 -0.03
+vn -0.36 0.93 -0.05
+vn -0.30 0.95 -0.02
+vn -0.26 0.97 0.03
+vn -0.84 0.54 0.03
+vn -0.58 0.82 0.02
+vn -0.52 0.85 0.05
+vn -0.84 0.54 0.07
+vn -0.97 0.25 0.04
+vn -0.57 0.82 0.07
+vn 1.00 -0.06 0.05
+vn 1.00 0.08 0.01
+vn 1.00 0.05 0.01
+vn 0.93 0.37 0.01
+vn 0.94 0.34 -0.06
+vn 0.73 0.68 -0.07
+vn 0.81 0.58 -0.08
+vn 0.88 0.47 0.03
+vn 0.62 0.78 0.04
+vn -0.02 0.99 0.14
+vn -0.01 0.99 0.11
+vn -0.01 1.00 -0.08
+vn -0.02 1.00 -0.08
+vn -0.02 0.99 -0.12
+vn -0.09 0.99 -0.12
+vn -0.15 0.99 0.00
+vn -0.18 0.98 -0.10
+vn -0.14 0.98 0.16
+vn -0.04 0.99 0.16
+vn -0.05 0.93 0.35
+vn -0.03 0.94 0.33
+vn -0.02 0.96 0.28
+vn -0.02 0.98 0.18
+vn 0.02 1.00 0.05
+vn -0.03 0.99 0.15
+vn -0.01 1.00 -0.02
+vn -0.08 0.99 -0.09
+vn -0.03 0.99 -0.10
+vn 0.00 1.00 -0.09
+vn -0.01 0.99 -0.12
+vn 0.01 0.99 -0.14
+vn -0.43 0.85 -0.29
+vn -0.14 0.94 -0.32
+vn 0.37 0.86 0.35
+vn 0.25 0.81 0.54
+vn 0.72 0.00 0.70
+vn 0.39 0.00 0.92
+vn 0.37 -0.86 0.35
+vn 0.24 -0.81 0.53
+vn -0.43 -0.84 -0.34
+vn -0.15 -0.93 -0.34
+vn -0.83 0.06 -0.55
+vn -0.44 -0.00 -0.90
+vn 0.13 -0.05 -0.99
+vn 0.04 0.86 -0.51
+vn 0.01 0.85 0.52
+vn 0.02 0.02 1.00
+vn -0.00 -0.86 0.51
+vn 0.04 -0.86 -0.51
+vn 0.03 1.00 -0.08
+vn 0.03 0.99 -0.11
+vn 0.02 1.00 -0.08
+vn 0.02 0.99 -0.11
+vn 0.01 1.00 -0.09
+vn 0.00 0.99 -0.13
+vn -0.00 1.00 0.05
+vn 0.09 0.99 -0.08
+vn 0.02 1.00 -0.02
+vn 0.04 0.99 0.15
+vn 0.04 0.98 0.18
+vn 0.02 0.99 0.11
+vn 0.04 0.96 0.28
+vn 0.04 0.99 0.14
+vn 0.05 0.94 0.33
+vn 0.06 0.98 0.16
+vn 0.08 0.93 0.36
+vn 0.16 0.97 0.17
+vn 0.17 0.99 0.01
+vn -0.01 0.99 -0.14
+vn 0.22 0.97 -0.09
+vn 0.12 0.99 -0.11
+vn 0.08 0.98 -0.15
+vn 0.04 0.98 -0.18
+vn 0.96 0.28 -0.02
+vn 1.00 -0.02 -0.04
+vn 1.00 -0.08 -0.05
+vn 0.78 -0.62 -0.10
+vn -0.84 -0.54 -0.12
+vn -0.99 0.01 -0.10
+vn 0.00 -0.86 0.51
+vn -0.00 0.04 1.00
+vn -0.26 -0.80 0.54
+vn 0.13 -0.94 -0.32
+vn 0.40 -0.86 -0.32
+vn 0.84 -0.02 -0.54
+vn 0.43 -0.04 -0.90
+vn 0.47 0.83 -0.30
+vn 0.15 0.93 -0.33
+vn -0.34 0.87 0.34
+vn -0.21 0.82 0.53
+vn -0.72 0.04 0.69
+vn -0.38 0.03 0.92
+vn -0.39 -0.85 0.35
+vn 0.01 0.87 0.50
+vn -0.04 0.86 -0.51
+vn -0.15 -0.02 -0.99
+vn -0.06 -0.85 -0.53
+vn -0.14 0.97 -0.18
+vn -0.17 0.97 -0.18
+vn -0.39 0.91 -0.13
+vn -0.41 0.90 -0.12
+vn -0.46 0.88 -0.07
+vn -0.47 0.88 -0.06
+vn -0.44 0.90 -0.04
+vn -0.44 0.90 0.01
+vn -0.41 0.91 0.05
+vn -0.58 0.81 0.10
+vn -0.59 0.80 0.11
+vn -0.63 0.72 0.30
+vn -0.67 0.62 0.41
+vn -0.71 0.49 0.51
+vn -0.71 0.49 0.50
+vn 0.07 0.99 -0.11
+vn 0.12 0.99 -0.10
+vn 0.08 0.99 -0.10
+vn 0.12 0.99 -0.08
+vn 0.11 0.99 -0.10
+vn 0.11 0.99 -0.04
+vn 0.10 0.99 -0.04
+vn 0.07 1.00 0.01
+vn 0.07 1.00 0.02
+vn 0.11 0.98 0.18
+vn 0.15 0.96 0.22
+vn 0.25 0.87 0.42
+vn 0.34 0.83 0.44
+vn 0.29 0.76 0.58
+vn 0.21 0.82 0.53
+vn 0.19 0.92 0.36
+vn 0.53 -0.83 0.18
+vn 0.31 -0.94 0.15
+vn 0.24 -0.96 0.13
+vn -0.00 -1.00 0.08
+vn -0.33 -0.93 0.14
+vn -0.27 -0.95 0.14
+vn -0.56 -0.81 0.18
+vn -0.97 0.22 0.05
+vn -0.91 0.42 0.01
+vn -0.01 -0.11 -0.99
+vn 0.99 0.13 0.07
+vn 0.94 0.34 0.03
+vn 0.73 0.43 0.53
+vn 0.70 0.56 0.44
+vn 0.65 0.69 0.32
+vn 0.58 0.80 0.14
+vn 0.57 0.81 0.13
+vn 0.46 0.89 0.02
+vn 0.44 0.90 0.05
+vn 0.46 0.89 -0.03
+vn 0.47 0.88 -0.03
+vn 0.50 0.87 -0.06
+vn 0.49 0.87 -0.06
+vn 0.44 0.89 -0.11
+vn 0.41 0.90 -0.12
+vn 0.19 0.97 -0.17
+vn 0.16 0.97 -0.18
+vn -0.67 0.00 -0.74
+vn 0.67 -0.06 -0.74
+vn -0.05 -0.99 -0.10
+vn -0.06 -0.99 -0.11
+vn -0.04 -0.99 -0.10
+vn -0.03 -0.99 -0.12
+vn -0.02 -0.99 -0.11
+vn -0.02 -0.99 -0.13
+vn -0.03 -0.99 -0.10
+vn -0.02 -0.99 -0.10
+vn -0.03 -1.00 -0.07
+vn -0.05 -1.00 -0.01
+vn -0.03 -1.00 0.02
+vn -0.04 -1.00 0.07
+vn -0.08 -1.00 -0.02
+vn -0.05 -1.00 0.07
+vn -0.08 -1.00 -0.03
+vn -0.09 -0.99 0.06
+vn 0.02 -1.00 -0.04
+vn -0.12 -0.99 0.01
+vn -0.01 -1.00 0.02
+vn -0.06 -0.99 -0.12
+vn -0.07 -0.99 -0.11
+vn -0.05 -0.99 -0.11
+vn -0.08 -0.99 -0.10
+vn -0.01 -1.00 -0.05
+vn -0.03 -1.00 -0.05
+vn 0.11 -0.99 0.02
+vn 0.07 -1.00 0.06
+vn 0.19 -0.97 0.14
+vn 0.10 -0.97 0.22
+vn 0.53 -0.80 0.29
+vn -0.01 -1.00 -0.03
+vn -0.11 -0.99 -0.10
+vn -0.08 -0.99 -0.07
+vn 0.07 -1.00 -0.07
+vn 0.01 -1.00 -0.09
+vn -0.18 -0.98 0.08
+vn -0.88 -0.16 0.45
+vn -0.86 -0.25 0.44
+vn -0.24 -0.94 0.22
+vn -0.01 -0.97 0.23
+vn 0.23 -0.95 0.22
+vn 0.16 -0.98 0.08
+vn 0.83 -0.32 0.45
+vn 0.86 -0.24 0.45
+vn 0.03 -1.00 -0.09
+vn 0.03 -0.99 -0.10
+vn 0.04 -0.99 -0.11
+vn 0.02 -0.99 -0.12
+vn 0.03 -0.99 -0.11
+vn 0.02 -0.99 -0.11
+vn 0.05 -0.99 -0.11
+vn 0.04 -0.99 -0.10
+vn 0.06 -1.00 -0.02
+vn 0.07 -1.00 -0.00
+vn 0.04 -1.00 0.07
+vn 0.09 -0.97 0.23
+vn 0.07 -1.00 -0.03
+vn 0.06 -0.99 -0.10
+vn 0.09 -0.99 -0.10
+vn -0.01 -1.00 -0.02
+vn 0.13 -0.99 0.00
+vn 0.61 -0.78 0.12
+vn 0.66 -0.70 0.29
+vn 0.23 -0.89 0.39
+vn 0.14 -0.91 0.40
+vn 0.14 -0.91 0.39
+vn -0.07 -0.98 0.20
+vn -0.10 -0.97 0.23
+vn -0.11 -0.97 0.22
+vn -0.21 -0.97 0.13
+vn -0.14 -0.99 0.00
+vn -0.01 -1.00 0.05
+vn 0.25 -0.97 0.02
+vn -0.56 -0.78 0.28
+vn -0.11 -0.93 0.35
+vn -0.14 -0.91 0.39
+vn -0.14 -0.90 0.40
+vn -0.25 -0.89 0.39
+vn -0.69 -0.67 0.28
+vn -0.66 -0.75 0.11
+vn -0.27 -0.96 0.01
+vn -0.08 -0.99 -0.09
+vn -0.18 -0.98 0.03
+vn -0.01 -1.00 -0.07
+vn -0.01 -1.00 -0.01
+vn 0.16 -0.99 0.03
+vn 0.06 -0.99 -0.09
+vn -0.11 -0.99 -0.09
+vn -0.46 -0.88 0.13
+vn -0.19 -0.98 0.07
+vn -0.46 -0.87 0.18
+vn 0.44 -0.88 0.19
+vn 0.18 -0.98 0.08
+vn 0.43 -0.89 0.14
+vn 0.09 -0.99 -0.09
+vn -0.09 0.99 -0.04
+vn -0.04 1.00 -0.04
+vn 0.00 1.00 -0.05
+vn -0.00 1.00 0.01
+vn -0.03 0.98 0.17
+vn -0.06 0.97 0.23
+vn -0.21 0.89 0.42
+vn -0.20 0.84 0.51
+vn -0.27 0.78 0.57
+vn -0.32 0.86 0.40
+vn -0.09 0.97 0.21
+vn -0.10 0.91 0.41
+vn -0.15 0.87 0.46
+vn -0.00 1.00 -0.08
+vn -0.04 0.99 -0.09
+vn -0.10 0.99 -0.08
+vn -0.05 0.99 -0.10
+vn -0.10 0.99 -0.10
+vn -0.04 1.00 -0.09
+vn -0.05 0.99 -0.11
+vn 0.01 0.99 -0.11
+vn 0.97 0.08 0.25
+vn -0.51 0.85 0.14
+vn -0.32 0.94 0.12
+vn -0.26 0.96 0.14
+vn 0.06 0.97 0.23
+vn 0.32 0.93 0.16
+vn 0.26 0.96 0.12
+vn 0.54 0.83 0.16
+vn -0.96 0.17 0.22
+vn 0.01 -0.93 0.36
+vn 0.00 -0.98 0.17
+vn 0.00 -0.98 0.18
+vn -0.02 -0.98 -0.21
+vn -0.02 -0.98 -0.20
+vn -0.02 -0.92 -0.39
+vn -0.01 0.93 -0.36
+vn -0.00 0.98 -0.17
+vn -0.00 0.98 -0.18
+vn 0.02 0.98 0.21
+vn 0.02 0.98 0.20
+vn 0.02 0.92 0.39
+vn 0.04 0.04 1.00
+vn -1.00 0.05 0.02
+vn -0.04 -0.04 -1.00
+vn -0.08 0.86 0.51
+vn 0.01 0.86 0.52
+vn -1.00 0.08 -0.05
+vn -0.99 -0.02 -0.11
+vn -0.99 -0.02 -0.12
+vn -0.01 -0.85 -0.52
+vn 0.08 -0.85 -0.52
+vn 0.09 -0.85 -0.52
+vn 0.99 -0.09 0.07
+vn 0.99 0.01 0.12
+vn 0.99 0.02 0.12
+vn 0.11 0.85 0.51
+vn 0.02 0.85 0.52
+vn 0.99 -0.11 -0.09
+vn -0.11 -0.85 -0.52
+vn -0.02 -0.85 -0.52
+vn -0.99 0.11 0.10
+vn -1.00 0.01 0.04
+vn -1.00 0.00 0.04
+vn -0.01 -0.10 -1.00
+vn -0.01 -0.79 -0.61
+vn -0.00 0.46 -0.89
+vn -0.01 -0.44 -0.90
+vn 0.01 0.36 0.93
+vn 0.00 -0.53 0.85
+vn -1.00 0.05 -0.01
+vn 1.00 -0.05 0.01
+vn -0.16 -0.97 -0.18
+vn -0.17 -0.98 -0.08
+vn -0.14 -0.99 0.02
+vn -0.01 -1.00 -0.08
+vn -0.01 -0.98 -0.21
+vn -0.01 -0.96 -0.29
+vn 0.01 0.95 0.30
+vn 0.74 -0.64 0.19
+vn 0.81 -0.47 -0.35
+vn 0.04 -0.94 0.35
+vn 0.03 -0.97 0.25
+vn 0.02 -0.93 0.37
+vn 0.27 -0.96 0.13
+vn 0.19 -0.98 0.08
+vn 0.48 -0.88 0.05
+vn 0.25 -0.97 0.05
+vn -0.00 -1.00 0.05
+vn 0.01 -1.00 0.05
+vn 0.01 -1.00 0.08
+vn 0.01 -1.00 0.04
+vn 0.08 -0.98 0.15
+vn 0.15 -0.99 0.04
+vn 0.10 -0.98 0.16
+vn 0.07 -0.94 0.34
+vn 0.04 -0.94 0.34
+vn 0.07 -0.85 0.53
+vn 0.01 -0.96 0.28
+vn 0.02 -0.95 0.31
+vn 0.04 -0.86 0.50
+vn 0.03 -0.89 0.45
+vn 0.14 0.98 -0.13
+vn -0.22 -0.92 0.32
+vn -0.01 -0.94 0.35
+vn -0.07 -0.92 0.39
+vn -0.00 -0.91 0.42
+vn 0.06 -0.92 0.39
+vn 0.21 -0.93 0.32
+vn 0.42 -0.10 -0.90
+vn 0.13 -0.53 -0.83
+vn -0.14 0.03 -0.99
+vn 0.17 0.25 -0.95
+vn -0.00 0.06 1.00
+vn 0.00 0.07 1.00
+vn 0.02 0.06 1.00
+vn 0.01 0.07 1.00
+vn -0.08 -1.00 0.03
+vn -0.04 -1.00 -0.02
+vn -0.10 -0.99 0.04
+vn -0.17 -0.99 0.04
+vn -0.12 -0.99 0.04
+vn -0.10 -0.98 0.15
+vn -0.03 -1.00 0.08
+vn -0.05 -0.94 0.34
+vn -0.03 -0.95 0.31
+vn -0.04 -0.86 0.50
+vn -0.03 -0.89 0.45
+vn -0.02 -0.96 0.28
+vn -0.03 -0.93 0.37
+vn -0.04 -0.97 0.25
+vn -0.05 -0.94 0.35
+vn -0.29 -0.95 0.12
+vn -0.20 -0.98 0.07
+vn -0.50 -0.86 0.04
+vn -0.29 -0.96 0.04
+vn -0.02 -1.00 0.08
+vn -0.02 -1.00 0.05
+vn -0.02 -1.00 0.04
+vn -0.07 -0.85 0.53
+vn -0.08 -0.94 0.34
+vn -0.11 -0.98 0.16
+vn -0.06 0.99 -0.14
+vn -0.02 0.99 -0.16
+vn -0.39 0.83 -0.40
+vn -0.84 -0.40 -0.38
+vn -0.78 -0.60 0.17
+vn -0.13 0.98 -0.14
+vn 0.01 0.05 1.00
+vn 0.01 0.06 1.00
+vn -0.12 -0.06 -0.99
+vn -0.15 -0.52 -0.84
+vn -0.43 -0.06 -0.90
+vn -0.19 -0.01 -0.98
+vn 0.00 0.12 -0.99
+vn 0.01 0.37 0.93
+vn -0.01 0.12 -0.99
+vn -0.01 0.10 -0.99
+vn -0.01 0.11 -0.99
+vn -0.01 0.09 -1.00
+vn 0.27 0.23 0.93
+vn 0.19 0.41 0.89
+vn 0.34 -0.13 0.93
+vn -0.16 0.43 0.89
+vn -0.25 0.25 0.93
+vn -0.31 -0.16 0.94
+vn -0.33 -0.11 0.94
+vn -0.11 -0.42 0.90
+vn -0.17 -0.38 0.91
+vn 0.12 -0.44 0.89
+vn 0.01 -0.61 0.79
+vn 0.17 -0.39 0.90
+vn 0.32 -0.19 0.93
+vn -0.95 0.22 0.21
+vn -0.01 -0.99 0.12
+vn 0.96 0.13 0.24
+vn -0.59 0.79 0.16
+vn -0.31 0.94 0.15
+vn -0.30 0.94 0.15
+vn 0.35 0.92 0.16
+vn 0.63 0.76 0.18
+vn 0.02 0.69 0.72
+vn 0.22 0.53 0.82
+vn -0.07 0.70 0.71
+vn -0.20 0.55 0.81
+vn -0.32 0.28 0.91
+vn -0.34 0.21 0.92
+vn -0.33 -0.24 0.91
+vn -0.35 -0.12 0.93
+vn -0.14 -0.63 0.77
+vn -0.24 -0.49 0.84
+vn -0.01 -0.48 0.88
+vn 0.16 -0.61 0.78
+vn 0.25 -0.50 0.83
+vn 0.34 -0.27 0.90
+vn 0.36 -0.14 0.92
+vn 0.34 0.25 0.91
+vn 0.35 0.19 0.92
+vn 0.09 0.71 0.70
+vn 0.00 -0.92 -0.39
+vn -0.00 -0.98 -0.21
+vn -0.00 -0.98 -0.20
+vn -0.01 -0.98 0.17
+vn -0.01 -0.98 0.18
+vn -0.02 -0.93 0.36
+vn -0.00 0.92 0.39
+vn 0.00 0.98 0.21
+vn 0.00 0.98 0.20
+vn 0.01 0.98 -0.17
+vn 0.01 0.98 -0.18
+vn 0.02 0.93 -0.36
+vn -0.03 0.04 1.00
+vn 1.00 -0.05 0.05
+vn 0.03 -0.04 -1.00
+vn 0.31 0.87 -0.39
+vn 0.37 0.92 0.09
+vn 0.68 0.61 -0.41
+vn 0.63 0.62 -0.46
+vn 0.55 0.72 -0.42
+vn 0.64 0.67 -0.37
+vn 0.24 0.96 -0.12
+vn 0.26 0.96 -0.12
+vn -0.11 0.92 0.39
+vn -0.23 0.89 0.39
+vn 0.47 0.10 -0.88
+vn 0.54 0.10 -0.84
+vn 0.16 0.98 0.09
+vn 0.08 0.99 0.10
+vn 0.24 0.97 0.08
+vn 0.31 0.95 0.05
+vn 0.23 0.97 0.07
+vn 0.51 0.86 0.06
+vn 0.45 0.88 0.13
+vn 0.34 0.94 -0.05
+vn 0.34 0.94 -0.00
+vn 0.10 0.99 -0.11
+vn 0.10 0.99 -0.09
+vn -0.08 0.99 -0.10
+vn -0.09 0.99 -0.11
+vn -0.34 0.94 -0.05
+vn -0.40 0.91 0.10
+vn -0.50 0.87 0.05
+vn -0.21 0.98 0.05
+vn -0.30 0.95 0.04
+vn -0.14 0.99 0.08
+vn -0.23 0.97 0.08
+vn -0.07 0.99 0.09
+vn -0.14 0.99 0.09
+vn -0.54 0.16 -0.83
+vn -0.47 0.13 -0.87
+vn 0.24 0.89 0.39
+vn 0.14 0.90 0.41
+vn -0.24 0.96 -0.12
+vn -0.23 0.97 -0.12
+vn -0.59 0.72 -0.36
+vn -0.54 0.73 -0.43
+vn -0.62 0.64 -0.46
+vn -0.64 0.66 -0.40
+vn -0.26 0.96 0.09
+vn -0.38 0.83 -0.41
+vn 0.40 0.85 -0.33
+vn 0.55 0.82 -0.18
+vn 0.74 0.63 -0.24
+vn -0.23 0.66 -0.71
+vn 0.90 0.23 -0.37
+vn -0.90 0.43 -0.07
+vn -0.98 0.21 0.05
+vn 0.02 0.10 -0.99
+vn -0.38 -0.03 -0.92
+vn -0.92 0.04 -0.38
+vn -0.99 0.13 0.02
+vn -0.99 0.13 0.01
+vn -0.83 0.17 0.53
+vn 0.10 0.89 0.44
+vn 0.02 0.90 0.44
+vn 0.03 0.90 0.44
+vn -0.00 0.90 0.43
+vn 0.00 0.90 0.43
+vn 0.01 0.90 0.44
+vn -0.07 0.90 0.44
+vn 0.78 0.61 0.15
+vn 1.00 0.04 0.04
+vn 1.00 0.03 0.04
+vn 1.00 0.03 0.01
+vn 0.74 -0.16 -0.65
+vn 0.85 -0.02 -0.52
+vn 0.93 0.33 0.17
+vn 0.95 -0.02 -0.30
+vn 0.93 0.36 -0.05
+vn -0.72 0.64 -0.26
+vn -0.71 0.28 -0.65
+vn -0.70 0.67 -0.25
+vn -0.38 0.91 -0.20
+vn -0.50 0.81 -0.31
+vn 0.01 0.99 0.10
+vn 0.01 1.00 0.10
+vn 0.01 0.34 0.94
+vn 0.01 0.12 0.99
+vn 0.00 0.91 -0.41
+vn -0.99 0.16 -0.06
+vn -0.99 0.14 -0.10
+vn -0.96 0.04 -0.28
+vn -0.96 0.04 -0.29
+vn 0.96 -0.05 -0.27
+vn 1.00 0.05 -0.08
+vn 0.96 -0.05 -0.26
+vn 1.00 0.07 -0.04
+vn -0.01 -0.18 -0.98
+vn 0.83 0.10 0.55
+vn -0.74 0.66 0.13
+vn 0.94 -0.32 -0.07
+vn 0.83 -0.56 0.01
+vn -0.09 -0.40 -0.91
+vn -0.12 0.12 -0.99
+vn -0.07 -0.68 -0.73
+vn -0.07 0.27 -0.96
+vn 0.02 1.00 -0.09
+vn -0.12 0.53 -0.84
+vn -0.10 -0.26 -0.96
+vn -0.12 -0.15 -0.98
+vn 0.05 -0.53 -0.85
+vn 0.03 -0.38 -0.93
+vn 0.03 -0.98 -0.21
+vn 0.09 -0.09 -0.99
+vn 0.07 0.04 -1.00
+vn 0.08 0.14 -0.99
+vn 0.05 0.26 -0.96
+vn -0.99 0.12 -0.09
+vn 0.96 0.29 0.00
+vn 0.58 0.81 0.00
+vn 0.61 0.79 0.00
+vn -0.53 0.85 -0.01
+vn -0.57 0.82 -0.01
+vn -0.92 0.38 -0.02
+vn -0.95 -0.30 -0.00
+vn -0.61 -0.80 -0.00
+vn -0.58 -0.82 -0.00
+vn 0.57 -0.82 0.01
+vn 0.52 -0.85 0.01
+vn 0.92 -0.40 0.02
+vn 0.99 -0.12 -0.07
+vn 1.00 -0.07 -0.01
+vn 1.00 -0.08 -0.01
+vn 0.99 -0.11 0.07
+vn 1.00 -0.07 0.04
+vn 1.00 -0.01 -0.00
+vn 0.98 -0.13 -0.12
+vn 1.00 0.03 -0.08
+vn 0.88 0.04 -0.48
+vn 0.96 0.13 -0.23
+vn -0.96 0.10 -0.27
+vn -0.99 0.04 -0.13
+vn -0.99 0.04 -0.12
+vn -0.91 0.02 -0.42
+vn -0.90 -0.01 -0.43
+vn -0.99 0.02 0.17
+vn -0.98 0.06 0.19
+vn -0.96 0.03 -0.29
+vn -0.91 0.15 -0.37
+vn -0.85 0.17 0.50
+vn -0.94 -0.03 0.33
+vn 0.71 0.05 0.71
+vn -0.02 0.12 0.99
+vn 0.02 0.12 0.99
+vn -0.70 0.12 0.70
+vn -0.71 -0.01 -0.71
+vn -0.02 -0.06 -1.00
+vn 0.02 -0.06 -1.00
+vn 0.71 -0.08 -0.70
+vn 0.01 1.00 -0.03
+vn 0.03 -1.00 -0.02
+vn 0.06 -1.00 0.04
+vn 0.08 -1.00 0.04
+# 1154 vertex normals
+
+vt 0.41 0.82 0.00
+vt 0.39 0.82 0.00
+vt 0.42 0.80 0.00
+vt 0.39 0.80 0.00
+vt 0.37 0.80 0.00
+vt 0.37 0.82 0.00
+vt 0.35 0.82 0.00
+vt 0.35 0.80 0.00
+vt 0.33 0.80 0.00
+vt 0.33 0.81 0.00
+vt 0.31 0.81 0.00
+vt 0.30 0.80 0.00
+vt 0.30 0.81 0.00
+vt 0.29 0.80 0.00
+vt 0.29 0.81 0.00
+vt 0.28 0.80 0.00
+vt 0.34 0.81 0.00
+vt 0.30 0.82 0.00
+vt 0.34 0.82 0.00
+vt 0.39 0.81 0.00
+vt 0.43 0.81 0.00
+vt 0.43 0.82 0.00
+vt 0.98 0.38 0.00
+vt 0.98 0.42 0.00
+vt 0.97 0.44 0.00
+vt 0.50 0.74 0.00
+vt 0.49 0.75 0.00
+vt 0.54 0.75 0.00
+vt 0.47 0.74 0.00
+vt 0.45 0.75 0.00
+vt 0.43 0.74 0.00
+vt 0.43 0.75 0.00
+vt 0.41 0.75 0.00
+vt 0.41 0.74 0.00
+vt 0.40 0.75 0.00
+vt 0.40 0.74 0.00
+vt 0.42 0.75 0.00
+vt 0.46 0.74 0.00
+vt 0.54 0.72 0.00
+vt 0.50 0.73 0.00
+vt 0.50 0.72 0.00
+vt 0.54 0.71 0.00
+vt 0.46 0.73 0.00
+vt 0.43 0.73 0.00
+vt 0.40 0.73 0.00
+vt 0.43 0.72 0.00
+vt 0.40 0.72 0.00
+vt 0.43 0.71 0.00
+vt 0.40 0.71 0.00
+vt 0.43 0.70 0.00
+vt 0.40 0.70 0.00
+vt 0.40 0.69 0.00
+vt 0.46 0.71 0.00
+vt 0.50 0.71 0.00
+vt 0.46 0.70 0.00
+vt 0.45 0.69 0.00
+vt 0.46 0.69 0.00
+vt 0.50 0.70 0.00
+vt 0.54 0.70 0.00
+vt 0.58 0.71 0.00
+vt 0.59 0.75 0.00
+vt 0.58 0.73 0.00
+vt 0.56 0.88 0.00
+vt 0.56 0.91 0.00
+vt 0.54 0.89 0.00
+vt 0.60 0.90 0.00
+vt 0.60 0.88 0.00
+vt 0.59 0.86 0.00
+vt 0.65 0.85 0.00
+vt 0.65 0.83 0.00
+vt 0.59 0.83 0.00
+vt 0.65 0.78 0.00
+vt 0.59 0.78 0.00
+vt 0.65 0.76 0.00
+vt 0.64 0.75 0.00
+vt 0.65 0.90 0.00
+vt 0.65 0.88 0.00
+vt 0.64 0.74 0.00
+vt 0.70 0.75 0.00
+vt 0.70 0.76 0.00
+vt 0.70 0.77 0.00
+vt 0.70 0.79 0.00
+vt 0.70 0.82 0.00
+vt 0.70 0.85 0.00
+vt 0.70 0.87 0.00
+vt 0.75 0.79 0.00
+vt 0.75 0.78 0.00
+vt 0.75 0.75 0.00
+vt 0.58 0.75 0.00
+vt 0.55 0.78 0.00
+vt 0.55 0.84 0.00
+vt 0.50 0.83 0.00
+vt 0.54 0.86 0.00
+vt 0.51 0.87 0.00
+vt 0.53 0.88 0.00
+vt 0.78 0.82 0.00
+vt 0.78 0.80 0.00
+vt 0.75 0.82 0.00
+vt 0.78 0.78 0.00
+vt 0.78 0.76 0.00
+vt 0.69 0.77 0.00
+vt 0.81 0.79 0.00
+vt 0.81 0.77 0.00
+vt 0.86 0.78 0.00
+vt 0.86 0.79 0.00
+vt 0.81 0.80 0.00
+vt 0.86 0.81 0.00
+vt 0.81 0.83 0.00
+vt 0.86 0.83 0.00
+vt 0.92 0.80 0.00
+vt 0.92 0.81 0.00
+vt 0.93 0.80 0.00
+vt 0.93 0.81 0.00
+vt 0.93 0.83 0.00
+vt 0.92 0.83 0.00
+vt 0.88 0.84 0.00
+vt 0.88 0.83 0.00
+vt 0.86 0.84 0.00
+vt 0.81 0.84 0.00
+vt 0.78 0.84 0.00
+vt 0.75 0.85 0.00
+vt 0.78 0.85 0.00
+vt 0.88 0.85 0.00
+vt 0.86 0.85 0.00
+vt 0.89 0.86 0.00
+vt 0.83 0.86 0.00
+vt 0.85 0.86 0.00
+vt 0.81 0.86 0.00
+vt 0.78 0.86 0.00
+vt 0.75 0.86 0.00
+vt 0.93 0.85 0.00
+vt 0.91 0.88 0.00
+vt 0.93 0.87 0.00
+vt 0.91 0.89 0.00
+vt 0.93 0.89 0.00
+vt 0.93 0.97 0.00
+vt 0.89 0.89 0.00
+vt 0.88 0.88 0.00
+vt 0.84 0.88 0.00
+vt 0.71 0.90 0.00
+vt 0.88 0.81 0.00
+vt 0.88 0.80 0.00
+vt 0.88 0.78 0.00
+vt 0.92 0.78 0.00
+vt 0.89 0.99 0.00
+vt 0.89 0.98 0.00
+vt 0.92 0.98 0.00
+vt 0.82 0.90 0.00
+vt 0.86 0.89 0.00
+vt 0.83 0.91 0.00
+vt 0.88 0.98 0.00
+vt 0.93 0.98 0.00
+vt 0.90 0.99 0.00
+vt 0.93 0.99 0.00
+vt 0.90 1.00 0.00
+vt 0.93 1.00 0.00
+vt 0.93 0.79 0.00
+vt 0.46 0.86 0.00
+vt 0.46 0.83 0.00
+vt 0.40 0.86 0.00
+vt 0.40 0.83 0.00
+vt 0.35 0.85 0.00
+vt 0.32 0.85 0.00
+vt 0.29 0.85 0.00
+vt 0.29 0.83 0.00
+vt 0.24 0.83 0.00
+vt 0.23 0.80 0.00
+vt 0.19 0.80 0.00
+vt 0.20 0.77 0.00
+vt 0.16 0.78 0.00
+vt 0.16 0.76 0.00
+vt 0.09 0.78 0.00
+vt 0.09 0.75 0.00
+vt 0.36 0.80 0.00
+vt 0.40 0.79 0.00
+vt 0.46 0.79 0.00
+vt 0.50 0.78 0.00
+vt 0.50 0.76 0.00
+vt 0.45 0.77 0.00
+vt 0.40 0.78 0.00
+vt 0.36 0.79 0.00
+vt 0.33 0.78 0.00
+vt 0.04 0.76 0.00
+vt 0.09 0.74 0.00
+vt 0.04 0.74 0.00
+vt 0.24 0.80 0.00
+vt 0.33 0.85 0.00
+vt 0.36 0.82 0.00
+vt 0.16 0.74 0.00
+vt 0.15 0.73 0.00
+vt 0.19 0.76 0.00
+vt 0.19 0.74 0.00
+vt 0.18 0.73 0.00
+vt 0.18 0.76 0.00
+vt 0.18 0.74 0.00
+vt 0.51 0.83 0.00
+vt 0.54 0.92 0.00
+vt 0.34 0.87 0.00
+vt 0.32 0.86 0.00
+vt 0.31 0.86 0.00
+vt 0.28 0.86 0.00
+vt 0.24 0.85 0.00
+vt 0.19 0.83 0.00
+vt 0.15 0.80 0.00
+vt 0.09 0.80 0.00
+vt 0.04 0.78 0.00
+vt 0.04 0.80 0.00
+vt 0.01 0.78 0.00
+vt 0.01 0.80 0.00
+vt 0.03 0.82 0.00
+vt 0.01 0.77 0.00
+vt 0.00 0.83 0.00
+vt 0.04 0.84 0.00
+vt 0.00 0.84 0.00
+vt 0.03 0.86 0.00
+vt 0.00 0.86 0.00
+vt 0.03 0.88 0.00
+vt 0.00 0.87 0.00
+vt 0.04 0.89 0.00
+vt 0.00 0.89 0.00
+vt 0.04 0.91 0.00
+vt 0.00 0.90 0.00
+vt 0.04 0.88 0.00
+vt 0.09 0.89 0.00
+vt 0.15 0.90 0.00
+vt 0.14 0.91 0.00
+vt 0.09 0.91 0.00
+vt 0.09 0.88 0.00
+vt 0.09 0.87 0.00
+vt 0.09 0.85 0.00
+vt 0.15 0.87 0.00
+vt 0.15 0.89 0.00
+vt 0.19 0.89 0.00
+vt 0.18 0.90 0.00
+vt 0.21 0.90 0.00
+vt 0.18 0.92 0.00
+vt 0.21 0.92 0.00
+vt 0.25 0.92 0.00
+vt 0.28 0.92 0.00
+vt 0.28 0.90 0.00
+vt 0.21 0.85 0.00
+vt 0.18 0.85 0.00
+vt 0.21 0.87 0.00
+vt 0.25 0.87 0.00
+vt 0.25 0.88 0.00
+vt 0.28 0.88 0.00
+vt 0.30 0.87 0.00
+vt 0.30 0.90 0.00
+vt 0.30 0.92 0.00
+vt 0.25 0.90 0.00
+vt 0.21 0.89 0.00
+vt 0.18 0.87 0.00
+vt 0.14 0.85 0.00
+vt 0.29 0.86 0.00
+vt 0.05 0.84 0.00
+vt 0.01 0.83 0.00
+vt 0.15 0.83 0.00
+vt 0.08 0.82 0.00
+vt 0.15 0.85 0.00
+vt 0.14 0.83 0.00
+vt 0.35 0.31 0.00
+vt 0.35 0.37 0.00
+vt 0.33 0.31 0.00
+vt 0.33 0.26 0.00
+vt 0.29 0.27 0.00
+vt 0.29 0.23 0.00
+vt 0.33 0.22 0.00
+vt 0.30 0.21 0.00
+vt 0.34 0.20 0.00
+vt 0.35 0.22 0.00
+vt 0.34 0.26 0.00
+vt 0.35 0.26 0.00
+vt 0.36 0.31 0.00
+vt 0.36 0.36 0.00
+vt 0.37 0.40 0.00
+vt 0.35 0.41 0.00
+vt 0.37 0.42 0.00
+vt 0.34 0.42 0.00
+vt 0.31 0.42 0.00
+vt 0.32 0.41 0.00
+vt 0.32 0.37 0.00
+vt 0.28 0.37 0.00
+vt 0.29 0.32 0.00
+vt 0.28 0.41 0.00
+vt 0.69 0.72 0.00
+vt 0.71 0.73 0.00
+vt 0.70 0.71 0.00
+vt 0.72 0.73 0.00
+vt 0.71 0.70 0.00
+vt 0.73 0.73 0.00
+vt 0.69 0.73 0.00
+vt 0.70 0.73 0.00
+vt 0.70 0.74 0.00
+vt 0.71 0.74 0.00
+vt 0.72 0.74 0.00
+vt 0.73 0.74 0.00
+vt 0.33 0.58 0.00
+vt 0.29 0.57 0.00
+vt 0.33 0.52 0.00
+vt 0.29 0.52 0.00
+vt 0.32 0.47 0.00
+vt 0.28 0.47 0.00
+vt 0.32 0.43 0.00
+vt 0.35 0.43 0.00
+vt 0.37 0.44 0.00
+vt 0.35 0.47 0.00
+vt 0.37 0.48 0.00
+vt 0.35 0.52 0.00
+vt 0.36 0.53 0.00
+vt 0.35 0.58 0.00
+vt 0.36 0.58 0.00
+vt 0.35 0.62 0.00
+vt 0.33 0.62 0.00
+vt 0.28 0.43 0.00
+vt 0.34 0.63 0.00
+vt 0.31 0.63 0.00
+vt 0.29 0.61 0.00
+vt 0.26 0.63 0.00
+vt 0.26 0.62 0.00
+vt 0.38 0.14 0.00
+vt 0.39 0.16 0.00
+vt 0.38 0.22 0.00
+vt 0.39 0.22 0.00
+vt 0.37 0.27 0.00
+vt 0.39 0.27 0.00
+vt 0.38 0.31 0.00
+vt 0.39 0.31 0.00
+vt 0.38 0.37 0.00
+vt 0.39 0.37 0.00
+vt 0.39 0.43 0.00
+vt 0.39 0.47 0.00
+vt 0.37 0.49 0.00
+vt 0.38 0.49 0.00
+vt 0.37 0.50 0.00
+vt 0.97 0.50 0.00
+vt 0.95 0.45 0.00
+vt 0.95 0.50 0.00
+vt 0.97 0.56 0.00
+vt 0.95 0.55 0.00
+vt 0.97 0.60 0.00
+vt 0.95 0.59 0.00
+vt 0.97 0.66 0.00
+vt 0.95 0.66 0.00
+vt 0.95 0.70 0.00
+vt 0.98 0.72 0.00
+vt 0.96 0.75 0.00
+vt 0.98 0.76 0.00
+vt 0.98 0.77 0.00
+vt 0.96 0.76 0.00
+vt 0.93 0.75 0.00
+vt 0.47 0.73 0.00
+vt 0.46 0.75 0.00
+vt 0.44 0.73 0.00
+vt 0.42 0.73 0.00
+vt 0.41 0.73 0.00
+vt 0.23 0.78 0.00
+vt 0.28 0.78 0.00
+vt 0.29 0.82 0.00
+vt 0.45 0.82 0.00
+vt 1.00 0.79 0.00
+vt 1.00 0.77 0.00
+vt 0.99 0.72 0.00
+vt 0.99 0.65 0.00
+vt 0.99 0.60 0.00
+vt 0.99 0.55 0.00
+vt 0.99 0.50 0.00
+vt 0.67 0.71 0.00
+vt 0.68 0.72 0.00
+vt 0.66 0.71 0.00
+vt 0.66 0.74 0.00
+vt 0.67 0.74 0.00
+vt 0.65 0.72 0.00
+vt 0.06 0.05 0.00
+vt 0.10 0.06 0.00
+vt 0.06 0.07 0.00
+vt 0.10 0.08 0.00
+vt 0.06 0.14 0.00
+vt 0.08 0.14 0.00
+vt 0.13 0.08 0.00
+vt 0.12 0.16 0.00
+vt 0.17 0.09 0.00
+vt 0.16 0.16 0.00
+vt 0.20 0.09 0.00
+vt 0.20 0.18 0.00
+vt 0.25 0.11 0.00
+vt 0.20 0.07 0.00
+vt 0.27 0.08 0.00
+vt 0.20 0.06 0.00
+vt 0.27 0.07 0.00
+vt 0.21 0.04 0.00
+vt 0.28 0.05 0.00
+vt 0.28 0.03 0.00
+vt 0.17 0.05 0.00
+vt 0.17 0.07 0.00
+vt 0.14 0.06 0.00
+vt 0.14 0.04 0.00
+vt 0.18 0.03 0.00
+vt 0.21 0.02 0.00
+vt 0.29 0.07 0.00
+vt 0.28 0.09 0.00
+vt 0.31 0.08 0.00
+vt 0.18 0.02 0.00
+vt 0.10 0.04 0.00
+vt 0.15 0.03 0.00
+vt 0.15 0.01 0.00
+vt 0.11 0.02 0.00
+vt 0.04 0.04 0.00
+vt 0.07 0.03 0.00
+vt 0.09 0.02 0.00
+vt 0.11 0.01 0.00
+vt 0.20 0.10 0.00
+vt 0.27 0.11 0.00
+vt 0.30 0.04 0.00
+vt 0.31 0.05 0.00
+vt 0.33 0.08 0.00
+vt 0.32 0.09 0.00
+vt 0.31 0.11 0.00
+vt 0.29 0.13 0.00
+vt 0.23 0.17 0.00
+vt 0.28 0.08 0.00
+vt 0.34 0.04 0.00
+vt 0.34 0.06 0.00
+vt 0.26 0.18 0.00
+vt 0.33 0.07 0.00
+vt 0.41 0.31 0.00
+vt 0.41 0.38 0.00
+vt 0.50 0.31 0.00
+vt 0.51 0.36 0.00
+vt 0.41 0.42 0.00
+vt 0.50 0.40 0.00
+vt 0.40 0.47 0.00
+vt 0.41 0.47 0.00
+vt 0.51 0.43 0.00
+vt 0.43 0.46 0.00
+vt 0.51 0.26 0.00
+vt 0.41 0.26 0.00
+vt 0.41 0.21 0.00
+vt 0.41 0.17 0.00
+vt 0.49 0.18 0.00
+vt 0.49 0.21 0.00
+vt 0.45 0.73 0.00
+vt 0.44 0.75 0.00
+vt 0.09 1.00 0.00
+vt 0.09 0.98 0.00
+vt 0.10 1.00 0.00
+vt 0.10 0.98 0.00
+vt 0.27 1.00 0.00
+vt 0.27 0.98 0.00
+vt 0.28 1.00 0.00
+vt 0.28 0.98 0.00
+vt 0.28 0.96 0.00
+vt 0.27 0.96 0.00
+vt 0.28 0.94 0.00
+vt 0.27 0.94 0.00
+vt 0.10 0.96 0.00
+vt 0.10 0.94 0.00
+vt 0.09 0.96 0.00
+vt 0.09 0.94 0.00
+vt 0.15 0.96 0.00
+vt 0.15 0.95 0.00
+vt 0.13 0.96 0.00
+vt 0.13 0.95 0.00
+vt 0.45 0.81 0.00
+vt 0.36 0.81 0.00
+vt 0.41 0.81 0.00
+vt 0.42 0.82 0.00
+vt 0.42 0.81 0.00
+vt 0.44 0.81 0.00
+vt 0.48 0.76 0.00
+vt 0.44 0.70 0.00
+vt 0.45 0.70 0.00
+vt 0.50 0.68 0.00
+vt 0.55 0.69 0.00
+vt 0.58 0.70 0.00
+vt 0.49 0.04 0.00
+vt 0.47 0.04 0.00
+vt 0.48 0.03 0.00
+vt 0.47 0.03 0.00
+vt 0.01 0.72 0.00
+vt 0.02 0.70 0.00
+vt 0.02 0.72 0.00
+vt 0.01 0.68 0.00
+vt 0.02 0.67 0.00
+vt 0.01 0.62 0.00
+vt 0.02 0.62 0.00
+vt 0.06 0.67 0.00
+vt 0.06 0.63 0.00
+vt 0.11 0.63 0.00
+vt 0.11 0.67 0.00
+vt 0.16 0.64 0.00
+vt 0.16 0.67 0.00
+vt 0.20 0.64 0.00
+vt 0.20 0.68 0.00
+vt 0.22 0.65 0.00
+vt 0.22 0.68 0.00
+vt 0.20 0.69 0.00
+vt 0.16 0.69 0.00
+vt 0.17 0.70 0.00
+vt 0.06 0.70 0.00
+vt 0.11 0.70 0.00
+vt 0.12 0.71 0.00
+vt 0.07 0.71 0.00
+vt 0.28 0.42 0.00
+vt 0.01 0.75 0.00
+vt 0.48 0.02 0.00
+vt 0.47 0.02 0.00
+vt 0.01 0.63 0.00
+vt 0.08 0.91 0.00
+vt 0.05 1.00 0.00
+vt 0.07 0.99 0.00
+vt 0.06 1.00 0.00
+vt 0.08 0.98 0.00
+vt 0.04 1.00 0.00
+vt 0.03 0.99 0.00
+vt 0.00 0.96 0.00
+vt 0.01 0.91 0.00
+vt 0.00 0.94 0.00
+vt 0.01 0.98 0.00
+vt 0.22 0.61 0.00
+vt 0.20 0.60 0.00
+vt 0.20 0.62 0.00
+vt 0.16 0.68 0.00
+vt 0.16 0.63 0.00
+vt 0.26 0.21 0.00
+vt 0.25 0.22 0.00
+vt 0.38 0.09 0.00
+vt 0.44 0.82 0.00
+vt 0.93 0.78 0.00
+vt 0.94 0.78 0.00
+vt 0.49 0.05 0.00
+vt 0.49 0.06 0.00
+vt 0.48 0.04 0.00
+vt 0.47 0.06 0.00
+vt 0.23 0.73 0.00
+vt 0.27 0.73 0.00
+vt 0.21 0.74 0.00
+vt 0.29 0.74 0.00
+vt 0.29 0.77 0.00
+vt 0.63 0.01 0.00
+vt 0.66 0.01 0.00
+vt 0.63 0.02 0.00
+vt 0.66 0.02 0.00
+vt 0.90 0.76 0.00
+vt 0.90 0.75 0.00
+vt 0.89 0.76 0.00
+vt 0.89 0.74 0.00
+vt 0.84 0.74 0.00
+vt 0.83 0.76 0.00
+vt 0.84 0.76 0.00
+vt 0.83 0.75 0.00
+vt 0.68 0.90 0.00
+vt 0.61 0.96 0.00
+vt 0.67 0.96 0.00
+vt 0.61 0.97 0.00
+vt 0.67 0.97 0.00
+vt 0.64 1.00 0.00
+vt 0.62 0.99 0.00
+vt 0.66 0.99 0.00
+vt 0.93 0.77 0.00
+vt 0.94 0.77 0.00
+vt 0.36 0.87 0.00
+vt 0.37 0.87 0.00
+vt 0.38 0.87 0.00
+vt 0.53 0.97 0.00
+vt 0.53 0.96 0.00
+vt 0.55 0.97 0.00
+vt 0.52 0.96 0.00
+vt 0.53 0.95 0.00
+vt 0.59 0.99 0.00
+vt 0.59 0.96 0.00
+vt 0.59 0.98 0.00
+vt 0.60 0.97 0.00
+vt 0.59 0.97 0.00
+vt 0.59 0.93 0.00
+vt 0.56 0.97 0.00
+vt 0.57 0.93 0.00
+vt 0.54 0.97 0.00
+vt 0.54 0.93 0.00
+vt 0.52 0.93 0.00
+vt 0.52 0.94 0.00
+vt 0.53 0.98 0.00
+vt 0.55 0.98 0.00
+vt 0.56 0.98 0.00
+vt 0.56 0.94 0.00
+vt 0.57 0.96 0.00
+vt 0.51 0.93 0.00
+vt 0.58 0.97 0.00
+vt 0.58 0.96 0.00
+vt 0.58 0.95 0.00
+vt 0.57 0.97 0.00
+vt 0.47 0.75 0.00
+vt 0.40 0.01 0.00
+vt 0.40 0.07 0.00
+vt 0.46 0.02 0.00
+vt 0.46 0.06 0.00
+vt 0.38 0.01 0.00
+vt 0.38 0.07 0.00
+vt 0.35 0.02 0.00
+vt 0.35 0.06 0.00
+vt 0.46 0.03 0.00
+vt 0.46 0.04 0.00
+vt 0.41 0.03 0.00
+vt 0.39 0.05 0.00
+vt 0.39 0.07 0.00
+vt 0.39 0.02 0.00
+vt 0.58 0.93 0.00
+vt 0.52 0.03 0.00
+vt 0.49 0.03 0.00
+vt 0.57 0.01 0.00
+vt 0.62 0.01 0.00
+vt 0.52 0.01 0.00
+vt 0.62 0.02 0.00
+vt 0.57 0.02 0.00
+vt 0.51 0.02 0.00
+vt 0.48 0.01 0.00
+vt 0.52 0.02 0.00
+vt 0.62 0.03 0.00
+vt 0.57 0.03 0.00
+vt 0.51 0.04 0.00
+vt 0.21 0.51 0.00
+vt 0.19 0.51 0.00
+vt 0.20 0.49 0.00
+vt 0.19 0.49 0.00
+vt 0.22 0.52 0.00
+vt 0.20 0.52 0.00
+vt 0.20 0.54 0.00
+vt 0.23 0.54 0.00
+vt 0.24 0.56 0.00
+vt 0.21 0.55 0.00
+vt 0.24 0.57 0.00
+vt 0.22 0.57 0.00
+vt 0.24 0.59 0.00
+vt 0.22 0.58 0.00
+vt 0.20 0.58 0.00
+vt 0.22 0.59 0.00
+vt 0.21 0.49 0.00
+vt 0.21 0.50 0.00
+vt 0.19 0.50 0.00
+vt 0.19 0.52 0.00
+vt 0.19 0.54 0.00
+vt 0.19 0.56 0.00
+vt 0.48 0.73 0.00
+# 642 texture coords
+
+g P_51_Mustang_Hull
+f 609/373/545 610/374/545 611/373/545
+f 612/375/546 611/373/547 613/376/548
+f 614/374/548 613/376/548 611/373/547
+f 613/376/548 614/374/548 615/377/549
+f 616/378/550 615/377/549 614/374/548
+f 616/378/550 617/379/551 615/377/549
+f 618/380/552 615/377/549 617/379/551
+f 618/380/552 617/379/551 619/381/553
+f 620/382/554 619/381/553 617/379/551
+f 620/382/554 621/383/555 619/381/553
+f 622/384/556 619/381/553 621/383/555
+f 621/383/555 623/385/557 622/384/556
+f 624/386/558 622/384/556 623/385/557
+f 623/385/557 625/387/559 624/386/558
+f 626/388/560 624/386/558 625/387/559
+f 626/388/560 625/387/559 627/388/561
+f 628/387/562 627/388/561 625/387/559
+f 628/387/562 629/387/563 627/388/561
+f 630/388/564 627/388/561 629/387/563
+f 630/388/564 629/387/563 631/386/565
+f 632/385/566 631/386/565 629/387/563
+f 631/386/565 632/385/566 633/384/567
+f 634/383/568 633/384/567 632/385/566
+f 633/384/567 634/383/568 635/381/569
+f 636/382/570 635/381/569 634/383/568
+f 636/382/570 637/379/571 635/381/569
+f 638/380/572 635/381/569 637/379/571
+f 638/380/572 637/379/571 639/377/573
+f 640/378/574 639/377/573 637/379/571
+f 640/378/574 641/374/575 639/377/573
+f 642/376/575 639/377/573 641/374/575
+f 641/374/575 643/373/576 642/376/575
+f 644/375/577 642/376/575 643/373/576
+f 645/375/578 646/373/579 647/376/580
+f 648/374/581 647/376/580 646/373/579
+f 647/376/580 648/374/581 649/377/582
+f 650/378/583 649/377/582 648/374/581
+f 650/378/583 651/379/584 649/377/582
+f 652/380/585 649/377/582 651/379/584
+f 652/380/585 651/379/584 653/381/586
+f 654/382/587 653/381/586 651/379/584
+f 654/382/587 655/383/588 653/381/586
+f 656/384/589 653/381/586 655/383/588
+f 655/383/588 657/385/590 656/384/589
+f 658/386/591 656/384/589 657/385/590
+f 657/385/590 659/387/592 658/386/591
+f 660/388/593 658/386/591 659/387/592
+f 660/388/593 659/387/592 661/388/594
+f 662/387/595 661/388/594 659/387/592
+f 662/387/595 663/387/596 661/388/594
+f 664/388/597 661/388/594 663/387/596
+f 664/388/597 663/387/596 665/386/598
+f 666/385/599 665/386/598 663/387/596
+f 665/386/598 666/385/599 667/384/600
+f 668/383/601 667/384/600 666/385/599
+f 667/384/600 668/383/601 669/381/602
+f 670/382/603 669/381/602 668/383/601
+f 670/382/603 671/379/604 669/381/602
+f 672/380/605 669/381/602 671/379/604
+f 672/380/605 671/379/604 673/377/606
+f 674/378/607 673/377/606 671/379/604
+f 674/378/607 610/374/608 673/377/606
+f 675/376/608 673/377/606 610/374/608
+f 610/374/608 609/373/609 675/376/608
+f 676/375/610 675/376/608 609/373/609
+f 677/385/611 678/389/612 679/390/613
+f 680/391/612 679/390/613 678/389/612
+f 678/389/612 681/392/614 680/391/612
+f 682/374/614 680/391/612 681/392/614
+f 681/392/614 683/393/613 682/374/614
+f 684/394/613 682/374/614 683/393/613
+f 683/394/615 681/374/616 685/393/615
+f 686/392/617 685/393/615 681/374/616
+f 681/374/616 678/391/618 686/392/617
+f 687/389/619 686/392/617 678/391/618
+f 678/391/618 677/390/620 687/389/619
+f 688/385/621 687/389/619 677/390/620
+f 685/394/622 686/374/623 689/393/622
+f 690/392/623 689/393/622 686/374/623
+f 686/374/623 687/391/624 690/392/623
+f 691/389/624 690/392/623 687/391/624
+f 687/391/624 688/390/622 691/389/624
+f 692/385/622 691/389/624 688/390/622
+f 674/378/625 671/379/625 610/374/625
+f 668/383/626 621/383/626 670/382/626
+f 621/383/627 620/382/627 670/382/627
+f 670/382/628 620/382/628 671/379/628
+f 617/379/625 616/378/625 620/382/625
+f 620/382/629 616/378/629 671/379/629
+f 671/379/629 616/378/629 610/374/629
+f 610/374/630 616/378/630 611/373/630
+f 616/378/631 614/374/631 611/373/631
+f 655/383/632 654/382/632 634/383/632
+f 650/378/625 648/374/625 651/379/625
+f 646/373/633 643/373/633 648/374/633
+f 648/374/634 643/373/634 651/379/634
+f 641/374/635 640/378/635 643/373/635
+f 640/378/636 637/379/636 643/373/636
+f 643/373/637 637/379/637 651/379/637
+f 651/379/638 637/379/638 654/382/638
+f 654/382/639 637/379/639 634/383/639
+f 637/379/625 636/382/625 634/383/625
+f 629/387/640 628/387/640 632/385/640
+f 662/387/641 659/387/641 628/387/641
+f 628/387/642 659/387/642 632/385/642
+f 659/387/643 657/385/643 632/385/643
+f 632/385/644 657/385/644 634/383/644
+f 657/385/645 655/383/645 634/383/645
+f 625/387/646 623/385/646 628/387/646
+f 621/383/647 668/383/647 623/385/647
+f 668/383/648 666/385/648 623/385/648
+f 666/385/649 663/387/649 623/385/649
+f 623/385/650 663/387/650 628/387/650
+f 628/387/651 663/387/651 662/387/651
+f 630/388/652 631/386/652 627/388/652
+f 633/384/653 656/384/653 631/386/653
+f 656/384/654 658/386/654 631/386/654
+f 658/386/655 660/388/655 631/386/655
+f 631/386/656 660/388/656 627/388/656
+f 627/388/657 660/388/657 661/388/657
+f 661/388/658 664/388/658 627/388/658
+f 667/384/659 622/384/659 665/386/659
+f 622/384/660 624/386/660 665/386/660
+f 665/386/661 624/386/661 664/388/661
+f 664/388/662 624/386/662 627/388/662
+f 624/386/663 626/388/663 627/388/663
+f 667/384/664 669/381/664 622/384/664
+f 675/376/665 676/375/665 673/377/665
+f 612/375/666 613/376/666 676/375/666
+f 676/375/667 613/376/667 673/377/667
+f 673/377/668 613/376/668 672/380/668
+f 615/377/669 618/380/669 613/376/669
+f 613/376/666 618/380/666 672/380/666
+f 672/380/670 618/380/670 669/381/670
+f 669/381/671 618/380/671 622/384/671
+f 618/380/672 619/381/672 622/384/672
+f 647/376/673 649/377/673 645/375/673
+f 656/384/674 633/384/674 653/381/674
+f 653/381/675 633/384/675 652/380/675
+f 635/381/676 638/380/676 633/384/676
+f 633/384/677 638/380/677 652/380/677
+f 652/380/677 638/380/677 649/377/677
+f 639/377/669 642/376/669 638/380/669
+f 638/380/678 642/376/678 649/377/678
+f 649/377/678 642/376/678 645/375/678
+f 642/376/677 644/375/677 645/375/677
+f 689/394/679 690/374/680 684/393/679
+f 682/392/681 684/393/679 690/374/680
+f 690/374/680 691/391/682 682/392/681
+f 680/389/683 682/392/681 691/391/682
+f 691/391/682 692/390/684 680/389/683
+f 679/385/685 680/389/683 692/390/684
+f 693/395/686 694/396/686 695/397/686
+f 696/398/687 697/399/688 698/400/689
+f 696/398/687 699/401/690 697/399/688
+f 700/402/691 697/399/688 699/401/690
+f 699/401/690 701/403/692 700/402/691
+f 702/404/693 700/402/691 701/403/692
+f 702/404/693 701/403/692 703/405/694
+f 704/406/695 703/405/694 701/403/692
+f 703/405/694 704/406/695 705/407/696
+f 706/408/697 705/407/696 704/406/695
+f 706/408/697 707/406/698 705/407/696
+f 708/405/699 705/407/696 707/406/698
+f 707/406/698 709/403/700 708/405/699
+f 710/409/701 708/405/699 709/403/700
+f 710/409/701 709/403/700 711/402/702
+f 712/410/703 711/402/702 709/403/700
+f 711/402/702 712/410/703 693/399/704
+f 713/398/705 693/399/704 712/410/703
+f 693/399/704 713/398/705 714/400/706
+f 715/411/707 713/398/705 716/412/708
+f 713/398/705 712/410/703 716/412/708
+f 715/411/707 717/413/709 718/414/710
+f 715/411/707 716/412/708 717/413/709
+f 716/412/708 719/415/711 717/413/709
+f 719/415/711 716/412/708 712/410/703
+f 712/410/703 709/403/700 719/415/711
+f 720/416/712 719/415/711 709/403/700
+f 707/406/698 720/416/712 709/403/700
+f 707/406/698 721/417/713 720/416/712
+f 720/416/712 721/417/713 722/418/714
+f 723/419/715 722/418/714 721/417/713
+f 722/418/714 723/419/715 724/420/716
+f 725/421/717 724/420/716 723/419/715
+f 724/420/716 725/421/717 726/422/718
+f 727/423/719 726/422/718 725/421/717
+f 727/423/719 728/424/720 726/422/718
+f 720/416/712 722/418/714 719/415/711
+f 719/415/711 722/418/714 729/425/721
+f 729/425/721 717/413/709 719/415/711
+f 717/413/709 729/425/721 730/426/722
+f 730/426/722 718/414/710 717/413/709
+f 724/420/716 729/425/721 722/418/714
+f 729/425/721 724/420/716 731/427/723
+f 731/427/723 730/426/722 729/425/721
+f 726/422/718 731/427/723 724/420/716
+f 732/426/724 733/413/725 734/414/726
+f 733/413/725 732/426/724 735/425/727
+f 736/427/728 735/425/727 732/426/724
+f 735/425/727 736/427/728 737/420/729
+f 738/422/730 737/420/729 736/427/728
+f 737/420/729 738/422/730 739/421/731
+f 740/423/732 739/421/731 738/422/730
+f 740/423/732 738/422/730 728/424/720
+f 741/428/733 728/424/720 738/422/730
+f 741/428/733 726/422/718 728/424/720
+f 741/428/733 742/429/734 726/422/718
+f 731/427/723 726/422/718 742/429/734
+f 742/429/734 743/430/735 731/427/723
+f 730/426/722 731/427/723 743/430/735
+f 743/430/735 744/431/736 730/426/722
+f 718/414/710 730/426/722 744/431/736
+f 718/414/710 744/431/736 745/432/737
+f 718/414/710 745/432/737 715/411/707
+f 737/420/729 746/418/738 735/425/727
+f 735/425/727 747/415/739 733/413/725
+f 747/415/739 735/425/727 746/418/738
+f 746/418/738 748/416/740 747/415/739
+f 749/433/741 750/434/742 698/400/689
+f 751/411/743 698/400/689 750/434/742
+f 751/411/743 696/398/687 698/400/689
+f 696/398/687 751/411/743 733/413/725
+f 696/398/687 733/413/725 699/401/690
+f 747/415/739 699/401/690 733/413/725
+f 699/401/690 747/415/739 701/403/692
+f 748/416/740 701/403/692 747/415/739
+f 748/416/740 704/406/695 701/403/692
+f 752/417/744 704/406/695 748/416/740
+f 748/416/740 746/418/738 752/417/744
+f 753/419/745 752/417/744 746/418/738
+f 746/418/738 737/420/729 753/419/745
+f 739/421/731 753/419/745 737/420/729
+f 754/435/746 755/436/747 756/437/748
+f 755/436/747 754/435/746 757/438/749
+f 755/436/747 757/438/749 758/435/750
+f 759/439/751 758/435/750 757/438/749
+f 759/439/751 760/440/752 758/435/750
+f 760/440/752 759/439/751 761/441/753
+f 761/441/753 762/442/754 760/440/752
+f 763/443/755 760/440/752 762/442/754
+f 762/442/754 764/444/756 763/443/755
+f 765/445/757 763/443/755 764/444/756
+f 764/444/756 766/446/758 765/445/757
+f 749/433/741 765/445/757 766/446/758
+f 766/446/758 767/447/759 749/433/741
+f 750/434/742 749/433/741 767/447/759
+f 768/432/760 750/434/742 767/447/759
+f 750/434/742 768/432/760 751/411/743
+f 734/414/726 751/411/743 768/432/760
+f 751/411/743 734/414/726 733/413/725
+f 769/448/761 770/449/762 757/438/749
+f 759/439/751 757/438/749 770/449/762
+f 770/449/762 761/441/753 759/439/751
+f 713/398/705 715/411/707 714/400/706
+f 715/411/707 771/434/763 714/400/706
+f 771/434/763 715/411/707 745/432/737
+f 771/434/763 745/432/737 772/447/764
+f 772/447/764 745/432/737 773/450/765
+f 773/450/765 774/451/766 772/447/764
+f 773/450/765 767/447/759 774/451/766
+f 775/452/767 774/451/766 767/447/759
+f 767/447/759 766/446/758 775/452/767
+f 776/453/768 775/452/767 766/446/758
+f 766/446/758 764/444/756 776/453/768
+f 777/454/769 776/453/768 764/444/756
+f 764/444/756 762/442/754 777/454/769
+f 778/455/770 777/454/769 762/442/754
+f 762/442/754 761/441/753 778/455/770
+f 779/456/771 778/455/770 761/441/753
+f 761/441/753 770/449/762 779/456/771
+f 780/457/772 779/456/771 770/449/762
+f 781/458/773 782/459/774 777/454/769
+f 776/453/768 777/454/769 782/459/774
+f 776/453/768 782/459/774 775/452/767
+f 783/460/775 775/452/767 782/459/774
+f 775/452/767 783/460/775 774/451/766
+f 783/460/775 784/452/776 774/451/766
+f 784/452/776 772/447/764 774/451/766
+f 772/447/764 784/452/776 785/446/777
+f 785/446/777 786/461/778 772/447/764
+f 786/461/778 785/446/777 787/445/779
+f 787/445/779 788/462/780 786/461/778
+f 788/462/780 787/445/779 789/463/781
+f 789/463/781 790/464/782 788/462/780
+f 789/463/781 791/465/783 790/464/782
+f 792/466/784 790/464/782 791/465/783
+f 792/466/784 791/465/783 793/467/566
+f 793/467/566 791/465/783 756/437/748
+f 754/435/746 756/437/748 791/465/783
+f 794/468/785 795/469/786 796/470/787
+f 781/458/773 796/470/787 795/469/786
+f 795/469/786 797/471/788 781/458/773
+f 782/459/774 781/458/773 797/471/788
+f 797/471/788 798/472/789 782/459/774
+f 783/460/775 782/459/774 798/472/789
+f 783/460/775 798/472/789 799/459/790
+f 783/460/775 799/459/790 784/452/776
+f 800/473/791 784/452/776 799/459/790
+f 800/473/791 785/446/777 784/452/776
+f 785/446/777 800/473/791 801/444/792
+f 801/444/792 787/445/779 785/446/777
+f 787/445/779 801/444/792 802/443/793
+f 802/443/793 789/463/781 787/445/779
+f 802/443/793 803/440/794 789/463/781
+f 791/465/783 789/463/781 803/440/794
+f 791/465/783 803/440/794 754/435/746
+f 804/439/795 754/435/746 803/440/794
+f 802/443/793 805/442/796 803/440/794
+f 805/442/796 802/443/793 801/444/792
+f 801/444/792 806/454/797 805/442/796
+f 806/454/797 801/444/792 800/473/791
+f 800/473/791 799/459/790 806/454/797
+f 797/471/788 795/469/786 807/474/798
+f 807/474/798 808/475/799 797/471/788
+f 798/472/789 797/471/788 808/475/799
+f 798/472/789 808/475/799 809/471/800
+f 809/471/800 799/459/790 798/472/789
+f 799/459/790 809/471/800 810/458/801
+f 810/458/801 806/454/797 799/459/790
+f 806/454/797 810/458/801 811/455/802
+f 811/455/802 805/442/796 806/454/797
+f 805/442/796 811/455/802 812/441/803
+f 812/441/803 803/440/794 805/442/796
+f 803/440/794 812/441/803 804/439/795
+f 813/449/804 804/439/795 812/441/803
+f 812/441/803 814/456/805 813/449/804
+f 814/456/805 812/441/803 811/455/802
+f 811/455/802 815/470/806 814/456/805
+f 815/470/806 811/455/802 810/458/801
+f 810/458/801 816/469/807 815/470/806
+f 816/469/807 810/458/801 809/471/800
+f 809/471/800 817/474/808 816/469/807
+f 817/474/808 809/471/800 808/475/799
+f 808/475/799 818/476/809 817/474/808
+f 808/475/799 807/474/798 818/476/809
+f 819/477/810 818/476/809 807/474/798
+f 807/474/798 820/478/811 819/477/810
+f 821/479/812 819/477/810 820/478/811
+f 820/478/811 822/480/813 821/479/812
+f 823/481/814 821/479/812 822/480/813
+f 822/480/813 820/478/811 794/468/785
+f 795/469/786 794/468/785 820/478/811
+f 820/478/811 807/474/798 795/469/786
+f 824/482/815 825/483/816 826/484/817
+f 827/485/818 826/484/817 825/483/816
+f 827/485/818 825/483/816 828/486/819
+f 829/487/820 828/486/819 825/483/816
+f 829/487/820 830/488/821 828/486/819
+f 829/487/820 831/489/822 830/488/821
+f 830/488/821 831/489/822 832/490/823
+f 823/481/814 832/490/823 831/489/822
+f 832/490/823 823/481/814 833/491/824
+f 822/480/813 833/491/824 823/481/814
+f 833/491/824 822/480/813 834/492/825
+f 794/468/785 834/492/825 822/480/813
+f 834/492/825 794/468/785 835/493/826
+f 796/470/787 835/493/826 794/468/785
+f 835/493/826 796/470/787 779/456/771
+f 778/455/770 779/456/771 796/470/787
+f 796/470/787 781/458/773 778/455/770
+f 777/454/769 778/455/770 781/458/773
+f 836/494/827 833/491/824 834/492/825
+f 837/495/828 830/488/821 838/496/829
+f 837/495/828 838/496/829 839/497/830
+f 838/496/829 840/498/831 839/497/830
+f 840/498/831 841/499/832 839/497/830
+f 840/498/831 842/500/833 841/499/832
+f 842/500/833 843/501/834 841/499/832
+f 836/494/827 843/501/834 842/500/833
+f 836/494/827 844/502/835 843/501/834
+f 836/494/827 834/492/825 844/502/835
+f 835/493/826 844/502/835 834/492/825
+f 844/502/835 835/493/826 780/457/772
+f 779/456/771 780/457/772 835/493/826
+f 832/490/823 838/496/829 830/488/821
+f 837/495/828 839/497/830 830/488/821
+f 830/488/821 839/497/830 828/486/819
+f 839/497/830 845/503/836 828/486/819
+f 839/497/830 846/504/837 845/503/836
+f 847/505/836 845/503/836 846/504/837
+f 846/504/837 848/506/838 847/505/836
+f 849/507/839 847/505/836 848/506/838
+f 850/508/838 849/507/839 848/506/838
+f 848/506/838 851/509/840 850/508/838
+f 851/509/840 848/506/838 852/510/841
+f 852/510/841 853/511/842 851/509/840
+f 853/511/842 852/510/841 843/501/834
+f 841/499/832 843/501/834 852/510/841
+f 852/510/841 846/504/837 841/499/832
+f 839/497/830 841/499/832 846/504/837
+f 846/504/837 852/510/841 848/506/838
+f 770/449/762 769/448/761 780/457/772
+f 854/512/843 780/457/772 769/448/761
+f 854/512/843 769/448/761 855/457/844
+f 854/512/843 855/457/844 856/501/845
+f 857/502/846 856/501/845 855/457/844
+f 857/502/846 858/494/847 856/501/845
+f 858/494/847 857/502/846 859/492/848
+f 860/491/849 858/494/847 859/492/848
+f 860/491/849 859/492/848 861/480/850
+f 861/480/850 862/481/851 860/491/849
+f 862/481/851 861/480/850 863/479/852
+f 863/479/852 864/513/853 862/481/851
+f 864/513/853 863/479/852 865/514/854
+f 865/514/854 866/482/855 864/513/853
+f 865/514/854 867/515/669 866/482/855
+f 868/516/856 866/482/855 867/515/669
+f 868/516/856 867/515/669 824/482/815
+f 824/482/815 826/484/817 868/516/856
+f 869/489/857 862/481/851 864/513/853
+f 862/481/851 869/489/857 870/490/858
+f 870/490/858 860/491/849 862/481/851
+f 871/488/859 870/490/858 869/489/857
+f 870/490/858 871/488/859 872/496/860
+f 873/517/861 874/518/862 875/519/863
+f 876/519/864 875/519/863 874/518/862
+f 877/508/865 875/519/863 876/519/864
+f 876/519/864 878/509/866 877/508/865
+f 879/506/867 877/508/865 878/509/866
+f 878/509/866 880/510/868 879/506/867
+f 881/504/869 879/506/867 880/510/868
+f 880/510/868 882/499/870 881/504/869
+f 883/497/871 881/504/869 882/499/870
+f 882/499/870 884/498/872 883/497/871
+f 884/498/872 872/496/860 883/497/871
+f 872/496/860 885/495/873 883/497/871
+f 885/495/873 872/496/860 871/488/859
+f 885/495/873 871/488/859 886/487/874
+f 869/489/857 886/487/874 871/488/859
+f 886/487/874 869/489/857 887/483/875
+f 864/513/853 887/483/875 869/489/857
+f 887/483/875 864/513/853 866/482/855
+f 888/500/876 884/498/872 882/499/870
+f 858/494/847 888/500/876 856/501/845
+f 856/501/845 888/500/876 882/499/870
+f 882/499/870 880/510/868 856/501/845
+f 889/511/877 856/501/845 880/510/868
+f 880/510/868 878/509/866 889/511/877
+f 854/512/843 856/501/845 890/520/878
+f 889/511/877 890/520/878 856/501/845
+f 889/511/877 891/521/879 890/520/878
+f 891/521/879 889/511/877 878/509/866
+f 878/509/866 876/519/864 891/521/879
+f 874/518/862 891/521/879 876/519/864
+f 891/521/879 874/518/862 892/522/880
+f 893/523/881 892/522/880 874/518/862
+f 893/523/881 894/518/882 892/522/880
+f 894/518/882 893/523/881 895/517/883
+f 895/517/883 896/519/884 894/518/882
+f 897/519/885 894/518/882 896/519/884
+f 896/519/884 898/524/886 897/519/885
+f 892/522/880 890/520/878 891/521/879
+f 892/522/880 899/521/887 890/520/878
+f 899/521/887 892/522/880 894/518/882
+f 894/518/882 897/519/885 899/521/887
+f 780/457/772 854/512/843 844/502/835
+f 843/501/834 844/502/835 854/512/843
+f 854/512/843 890/520/878 843/501/834
+f 853/511/842 843/501/834 890/520/878
+f 853/511/842 890/520/878 899/521/887
+f 899/521/887 851/509/840 853/511/842
+f 851/509/840 899/521/887 897/519/885
+f 897/519/885 850/508/838 851/509/840
+f 850/508/838 897/519/885 898/524/886
+f 898/524/886 849/507/839 850/508/838
+f 898/524/888 849/507/839 898/524/886
+f 898/524/886 896/519/884 898/524/888
+f 898/524/888 896/519/884 900/525/889
+f 900/525/889 896/519/884 895/517/883
+f 895/517/883 901/517/890 900/525/889
+f 901/517/890 895/517/883 893/523/881
+f 901/517/890 893/523/881 873/517/861
+f 874/518/862 873/517/861 893/523/881
+f 902/526/891 898/524/888 900/525/889
+f 903/524/892 904/524/893 905/524/892
+f 905/524/892 904/524/893 877/508/865
+f 904/524/893 875/519/863 877/508/865
+f 904/524/893 906/526/894 875/519/863
+f 875/519/863 906/526/894 873/517/861
+f 906/526/894 907/525/895 873/517/861
+f 873/517/861 907/525/895 901/517/890
+f 908/517/896 901/517/890 907/525/895
+f 908/517/896 900/525/889 901/517/890
+f 900/525/889 908/517/896 909/527/897
+f 900/525/889 909/527/897 902/526/891
+f 910/528/898 902/526/891 909/527/897
+f 910/528/898 909/527/897 906/526/894
+f 907/525/895 906/526/894 909/527/897
+f 907/525/895 909/527/897 908/517/896
+f 909/527/897 908/517/896 911/527/899
+f 912/485/900 887/483/875 913/484/901
+f 887/483/875 912/485/900 886/487/874
+f 914/486/902 886/487/874 912/485/900
+f 914/486/902 915/503/903 886/487/874
+f 915/503/903 885/495/873 886/487/874
+f 883/497/871 885/495/873 915/503/903
+f 883/497/871 915/503/903 881/504/869
+f 916/505/904 881/504/869 915/503/903
+f 881/504/869 916/505/904 879/506/867
+f 917/507/797 879/506/867 916/505/904
+f 879/506/867 917/507/797 877/508/865
+f 905/524/892 877/508/865 917/507/797
+f 866/482/855 913/484/901 887/483/875
+f 866/482/855 868/516/856 913/484/901
+f 918/529/789 913/484/901 868/516/856
+f 918/529/789 868/516/856 826/484/817
+f 792/466/784 919/530/905 790/464/782
+f 920/531/906 790/464/782 919/530/905
+f 919/530/905 921/532/907 920/531/906
+f 922/533/908 920/531/906 921/532/907
+f 921/532/907 923/534/909 922/533/908
+f 924/379/910 922/533/908 923/534/909
+f 923/534/909 925/535/911 924/379/910
+f 926/382/912 924/379/910 925/535/911
+f 925/535/911 927/536/913 926/382/912
+f 928/537/907 926/382/912 927/536/913
+f 928/537/907 927/536/913 929/538/914
+f 929/538/914 930/539/915 928/537/907
+f 930/539/915 929/538/914 931/540/916
+f 931/540/916 932/541/917 930/539/915
+f 932/541/917 931/540/916 933/542/918
+f 933/542/918 934/543/919 932/541/917
+f 933/542/918 935/544/920 934/543/919
+f 936/545/921 934/543/919 935/544/920
+f 926/382/912 937/546/922 924/379/910
+f 937/546/922 938/547/923 924/379/910
+f 922/533/908 924/379/910 938/547/923
+f 938/547/923 939/548/924 922/533/908
+f 920/531/906 922/533/908 939/548/924
+f 939/548/924 940/549/925 920/531/906
+f 790/464/782 920/531/906 940/549/925
+f 940/549/925 788/462/780 790/464/782
+f 771/434/763 772/447/764 786/461/778
+f 786/461/778 714/400/706 771/434/763
+f 714/400/706 786/461/778 788/462/780
+f 788/462/780 940/549/925 714/400/706
+f 941/550/926 714/400/706 940/549/925
+f 940/549/925 939/548/924 941/550/926
+f 694/551/927 941/550/926 939/548/924
+f 939/548/924 938/547/923 694/551/927
+f 942/552/928 694/551/927 938/547/923
+f 938/547/923 937/546/922 942/552/928
+f 943/553/929 942/552/928 937/546/922
+f 937/546/922 926/382/912 943/553/929
+f 944/554/930 943/553/929 926/382/912
+f 926/382/912 945/388/931 944/554/930
+f 945/388/931 926/382/912 928/537/907
+f 945/388/931 928/537/907 930/539/915
+f 694/551/927 693/399/704 941/550/926
+f 941/550/926 693/399/704 714/400/706
+f 936/545/921 935/544/920 946/555/932
+f 936/545/921 946/555/932 947/556/933
+f 948/557/934 947/556/933 946/555/932
+f 948/557/934 949/555/935 947/556/933
+f 950/545/936 947/556/933 949/555/935
+f 950/545/936 949/555/935 951/544/937
+f 950/545/936 951/544/937 952/543/938
+f 953/542/939 952/543/938 951/544/937
+f 953/542/939 954/541/940 952/543/938
+f 954/541/940 953/542/939 955/540/941
+f 955/540/941 956/558/942 954/541/940
+f 956/558/942 955/540/941 957/538/943
+f 957/538/943 958/537/944 956/558/942
+f 958/537/944 957/538/943 959/536/945
+f 958/537/944 959/536/945 960/382/946
+f 961/559/947 960/382/946 959/536/945
+f 960/382/946 961/559/947 962/560/948
+f 963/534/949 962/560/948 961/559/947
+f 947/556/933 964/561/950 965/562/951
+f 947/556/933 950/545/936 964/561/950
+f 952/543/938 964/561/950 950/545/936
+f 966/563/952 952/543/938 954/541/940
+f 966/563/952 967/564/953 952/543/938
+f 964/561/950 952/543/938 967/564/953
+f 968/564/954 964/561/950 967/564/953
+f 968/564/954 969/565/955 964/561/950
+f 965/562/951 964/561/950 969/565/955
+f 965/562/951 969/565/955 970/561/956
+f 970/561/956 947/556/933 965/562/951
+f 947/556/933 970/561/956 936/545/921
+f 934/543/919 936/545/921 970/561/956
+f 970/561/956 971/564/957 934/543/919
+f 972/566/958 934/543/919 971/564/957
+f 972/566/958 932/541/917 934/543/919
+f 970/561/956 973/567/959 971/564/957
+f 973/567/959 970/561/956 969/565/955
+f 962/560/948 963/534/949 974/533/960
+f 975/532/961 974/533/960 963/534/949
+f 974/533/960 975/532/961 976/531/962
+f 977/530/963 976/531/962 975/532/961
+f 976/531/962 977/530/963 978/568/964
+f 979/466/965 978/568/964 977/530/963
+f 979/466/965 980/465/966 978/568/964
+f 980/465/966 979/466/965 981/467/967
+f 981/467/967 982/437/968 980/465/966
+f 758/435/750 980/465/966 982/437/968
+f 758/435/750 982/437/968 755/436/747
+f 983/569/747 755/436/747 982/437/968
+f 983/569/747 756/437/748 755/436/747
+f 984/463/969 978/568/964 980/465/966
+f 984/463/969 985/462/813 978/568/964
+f 986/549/970 978/568/964 985/462/813
+f 978/568/964 986/549/970 976/531/962
+f 987/548/971 976/531/962 986/549/970
+f 976/531/962 987/548/971 974/533/960
+f 988/547/972 974/533/960 987/548/971
+f 974/533/960 988/547/972 962/560/948
+f 989/546/973 962/560/948 988/547/972
+f 989/546/973 960/382/946 962/560/948
+f 980/465/966 758/435/750 760/440/752
+f 980/465/966 760/440/752 984/463/969
+f 763/443/755 984/463/969 760/440/752
+f 763/443/755 765/445/757 984/463/969
+f 985/462/813 984/463/969 765/445/757
+f 765/445/757 749/433/741 985/462/813
+f 698/400/689 985/462/813 749/433/741
+f 985/462/813 698/400/689 986/549/970
+f 990/550/974 986/549/970 698/400/689
+f 986/549/970 990/550/974 987/548/971
+f 991/551/975 987/548/971 990/550/974
+f 987/548/971 991/551/975 988/547/972
+f 992/552/976 988/547/972 991/551/975
+f 988/547/972 992/552/976 989/546/973
+f 993/553/977 989/546/973 992/552/976
+f 989/546/973 993/553/977 960/382/946
+f 994/554/978 960/382/946 993/553/977
+f 960/382/946 994/554/978 995/388/979
+f 697/399/688 990/550/974 698/400/689
+f 697/399/688 991/551/975 990/550/974
+f 996/570/980 997/571/981 923/534/909
+f 925/535/911 923/534/909 997/571/981
+f 925/535/911 997/571/981 998/572/982
+f 999/573/983 925/535/911 998/572/982
+f 927/536/913 925/535/911 999/573/983
+f 927/536/913 999/573/983 1000/574/984
+f 1000/574/984 929/538/914 927/536/913
+f 1000/574/984 1001/575/985 929/538/914
+f 1001/575/985 931/540/916 929/538/914
+f 931/540/916 1001/575/985 1002/576/986
+f 1002/576/986 933/542/918 931/540/916
+f 933/542/918 1002/576/986 935/544/920
+f 1003/577/987 935/544/920 1002/576/986
+f 935/544/920 1003/577/987 1004/578/988
+f 1005/579/989 1004/578/988 1003/577/987
+f 1004/578/988 1005/579/989 1006/580/990
+f 1007/581/991 1006/580/990 1005/579/989
+f 1008/582/992 1007/581/991 1005/579/989
+f 1006/580/990 1009/583/993 1004/578/988
+f 946/555/932 1004/578/988 1009/583/993
+f 1004/578/988 946/555/932 935/544/920
+f 1010/581/994 1007/581/991 1008/582/992
+f 1011/584/995 1010/581/994 1008/582/992
+f 1008/582/992 1012/585/996 1011/584/995
+f 1013/586/997 1011/584/995 1012/585/996
+f 1012/585/996 1014/587/998 1013/586/997
+f 1015/588/999 1013/586/997 1014/587/998
+f 1014/587/998 1016/589/1000 1015/588/999
+f 1017/590/1001 1015/588/999 1016/589/1000
+f 1016/589/1000 1018/591/1002 1017/590/1001
+f 1019/592/1003 1017/590/1001 1018/591/1002
+f 1018/591/1002 1020/593/1004 1019/592/1003
+f 1021/594/1005 1019/592/1003 1020/593/1004
+f 1021/594/1005 1020/593/1004 1022/592/1006
+f 1023/591/1007 1022/592/1006 1020/593/1004
+f 1022/592/1006 1023/591/1007 1024/590/1008
+f 1025/595/1009 1024/590/1008 1023/591/1007
+f 1024/590/1008 1025/595/1009 1026/588/1010
+f 1027/587/1011 1026/588/1010 1025/595/1009
+f 1023/591/1007 1028/596/1012 1025/595/1009
+f 1029/597/1013 1028/596/1012 1030/598/1014
+f 1031/599/1015 1030/598/1014 1028/596/1012
+f 1028/596/1012 1023/591/1007 1031/599/1015
+f 1020/593/1004 1031/599/1015 1023/591/1007
+f 1020/593/1004 1018/591/1002 1031/599/1015
+f 1032/596/1016 1031/599/1015 1018/591/1002
+f 1018/591/1002 1016/589/1000 1032/596/1016
+f 1033/600/1017 1032/596/1016 1016/589/1000
+f 1016/589/1000 1014/587/998 1033/600/1017
+f 1034/601/1018 1033/600/1017 1014/587/998
+f 1014/587/998 1012/585/996 1034/601/1018
+f 1035/602/1019 1034/601/1018 1012/585/996
+f 1012/585/996 1008/582/992 1035/602/1019
+f 1034/601/1018 1035/602/1019 1036/603/1020
+f 1033/600/1017 1034/601/1018 1037/604/1021
+f 1036/603/1020 1037/604/1021 1034/601/1018
+f 1037/604/1021 1036/603/1020 1038/605/1022
+f 1032/596/1016 1033/600/1017 1039/597/1023
+f 1037/604/1021 1039/597/1023 1033/600/1017
+f 1039/597/1023 1037/604/1021 1040/606/1024
+f 1038/605/1022 1040/606/1024 1037/604/1021
+f 1040/606/1024 1038/605/1022 1041/607/1025
+f 1031/599/1015 1032/596/1016 1030/598/1014
+f 1039/597/1023 1030/598/1014 1032/596/1016
+f 1030/598/1014 1039/597/1023 1042/608/1026
+f 1040/606/1024 1042/608/1026 1039/597/1023
+f 1042/608/1026 1040/606/1024 1043/609/1027
+f 1041/607/1025 1043/609/1027 1040/606/1024
+f 1043/609/1027 1041/607/1025 1044/610/1028
+f 1045/611/1026 1046/612/1029 1044/610/1028
+f 1047/613/1030 1048/614/1031 1049/615/1032
+f 1049/615/1032 1050/616/1033 1047/613/1030
+f 1050/616/1033 1049/615/1032 1051/617/1034
+f 1051/617/1034 1052/618/1035 1050/616/1033
+f 1052/618/1035 1051/617/1034 1046/612/1029
+f 1052/618/1035 1046/612/1029 1053/619/1036
+f 1054/620/1037 1053/619/1036 1046/612/1029
+f 1054/620/1037 1046/612/1029 1055/621/1027
+f 1045/611/1026 1055/621/1027 1046/612/1029
+f 1045/611/1026 1056/612/1038 1055/621/1027
+f 1045/611/1026 1044/610/1028 1056/612/1038
+f 1057/622/1039 1056/612/1038 1044/610/1028
+f 1057/622/1039 1044/610/1028 1041/607/1025
+f 1041/607/1025 1058/623/1040 1057/622/1039
+f 1058/623/1040 1041/607/1025 1038/605/1022
+f 1038/605/1022 1059/624/1041 1058/623/1040
+f 1059/624/1041 1038/605/1022 1036/603/1020
+f 1036/603/1020 1060/625/1042 1059/624/1041
+f 1047/613/1030 1061/574/1043 1062/575/885
+f 1061/574/1043 1047/613/1030 1050/616/1033
+f 1050/616/1033 1063/626/1044 1061/574/1043
+f 1063/626/1044 1050/616/1033 1052/618/1035
+f 1063/626/1044 1052/618/1035 1064/572/1045
+f 1053/619/1036 1064/572/1045 1052/618/1035
+f 953/542/939 951/544/937 1065/576/1046
+f 1065/576/1046 955/540/941 953/542/939
+f 955/540/941 1065/576/1046 1062/575/885
+f 1062/575/885 957/538/943 955/540/941
+f 1062/575/885 1061/574/1043 957/538/943
+f 1061/574/1043 959/536/945 957/538/943
+f 959/536/945 1061/574/1043 1063/626/1044
+f 959/536/945 1063/626/1044 961/559/947
+f 961/559/947 1063/626/1044 1064/572/1045
+f 1066/571/1047 961/559/947 1064/572/1045
+f 961/559/947 1066/571/1047 963/534/949
+f 1067/570/1048 963/534/949 1066/571/1047
+f 1026/588/1010 1027/587/1011 1068/586/1049
+f 1069/627/1050 1068/586/1049 1027/587/1011
+f 1068/586/1049 1069/627/1050 1070/628/1051
+f 1071/582/1052 1070/628/1051 1069/627/1050
+f 1070/628/1051 1071/582/1052 1072/581/1053
+f 1072/581/1053 1071/582/1052 1073/581/1054
+f 1073/581/1054 1071/582/1052 1074/579/1055
+f 1073/581/1054 1074/579/1055 1075/580/1056
+f 1076/578/1057 1075/580/1056 1074/579/1055
+f 1075/580/1056 1076/578/1057 1077/583/1058
+f 949/555/935 1077/583/1058 1076/578/1057
+f 1076/578/1057 951/544/937 949/555/935
+f 951/544/937 1076/578/1057 1078/577/1059
+f 1078/577/1059 1065/576/1046 951/544/937
+f 1065/576/1046 1078/577/1059 1079/629/1060
+f 1079/629/1060 1062/575/885 1065/576/1046
+f 1062/575/885 1079/629/1060 1048/614/1031
+f 1048/614/1031 1047/613/1030 1062/575/885
+f 1074/579/1055 1078/577/1059 1076/578/1057
+f 1078/577/1059 1074/579/1055 1080/630/1061
+f 1080/630/1061 1079/629/1060 1078/577/1059
+f 1079/629/1060 1080/630/1061 1081/631/1062
+f 1081/631/1062 1048/614/1031 1079/629/1060
+f 1081/631/1062 1082/624/1063 1048/614/1031
+f 1082/624/1063 1049/615/1032 1048/614/1031
+f 1049/615/1032 1082/624/1063 1083/623/1064
+f 1083/623/1064 1051/617/1034 1049/615/1032
+f 1051/617/1034 1083/623/1064 1084/622/1065
+f 1084/622/1065 1046/612/1029 1051/617/1034
+f 1084/622/1065 1044/610/1028 1046/612/1029
+f 1084/622/1065 1085/607/1066 1044/610/1028
+f 1043/609/1027 1044/610/1028 1085/607/1066
+f 1085/607/1066 1086/606/1067 1043/609/1027
+f 1042/608/1026 1043/609/1027 1086/606/1067
+f 1086/606/1067 1029/597/1013 1042/608/1026
+f 1030/598/1014 1042/608/1026 1029/597/1013
+f 1087/603/1068 1082/624/1063 1081/631/1062
+f 1088/605/1069 1083/623/1064 1082/624/1063
+f 1082/624/1063 1087/603/1068 1088/605/1069
+f 1089/604/1070 1088/605/1069 1087/603/1068
+f 1087/603/1068 1090/601/1071 1089/604/1070
+f 1090/601/1071 1087/603/1068 1091/602/1072
+f 1091/602/1072 1087/603/1068 1081/631/1062
+f 1091/602/1072 1081/631/1062 1080/630/1061
+f 1092/600/1073 1089/604/1070 1090/601/1071
+f 1085/607/1066 1084/622/1065 1083/623/1064
+f 1083/623/1064 1088/605/1069 1085/607/1066
+f 1086/606/1067 1085/607/1066 1088/605/1069
+f 1088/605/1069 1089/604/1070 1086/606/1067
+f 1029/597/1013 1086/606/1067 1089/604/1070
+f 1089/604/1070 1092/600/1073 1029/597/1013
+f 1028/596/1012 1029/597/1013 1092/600/1073
+f 1092/600/1073 1025/595/1009 1028/596/1012
+f 1025/595/1009 1092/600/1073 1027/587/1011
+f 1090/601/1071 1027/587/1011 1092/600/1073
+f 1027/587/1011 1090/601/1071 1069/627/1050
+f 1091/602/1072 1069/627/1050 1090/601/1071
+f 1069/627/1050 1091/602/1072 1071/582/1052
+f 1080/630/1061 1071/582/1052 1091/602/1072
+f 1071/582/1052 1080/630/1061 1074/579/1055
+f 1035/602/1019 1060/625/1042 1036/603/1020
+f 1035/602/1019 1093/630/1074 1060/625/1042
+f 1093/630/1074 1035/602/1019 1008/582/992
+f 1008/582/992 1005/579/989 1093/630/1074
+f 1003/577/987 1093/630/1074 1005/579/989
+f 1093/630/1074 1003/577/987 1094/632/985
+f 1002/576/986 1094/632/985 1003/577/987
+f 1094/632/985 1002/576/986 1001/575/985
+f 1001/575/985 1095/614/1075 1094/632/985
+f 1095/614/1075 1001/575/985 1096/613/1076
+f 1096/613/1076 1097/615/1077 1095/614/1075
+f 1097/615/1077 1096/613/1076 1098/616/1078
+f 1098/616/1078 1099/617/1079 1097/615/1077
+f 1099/617/1079 1098/616/1078 1100/618/1080
+f 1100/618/1080 1056/612/1038 1099/617/1079
+f 1100/618/1080 1101/619/1081 1056/612/1038
+f 1102/620/1082 1056/612/1038 1101/619/1081
+f 1102/620/1082 1055/621/1027 1056/612/1038
+f 1094/632/985 1060/625/1042 1093/630/1074
+f 1060/625/1042 1094/632/985 1095/614/1075
+f 1059/624/1041 1060/625/1042 1095/614/1075
+f 1059/624/1041 1095/614/1075 1097/615/1077
+f 1097/615/1077 1058/623/1040 1059/624/1041
+f 1058/623/1040 1097/615/1077 1099/617/1079
+f 1099/617/1079 1057/622/1039 1058/623/1040
+f 1057/622/1039 1099/617/1079 1056/612/1038
+f 1103/633/1083 1104/634/1084 1105/635/1085
+f 1105/635/1085 1106/636/1086 1103/633/1083
+f 1106/636/1086 1105/635/1085 1107/637/1087
+f 1107/637/1087 1108/638/1088 1106/636/1086
+f 1109/639/1089 1106/636/1086 1108/638/1088
+f 1108/638/1088 1110/640/1090 1109/639/1089
+f 1111/641/1013 1109/639/1089 1110/640/1090
+f 1111/641/1013 1112/642/1091 1109/639/1089
+f 1112/642/1091 1113/643/1092 1109/639/1089
+f 1112/642/1091 1114/644/1093 1113/643/1092
+f 1114/644/1093 1115/645/1094 1113/643/1092
+f 1103/633/1083 1113/643/1092 1115/645/1094
+f 1115/645/1094 1116/646/1095 1103/633/1083
+f 1104/634/1084 1103/633/1083 1116/646/1095
+f 1116/646/1095 1117/647/1096 1104/634/1084
+f 1118/648/1097 1104/634/1084 1117/647/1096
+f 1117/647/1096 836/649/1098 1118/648/1097
+f 842/650/1099 1118/648/1097 836/649/1098
+f 1113/643/1092 1103/633/1083 1106/636/1086
+f 1106/636/1086 1109/639/1089 1113/643/1092
+f 842/650/1099 840/651/1100 1118/648/1097
+f 1119/652/1101 1118/648/1097 840/651/1100
+f 1119/652/1101 1120/653/1102 1118/648/1097
+f 1120/653/1102 1119/652/1101 1121/654/749
+f 1121/654/749 1122/655/1103 1120/653/1102
+f 1105/635/1085 1120/653/1102 1122/655/1103
+f 1122/655/1103 1107/637/1087 1105/635/1085
+f 1123/656/1104 1121/654/749 1119/652/1101
+f 1124/657/1105 1125/658/1106 1126/659/1107
+f 1127/660/1108 1126/659/1107 1125/658/1106
+f 1126/659/1107 1127/660/1108 1128/661/1109
+f 1129/662/1110 1128/661/1109 1127/660/1108
+f 1128/661/1109 1129/662/1110 1130/659/1111
+f 1131/660/1112 1130/659/1111 1129/662/1110
+f 1130/659/1111 1131/660/1112 1132/657/1113
+f 1133/658/1114 1132/657/1113 1131/660/1112
+f 1132/657/1113 1133/658/1114 1134/663/1115
+f 1135/664/1116 1134/663/1115 1133/658/1114
+f 1134/663/1115 1135/664/1116 1124/657/1105
+f 1125/658/1106 1124/657/1105 1135/664/1116
+f 1135/664/1116 1136/665/1117 1125/658/1106
+f 1137/666/1118 1125/658/1106 1136/665/1117
+f 1125/658/1106 1137/666/1118 1127/660/1108
+f 1138/667/1119 1127/660/1108 1137/666/1118
+f 1127/660/1108 1138/667/1119 1129/662/1110
+f 1139/668/1120 1129/662/1110 1138/667/1119
+f 1129/662/1110 1139/668/1120 1131/660/1112
+f 1140/667/1121 1131/660/1112 1139/668/1120
+f 1131/660/1112 1140/667/1121 1133/658/1114
+f 1141/666/1122 1133/658/1114 1140/667/1121
+f 1133/658/1114 1141/666/1122 1135/664/1116
+f 1136/665/1117 1135/664/1116 1141/666/1122
+f 1142/669/1123 1143/670/1124 1144/671/1125
+f 1145/672/1126 1144/671/1125 1143/670/1124
+f 1144/671/1125 1145/672/1126 1146/673/1127
+f 1147/674/1128 1146/673/1127 1145/672/1126
+f 1146/673/1127 1147/674/1128 1148/675/898
+f 1148/675/898 1149/676/1129 1146/673/1127
+f 1148/675/898 884/651/1130 1149/676/1129
+f 888/650/1131 1149/676/1129 884/651/1130
+f 888/650/1131 858/649/1132 1149/676/1129
+f 1150/677/1133 1149/676/1129 858/649/1132
+f 1149/676/1129 1150/677/1133 1151/678/1134
+f 1152/679/1135 1151/678/1134 1150/677/1133
+f 1151/678/1134 1152/679/1135 1153/680/1136
+f 1154/681/1137 1153/680/1136 1152/679/1135
+f 1153/680/1136 1154/681/1137 1155/682/1138
+f 1156/683/1139 1155/682/1138 1154/681/1137
+f 1156/683/1139 1157/684/1140 1155/682/1138
+f 1157/684/1140 1158/685/1141 1155/682/1138
+f 1159/686/1142 1148/675/898 1147/674/1128
+f 1157/684/1140 1160/687/1023 1158/685/1141
+f 1160/687/1023 1161/688/1143 1158/685/1141
+f 1162/689/1144 1158/685/1141 1161/688/1143
+f 1161/688/1143 1163/690/1145 1162/689/1144
+f 1164/691/1146 1162/689/1144 1163/690/1145
+f 1151/678/1134 1146/673/1127 1149/676/1129
+f 1146/673/1127 1151/678/1134 1144/671/1125
+f 1153/680/1136 1144/671/1125 1151/678/1134
+f 1144/671/1125 1153/680/1136 1142/669/1123
+f 1155/682/1138 1142/669/1123 1153/680/1136
+f 1142/669/1123 1155/682/1138 1158/685/1141
+f 1158/685/1141 1162/689/1144 1142/669/1123
+f 1143/670/1124 1142/669/1123 1162/689/1144
+f 804/439/795 757/438/749 754/435/746
+f 804/439/795 813/449/804 757/438/749
+f 769/448/761 757/438/749 813/449/804
+f 813/449/804 855/457/844 769/448/761
+f 855/457/844 813/449/804 814/456/805
+f 814/456/805 1165/493/1147 855/457/844
+f 1165/493/1147 814/456/805 815/470/806
+f 815/470/806 1166/468/1148 1165/493/1147
+f 1166/468/1148 815/470/806 816/469/807
+f 816/469/807 1167/478/1149 1166/468/1148
+f 1167/478/1149 816/469/807 817/474/808
+f 817/474/808 1168/477/1150 1167/478/1149
+f 1168/477/1150 817/474/808 818/476/809
+f 818/476/809 867/515/669 1168/477/1150
+f 818/476/809 819/477/810 867/515/669
+f 1169/514/1151 867/515/669 819/477/810
+f 819/477/810 821/479/812 1169/514/1151
+f 1170/513/1152 1169/514/1151 821/479/812
+f 1169/514/1151 824/482/815 867/515/669
+f 1169/514/1151 1170/513/1152 824/482/815
+f 825/483/816 824/482/815 1170/513/1152
+f 821/479/812 823/481/814 1170/513/1152
+f 831/489/822 1170/513/1152 823/481/814
+f 1170/513/1152 831/489/822 825/483/816
+f 829/487/820 825/483/816 831/489/822
+f 1171/667/1153 1172/668/1154 1173/660/1155
+f 1173/660/1155 1174/658/1156 1171/667/1153
+f 1174/658/1156 1173/660/1155 1175/657/1157
+f 1175/657/1157 1176/663/1158 1174/658/1156
+f 1177/664/1159 1174/658/1156 1176/663/1158
+f 1176/663/1158 1178/657/1160 1177/664/1159
+f 1179/658/1161 1177/664/1159 1178/657/1160
+f 1178/657/1160 1180/659/1162 1179/658/1161
+f 1181/660/1163 1179/658/1161 1180/659/1162
+f 1180/659/1162 1182/661/1164 1181/660/1163
+f 1183/662/1165 1181/660/1163 1182/661/1164
+f 1182/661/1164 1184/659/1166 1183/662/1165
+f 1173/660/1155 1183/662/1165 1184/659/1166
+f 1184/659/1166 1175/657/1157 1173/660/1155
+f 1183/662/1165 1173/660/1155 1172/668/1154
+f 1172/668/1154 1185/667/1167 1183/662/1165
+f 1181/660/1163 1183/662/1165 1185/667/1167
+f 1185/667/1167 1186/666/1168 1181/660/1163
+f 1179/658/1161 1181/660/1163 1186/666/1168
+f 1186/666/1168 1187/665/1169 1179/658/1161
+f 1177/664/1159 1179/658/1161 1187/665/1169
+f 1187/665/1169 1188/666/1170 1177/664/1159
+f 1174/658/1156 1177/664/1159 1188/666/1170
+f 1188/666/1170 1171/667/1153 1174/658/1156
+f 991/692/1171 1189/693/1172 992/694/1173
+f 1190/695/1174 992/694/1173 1189/693/1172
+f 992/694/1173 1190/695/1174 993/696/1175
+f 1191/697/1176 993/696/1175 1190/695/1174
+f 993/696/1175 1191/697/1176 994/698/1177
+f 1192/699/1177 994/698/1177 1191/697/1176
+f 994/698/1177 1192/699/1177 1193/700/1178
+f 1194/701/1179 1193/700/1178 1192/699/1177
+f 1194/701/1179 1195/702/1180 1193/700/1178
+f 1196/677/1181 1193/700/1178 1195/702/1180
+f 1195/702/1180 1197/703/1182 1196/677/1181
+f 954/704/1183 1196/677/1181 1197/703/1182
+f 1197/703/1182 1198/705/1184 954/704/1183
+f 966/706/1185 954/704/1183 1198/705/1184
+f 695/397/1186 1199/707/1187 1200/708/1188
+f 1201/709/1187 1200/708/1188 1199/707/1187
+f 1199/707/1187 1202/710/1189 1201/709/1187
+f 1203/711/1190 1201/709/1187 1202/710/1189
+f 1202/710/1189 1204/712/1191 1203/711/1190
+f 1205/713/1192 1203/711/1190 1204/712/1191
+f 1204/712/1191 1206/714/1193 1205/713/1192
+f 1207/715/1194 1205/713/1192 1206/714/1193
+f 1207/715/1194 1206/714/1193 1208/716/1195
+f 1209/717/1196 1208/716/1195 1206/714/1193
+f 1208/716/1195 1209/717/1196 1210/718/1197
+f 1211/719/1198 1210/718/1197 1209/717/1196
+f 1211/719/1198 1212/720/1199 1210/718/1197
+f 1213/721/1200 1210/718/1197 1212/720/1199
+f 1213/721/1200 1214/722/1201 1210/718/1197
+f 1208/716/1195 1210/718/1197 1214/722/1201
+f 1215/723/1202 1216/724/1202 1217/415/1203
+f 1218/724/1204 1217/415/1203 1216/724/1202
+f 1217/415/1203 1218/724/1204 1219/725/1205
+f 1219/725/1205 1218/724/1204 1220/726/1206
+f 1218/724/1204 1221/409/1207 1220/726/1206
+f 1220/726/1206 1221/409/1207 1222/727/1208
+f 1223/405/1208 1222/727/1208 1221/409/1207
+f 960/382/946 995/388/979 958/537/944
+f 995/388/979 956/558/942 958/537/944
+f 956/558/942 995/388/979 1196/728/1209
+f 1196/728/1209 954/541/940 956/558/942
+f 1193/729/1210 995/388/979 994/554/978
+f 1193/729/1210 1196/728/1209 995/388/979
+f 1224/730/1211 1225/391/624 1226/730/1211
+f 1227/391/624 1226/730/1211 1225/391/624
+f 1225/391/624 1228/374/623 1227/391/624
+f 1229/374/623 1227/391/624 1228/374/623
+f 1228/374/623 1230/731/1211 1229/374/623
+f 1231/731/1211 1229/374/623 1230/731/1211
+f 1232/728/1212 930/539/915 932/541/917
+f 930/539/915 1232/728/1212 945/388/931
+f 1233/729/1213 945/388/931 1232/728/1212
+f 1233/729/1213 944/554/930 945/388/931
+f 972/732/1214 1212/720/1214 932/733/1215
+f 1211/719/1216 932/733/1215 1212/720/1214
+f 932/733/1215 1211/719/1216 1232/734/1217
+f 1209/717/1218 1232/734/1217 1211/719/1216
+f 1232/734/1217 1209/717/1218 1233/735/1219
+f 1206/714/1220 1233/735/1219 1209/717/1218
+f 1206/714/1220 1204/712/1221 1233/735/1219
+f 944/736/1222 1233/735/1219 1204/712/1221
+f 1204/712/1221 1202/710/1223 944/736/1222
+f 943/737/1224 944/736/1222 1202/710/1223
+f 1202/710/1223 1199/707/1225 943/737/1224
+f 942/738/1226 943/737/1224 1199/707/1225
+f 1199/707/1225 695/397/1227 942/738/1226
+f 694/396/1228 942/738/1226 695/397/1227
+f 1096/613/1076 1001/575/985 1000/574/984
+f 1000/574/984 1098/616/1078 1096/613/1076
+f 1098/616/1078 1000/574/984 999/573/983
+f 999/573/983 1100/618/1080 1098/616/1078
+f 999/573/983 998/572/982 1100/618/1080
+f 1101/619/1081 1100/618/1080 998/572/982
+f 1178/739/1229 1176/740/1229 1180/741/1229
+f 1176/740/1229 1184/742/1229 1180/741/1229
+f 1175/743/1229 1184/742/1229 1176/740/1229
+f 1180/741/1229 1184/742/1229 1182/744/1229
+f 1132/743/1230 1134/740/1230 1130/742/1230
+f 1134/740/1230 1126/741/1230 1130/742/1230
+f 1124/739/1230 1126/741/1230 1134/740/1230
+f 1130/742/1230 1126/741/1230 1128/744/1230
+f 857/502/846 855/457/844 1165/493/1147
+f 1165/493/1147 859/492/848 857/502/846
+f 859/492/848 1165/493/1147 1166/468/1148
+f 1166/468/1148 861/480/850 859/492/848
+f 861/480/850 1166/468/1148 1167/478/1149
+f 1167/478/1149 863/479/852 861/480/850
+f 863/479/852 1167/478/1149 1168/477/1150
+f 1168/477/1150 865/514/854 863/479/852
+f 865/514/854 1168/477/1150 867/515/669
+f 1234/745/1231 1235/746/1232 1236/747/1233
+f 1237/748/1234 1236/747/1233 1235/746/1232
+f 1236/747/1233 1237/748/1234 1238/749/1235
+f 1239/750/1236 1238/749/1235 1237/748/1234
+f 1237/748/1234 1240/751/1237 1239/750/1236
+f 1241/752/1238 1239/750/1236 1240/751/1237
+f 1240/751/1237 1242/753/670 1241/752/1238
+f 1243/754/1239 1241/752/1238 1242/753/670
+f 1242/753/670 1244/755/1240 1243/754/1239
+f 1245/756/1241 1243/754/1239 1244/755/1240
+f 1244/755/1240 1246/757/1242 1245/756/1241
+f 1244/755/1240 1247/758/1243 1246/757/1242
+f 1248/759/1244 1246/757/1242 1247/758/1243
+f 1247/758/1243 1249/760/1245 1248/759/1244
+f 1250/761/1246 1248/759/1244 1249/760/1245
+f 1249/760/1245 1251/762/1247 1250/761/1246
+f 1252/763/1248 1250/761/1246 1251/762/1247
+f 1252/763/1248 1251/762/1247 1253/764/1249
+f 1249/760/1245 1254/765/1250 1251/762/1247
+f 1247/758/1243 1255/766/1251 1249/760/1245
+f 1254/765/1250 1249/760/1245 1255/766/1251
+f 1255/766/1251 1256/767/1252 1254/765/1250
+f 1244/755/1240 1242/753/670 1247/758/1243
+f 1255/766/1251 1247/758/1243 1242/753/670
+f 1242/753/670 1240/751/1237 1255/766/1251
+f 1256/767/1252 1255/766/1251 1240/751/1237
+f 1240/751/1237 1237/748/1234 1256/767/1252
+f 1235/746/1232 1256/767/1252 1237/748/1234
+f 1256/767/1252 1235/746/1232 1257/768/1253
+f 1257/768/1253 1254/765/1250 1256/767/1252
+f 1254/765/1250 1257/768/1253 1258/769/672
+f 1258/769/672 1251/762/1247 1254/765/1250
+f 1251/762/1247 1258/769/672 1259/770/1254
+f 1259/770/1254 1253/764/1249 1251/762/1247
+f 1259/770/1254 1260/762/1255 1253/764/1249
+f 1261/763/1256 1253/764/1249 1260/762/1255
+f 1261/763/1256 1260/762/1255 1262/761/1257
+f 1262/761/1257 1263/771/1258 1261/763/1256
+f 1263/771/1258 1262/761/1257 1264/772/1259
+f 1264/772/1259 1265/773/1260 1263/771/1258
+f 1266/774/1261 1259/770/1254 1258/769/672
+f 1267/775/1262 1257/768/1253 1235/746/1232
+f 1257/768/1253 1267/775/1262 1268/776/1263
+f 1268/776/1263 1258/769/672 1257/768/1253
+f 1258/769/672 1268/776/1263 1266/774/1261
+f 1269/777/1254 1266/774/1261 1268/776/1263
+f 1269/777/1254 1270/776/1264 1266/774/1261
+f 1271/769/1265 1266/774/1261 1270/776/1264
+f 1266/774/1261 1271/769/1265 1259/770/1254
+f 1260/762/1255 1259/770/1254 1271/769/1265
+f 1272/778/1266 1268/776/1263 1267/775/1262
+f 700/779/1267 702/780/1268 1272/778/1266
+f 703/781/1269 1272/778/1266 702/780/1268
+f 703/781/1269 705/782/1270 1272/778/1266
+f 705/782/1270 708/781/1271 1273/778/1272
+f 708/781/1271 710/780/1273 1273/778/1272
+f 711/779/1274 1273/778/1272 710/780/1273
+f 1274/745/1275 1275/747/1276 1276/746/1277
+f 1277/748/1278 1276/746/1277 1275/747/1276
+f 1276/746/1277 1277/748/1278 1278/767/1279
+f 1279/751/1280 1278/767/1279 1277/748/1278
+f 1278/767/1279 1279/751/1280 1280/766/1281
+f 1281/753/1282 1280/766/1281 1279/751/1280
+f 1280/766/1281 1281/753/1282 1282/758/1283
+f 1283/783/1284 1282/758/1283 1281/753/1282
+f 1283/783/1284 1284/757/1285 1282/758/1283
+f 1285/759/1285 1282/758/1283 1284/757/1285
+f 1284/757/1285 1286/784/1286 1285/759/1285
+f 1264/772/1259 1285/759/1285 1286/784/1286
+f 1285/759/1285 1264/772/1259 1262/761/1257
+f 1262/761/1257 1287/760/1287 1285/759/1285
+f 1287/760/1287 1262/761/1257 1260/762/1255
+f 1287/760/1287 1260/762/1255 1288/765/1277
+f 1271/769/1265 1288/765/1277 1260/762/1255
+f 1288/765/1277 1271/769/1265 1289/768/1288
+f 1270/776/1264 1289/768/1288 1271/769/1265
+f 1289/768/1288 1270/776/1264 1290/775/1289
+f 1273/778/1272 1290/775/1289 1270/776/1264
+f 1290/775/1289 1276/746/1277 1289/768/1288
+f 1278/767/1279 1289/768/1288 1276/746/1277
+f 1289/768/1288 1278/767/1279 1288/765/1277
+f 1280/766/1281 1288/765/1277 1278/767/1279
+f 1288/765/1277 1280/766/1281 1287/760/1287
+f 1282/758/1283 1287/760/1287 1280/766/1281
+f 1282/758/1283 1285/759/1285 1287/760/1287
+f 1253/764/1249 1291/785/1290 1252/763/1248
+f 1253/764/1249 1261/763/1256 1291/785/1290
+f 1292/786/1291 1291/785/1290 1261/763/1256
+f 1292/786/1291 1261/763/1256 1263/771/1258
+f 1292/786/1291 1263/771/1258 971/787/1292
+f 1265/773/1260 971/787/1292 1263/771/1258
+f 971/787/1292 1265/773/1260 972/787/1293
+f 1212/788/1294 972/787/1293 1265/773/1260
+f 1264/772/1259 1212/788/1294 1265/773/1260
+f 1212/788/1294 1264/772/1259 1213/789/1295
+f 1264/772/1259 1286/784/1286 1213/789/1295
+f 1214/790/1296 1213/789/1295 1286/784/1286
+f 1293/791/1297 1245/756/1241 1246/757/1242
+f 1293/791/1297 1246/757/1242 1294/784/1298
+f 1246/757/1242 1248/759/1244 1294/784/1298
+f 1295/792/1299 1294/784/1298 1248/759/1244
+f 1248/759/1244 1250/761/1246 1295/792/1299
+f 1296/771/1300 1295/792/1299 1250/761/1246
+f 1250/761/1246 1252/763/1248 1296/771/1300
+f 1297/786/1301 1296/771/1300 1252/763/1248
+f 1297/786/1301 1252/763/1248 1291/785/1290
+f 1291/785/1290 969/793/1302 1297/786/1301
+f 1291/785/1290 1292/786/1291 969/793/1302
+f 973/794/1303 969/793/1302 1292/786/1291
+f 1292/786/1291 971/787/1292 973/794/1303
+f 1298/773/1304 1295/792/1299 1296/771/1300
+f 1299/795/1305 1293/791/1297 1300/790/1306
+f 1294/784/1298 1300/790/1306 1293/791/1297
+f 1300/790/1306 1294/784/1298 1301/789/1307
+f 1295/792/1299 1301/789/1307 1294/784/1298
+f 1295/792/1299 1198/788/1308 1301/789/1307
+f 1198/788/1308 1295/792/1299 1298/773/1304
+f 1198/788/1308 1298/773/1304 966/787/1309
+f 967/796/1310 966/787/1309 1298/773/1304
+f 1298/773/1304 1296/771/1300 967/796/1310
+f 1297/786/1301 967/796/1310 1296/771/1300
+f 967/796/1310 1297/786/1301 968/794/1311
+f 968/794/1311 1297/786/1301 969/793/1302
+f 1268/776/1312 1272/778/1313 1269/777/1314
+f 705/782/1315 1269/777/1314 1272/778/1313
+f 705/782/1315 1273/778/1316 1269/777/1314
+f 1270/776/1317 1269/777/1314 1273/778/1316
+f 1235/746/1318 1234/745/1319 1267/775/1320
+f 700/779/1321 1267/775/1320 1234/745/1319
+f 700/779/1321 1272/778/1313 1267/775/1320
+f 1273/778/1316 711/779/1322 1290/775/1323
+f 711/779/1322 1274/745/1324 1290/775/1323
+f 1276/746/1325 1290/775/1323 1274/745/1324
+f 1120/653/1102 1105/635/1085 1104/634/1084
+f 1104/634/1084 1118/648/1097 1120/653/1102
+f 1192/699/1326 1302/797/1327 1194/701/897
+f 1303/798/649 1194/701/897 1302/797/1327
+f 1302/797/1327 1304/799/1328 1303/798/649
+f 1305/800/1329 1303/798/649 1304/799/1328
+f 1303/798/649 1305/800/1329 1306/801/1330
+f 1307/802/1331 1306/801/1330 1305/800/1329
+f 1306/801/1330 1307/802/1331 1308/803/1332
+f 1308/803/1332 1307/802/1331 1301/804/1333
+f 1301/804/1333 1198/705/1334 1308/803/1332
+f 1197/703/1335 1308/803/1332 1198/705/1334
+f 1197/703/1335 1195/702/1336 1308/803/1332
+f 1306/801/1330 1308/803/1332 1195/702/1336
+f 1195/702/1336 1194/701/897 1306/801/1330
+f 1303/798/649 1306/801/1330 1194/701/897
+f 1299/805/1337 1300/806/1338 1307/802/1331
+f 1307/802/1331 1300/806/1338 1301/804/1333
+f 1304/799/1328 1302/797/1327 1309/807/1339
+f 1310/808/1340 1309/807/1339 1302/797/1327
+f 1302/797/1327 1192/699/1326 1310/808/1340
+f 1191/697/1341 1310/808/1340 1192/699/1326
+f 1310/808/1340 1191/697/1341 1311/809/1342
+f 1190/695/1343 1311/809/1342 1191/697/1341
+f 1311/809/1342 1190/695/1343 1312/810/1344
+f 1189/693/1345 1312/810/1344 1190/695/1343
+f 1312/810/1344 1313/811/1346 1311/809/1342
+f 1314/812/1346 1311/809/1342 1313/811/1346
+f 1311/809/1342 1314/812/1346 1310/808/1340
+f 1309/807/1339 1310/808/1340 1314/812/1346
+f 1315/813/1347 1316/402/1347 1215/725/1347
+f 1216/814/1347 1215/725/1347 1316/402/1347
+f 1317/723/1348 1318/724/1348 1319/415/1349
+f 1320/724/1350 1319/415/1349 1318/724/1348
+f 1319/415/1349 1320/724/1350 1321/725/1351
+f 1321/725/1351 1320/724/1350 1322/726/1352
+f 1320/724/1350 1323/409/1353 1322/726/1352
+f 1322/726/1352 1323/409/1353 1315/727/1354
+f 1316/405/1354 1315/727/1354 1323/409/1353
+f 1222/404/1355 1223/416/1355 1317/814/1355
+f 1318/725/1355 1317/814/1355 1223/416/1355
+f 1324/815/1356 1325/816/1356 1326/817/1357
+f 1327/818/1358 1326/817/1357 1325/816/1356
+f 1326/817/1357 1327/818/1358 1328/819/1359
+f 1329/820/1360 1328/819/1359 1327/818/1358
+f 1328/819/1359 1329/820/1360 1330/821/1361
+f 1331/822/1361 1330/821/1361 1329/820/1360
+f 1332/823/1362 1333/824/1363 1334/825/1362
+f 1335/826/1364 1334/825/1362 1333/824/1363
+f 1333/824/1363 1336/827/1365 1335/826/1364
+f 1337/828/1366 1335/826/1364 1336/827/1365
+f 1336/827/1365 1338/829/1367 1337/828/1366
+f 1339/830/1367 1337/828/1366 1338/829/1367
+f 1339/831/1368 1338/832/1368 1324/833/1368
+f 1325/834/1368 1324/833/1368 1338/832/1368
+f 1338/829/1369 1336/827/1369 1325/816/1369
+f 1327/818/1369 1325/816/1369 1336/827/1369
+f 1336/827/1369 1333/824/1369 1327/818/1369
+f 1329/820/1369 1327/818/1369 1333/824/1369
+f 1333/824/1369 1332/823/1369 1329/820/1369
+f 1331/822/1369 1329/820/1369 1332/823/1369
+f 1332/832/1370 1334/831/1370 1331/834/1370
+f 1330/833/1370 1331/834/1370 1334/831/1370
+f 1340/668/1154 1341/667/1167 1342/662/1165
+f 1342/662/1165 1343/660/1155 1340/668/1154
+f 1343/660/1155 1342/662/1165 1344/659/1166
+f 1344/659/1166 1345/657/1157 1343/660/1155
+f 1346/658/1156 1343/660/1155 1345/657/1157
+f 1345/657/1157 1347/663/1158 1346/658/1156
+f 1348/664/1159 1346/658/1156 1347/663/1158
+f 1347/663/1158 1349/657/1160 1348/664/1159
+f 1350/658/1161 1348/664/1159 1349/657/1160
+f 1349/657/1160 1351/659/1162 1350/658/1161
+f 1352/660/1163 1350/658/1161 1351/659/1162
+f 1351/659/1162 1353/661/1164 1352/660/1163
+f 1342/662/1165 1352/660/1163 1353/661/1164
+f 1353/661/1164 1344/659/1166 1342/662/1165
+f 1352/660/1163 1342/662/1165 1341/667/1167
+f 1341/667/1167 1354/666/1168 1352/660/1163
+f 1350/658/1161 1352/660/1163 1354/666/1168
+f 1354/666/1168 1355/665/1169 1350/658/1161
+f 1348/664/1159 1350/658/1161 1355/665/1169
+f 1355/665/1169 1356/666/1170 1348/664/1159
+f 1346/658/1156 1348/664/1159 1356/666/1170
+f 1356/666/1170 1357/667/1153 1346/658/1156
+f 1343/660/1155 1346/658/1156 1357/667/1153
+f 1357/667/1153 1340/668/1154 1343/660/1155
+f 1349/739/1229 1347/740/1229 1351/741/1229
+f 1347/740/1229 1344/742/1229 1351/741/1229
+f 1345/743/1229 1344/742/1229 1347/740/1229
+f 1351/741/1229 1344/742/1229 1353/744/1229
+f 1358/731/1119 1359/374/1371 1360/835/1372
+f 1361/392/1371 1360/835/1372 1359/374/1371
+f 1360/731/1373 1361/374/1374 1362/835/838
+f 1363/392/1375 1362/835/838 1361/374/1374
+f 1362/731/1376 1363/374/1377 1364/835/1376
+f 1365/392/1378 1364/835/1376 1363/374/1377
+f 1364/731/1379 1365/374/1380 1358/835/1379
+f 1359/392/1381 1358/835/1379 1365/374/1380
+f 1366/392/1382 1367/374/1382 1368/835/1383
+f 1369/731/1119 1368/835/1383 1367/374/1382
+f 1370/392/1384 1366/374/1384 1371/835/867
+f 1368/731/867 1371/835/867 1366/374/1384
+f 1372/392/1385 1370/374/1385 1373/835/1386
+f 1371/731/1376 1373/835/1386 1370/374/1385
+f 1367/392/1387 1372/374/1387 1369/835/1388
+f 1373/731/1389 1369/835/1388 1372/374/1387
+f 904/836/1390 917/837/1390 906/836/1390
+f 917/837/1390 898/836/1390 906/836/1390
+f 898/836/1390 902/836/1390 906/836/1390
+f 906/836/1390 902/836/1390 910/836/1390
+f 918/835/1390 826/731/1390 913/835/1390
+f 913/835/1390 826/731/1390 914/393/1390
+f 914/393/1390 826/731/1390 845/838/1390
+f 916/837/1390 914/393/1390 845/838/1390
+f 847/837/1390 916/837/1390 845/838/1390
+f 916/837/1390 847/837/1390 917/837/1390
+f 847/837/1390 898/836/1390 917/837/1390
+f 849/837/1390 898/836/1390 847/837/1390
+f 915/839/1390 914/393/1390 916/837/1390
+f 912/840/1390 913/835/1390 914/393/1390
+f 1374/550/1391 1375/841/1391 1376/550/1391
+f 1377/841/1391 1376/550/1391 1375/841/1391
+f 1376/415/1392 1377/724/1392 1378/416/1392
+f 1379/404/1392 1378/416/1392 1377/724/1392
+f 1378/416/1393 1379/404/1393 1380/727/1393
+f 1381/405/1393 1380/727/1393 1379/404/1393
+f 1382/415/1394 1383/724/1394 1384/725/1394
+f 1385/814/1394 1384/725/1394 1383/724/1394
+f 1384/725/1395 1385/814/1395 1374/727/1395
+f 1375/405/1395 1374/727/1395 1385/814/1395
+f 1377/842/1396 1375/842/1396 1379/726/1396
+f 1385/727/1396 1379/726/1396 1375/842/1396
+f 1385/727/1396 1383/405/1396 1379/726/1396
+f 1381/404/1396 1379/726/1396 1383/405/1396
+f 1380/404/1397 1382/405/1397 1378/726/1397
+f 1384/727/1397 1378/726/1397 1382/405/1397
+f 1384/727/1397 1374/842/1397 1378/726/1397
+f 1376/843/1397 1378/726/1397 1374/842/1397
+f 734/414/726 1386/431/1398 732/426/724
+f 1387/430/1399 732/426/724 1386/431/1398
+f 732/426/724 1387/430/1399 736/427/728
+f 1388/429/1400 736/427/728 1387/430/1399
+f 736/427/728 1388/429/1400 738/422/730
+f 741/428/733 738/422/730 1388/429/1400
+f 741/428/733 1388/429/1400 1389/844/1401
+f 741/428/733 1389/844/1401 742/429/734
+f 743/430/735 742/429/734 1389/844/1401
+f 1389/844/1401 1390/845/1402 743/430/735
+f 744/431/736 743/430/735 1390/845/1402
+f 744/431/736 1390/845/1402 745/432/737
+f 1391/846/1403 745/432/737 1390/845/1402
+f 1391/846/1403 773/450/765 745/432/737
+f 1391/846/1403 768/432/760 773/450/765
+f 767/447/759 773/450/765 768/432/760
+f 1387/430/1399 1389/844/1401 1388/429/1400
+f 1389/844/1401 1387/430/1399 1390/845/1402
+f 1386/431/1398 1390/845/1402 1387/430/1399
+f 1386/431/1398 768/432/760 1390/845/1402
+f 1386/431/1398 734/414/726 768/432/760
+f 1391/846/1403 1390/845/1402 768/432/760
+f 706/408/1404 721/417/1404 707/406/1404
+f 752/417/1404 706/408/1404 704/406/1404
+f 693/847/1405 695/848/1405 711/849/1405
+f 1274/850/1406 711/849/1406 695/848/1406
+f 858/851/1407 1392/852/1408 1150/853/1409
+f 858/851/1407 860/854/1410 1392/852/1408
+f 1393/855/1411 1392/852/1408 860/854/1410
+f 860/854/1410 870/856/1412 1393/855/1411
+f 1394/857/1413 1393/855/1411 870/856/1412
+f 1393/855/1411 1394/857/1413 1395/858/1205
+f 1396/859/1414 1395/858/1205 1394/857/1413
+f 1396/859/1414 1397/860/1415 1395/858/1205
+f 1398/861/1416 1395/858/1205 1397/860/1415
+f 1397/860/1415 1399/862/1417 1398/861/1416
+f 1400/863/1416 1398/861/1416 1399/862/1417
+f 1399/862/1417 1401/864/658 1400/863/1416
+f 1402/865/1418 1400/863/1416 1401/864/658
+f 1401/864/658 1161/866/1419 1402/865/1418
+f 1160/867/1420 1402/865/1418 1161/866/1419
+f 1402/865/1418 1160/867/1420 1157/868/1421
+f 1157/868/1421 1403/869/1422 1402/865/1418
+f 1403/869/1422 1157/868/1421 1156/870/1423
+f 1395/858/1205 1398/861/1416 1404/871/1424
+f 1405/872/1425 1404/871/1424 1398/861/1416
+f 1398/861/1416 1400/863/1416 1405/872/1425
+f 1403/869/1422 1405/872/1425 1400/863/1416
+f 1400/863/1416 1402/865/1418 1403/869/1422
+f 1156/870/1423 1154/873/1426 1403/869/1422
+f 1405/872/1425 1403/869/1422 1154/873/1426
+f 1154/873/1426 1152/874/1427 1405/872/1425
+f 1404/871/1424 1405/872/1425 1152/874/1427
+f 1152/874/1427 1150/853/1409 1404/871/1424
+f 1392/852/1408 1404/871/1424 1150/853/1409
+f 1404/871/1424 1392/852/1408 1395/858/1205
+f 1393/855/1411 1395/858/1205 1392/852/1408
+f 884/651/1428 1148/675/1428 872/875/1428
+f 1159/686/1428 872/875/1428 1148/675/1428
+f 949/555/1429 948/557/1430 1077/583/1431
+f 1406/876/1432 1077/583/1431 948/557/1430
+f 1406/876/1432 948/557/1430 1009/583/1433
+f 946/555/1434 1009/583/1433 948/557/1430
+f 1200/877/1435 1275/877/1435 695/878/1435
+f 1274/878/1436 695/878/1436 1275/877/1436
+f 870/856/1437 872/879/1437 1394/857/1437
+f 1159/857/1438 1394/857/1438 872/879/1438
+f 1011/830/1439 1013/829/1439 1010/880/1439
+f 1013/829/1439 1021/881/1439 1010/880/1439
+f 1017/882/1439 1021/881/1439 1013/829/1439
+f 1019/883/1439 1021/881/1439 1017/882/1439
+f 1015/884/1440 1017/882/1440 1013/829/1440
+f 1022/885/1441 1024/886/1441 1021/881/1441
+f 1024/886/1441 1068/887/1441 1021/881/1441
+f 1068/887/1441 1072/888/1441 1021/881/1441
+f 1070/889/1441 1072/888/1441 1068/887/1441
+f 1026/890/1441 1068/887/1441 1024/886/1441
+f 1021/881/1442 1072/888/1442 1010/880/1442
+f 1407/891/1443 1408/892/1444 1409/893/1445
+f 1407/891/1443 1409/893/1445 1110/866/1446
+f 1410/864/1447 1110/866/1446 1409/893/1445
+f 1410/864/1447 1411/865/1448 1110/866/1446
+f 1411/865/1448 1410/864/1447 1412/894/1449
+f 1412/894/1449 1413/869/1450 1411/865/1448
+f 1413/869/1450 1412/894/1449 1414/872/1451
+f 1414/872/1451 1115/873/1452 1413/869/1450
+f 1115/873/1452 1414/872/1451 1116/874/1453
+f 1415/871/1454 1116/874/1453 1414/872/1451
+f 1116/874/1453 1415/871/1454 1117/853/1455
+f 1416/852/1456 1117/853/1455 1415/871/1454
+f 1416/852/1456 836/851/1457 1117/853/1455
+f 836/851/1457 1416/852/1456 833/854/1458
+f 1417/855/1459 833/854/1458 1416/852/1456
+f 833/854/1458 1417/855/1459 832/856/1460
+f 1418/857/1461 832/856/1460 1417/855/1459
+f 1417/855/1459 1419/858/733 1418/857/1461
+f 1420/861/1462 1414/872/1451 1412/894/1449
+f 1414/872/1451 1420/861/1462 1415/871/1454
+f 1419/858/733 1415/871/1454 1420/861/1462
+f 1415/871/1454 1419/858/733 1416/852/1456
+f 1417/855/1459 1416/852/1456 1419/858/733
+f 1421/859/1302 1418/857/1461 1419/858/733
+f 1421/859/1302 1419/858/733 1422/860/1463
+f 1420/861/1462 1422/860/1463 1419/858/733
+f 1422/860/1463 1420/861/1462 1423/895/1464
+f 1412/894/1449 1423/895/1464 1420/861/1462
+f 1423/895/1464 1412/894/1449 1410/864/1447
+f 1114/870/1465 1413/869/1450 1115/873/1452
+f 1112/868/1466 1413/869/1450 1114/870/1465
+f 1112/868/1466 1411/865/1448 1413/869/1450
+f 1111/867/1467 1411/865/1448 1112/868/1466
+f 1111/867/1467 1110/866/1446 1411/865/1448
+f 1110/640/1090 1108/638/1088 1407/896/1468
+f 1408/897/1469 1407/896/1468 1108/638/1088
+f 991/692/1470 697/898/1470 1189/693/1470
+f 845/838/1390 826/731/1390 828/394/1390
+f 826/731/1390 827/899/1390 828/394/1390
+f 1007/900/766 1010/900/766 1073/901/766
+f 1072/901/766 1073/901/766 1010/900/766
+f 1234/902/1471 1189/903/1471 700/904/1471
+f 697/905/1472 700/904/1472 1189/903/1472
+f 1123/656/1473 1119/652/1473 838/875/1473
+f 840/651/1473 838/875/1473 1119/652/1473
+f 1424/906/1474 1425/907/1474 1426/908/1474
+f 1426/908/1475 1425/907/1475 1427/541/1475
+f 1425/907/1474 1428/909/1474 1427/541/1474
+f 1428/909/1475 1429/910/1475 1427/541/1475
+f 1313/911/1476 1312/912/1476 1238/913/1476
+f 1236/914/1476 1238/913/1476 1312/912/1476
+f 1234/914/1477 1236/914/1477 1189/912/1477
+f 1312/912/1478 1189/912/1478 1236/914/1478
+f 838/879/1479 832/856/1479 1123/857/1479
+f 1418/857/1480 1123/857/1480 832/856/1480
+f 1216/915/1442 1316/916/1442 1218/917/1442
+f 1323/918/1474 1320/919/1474 1316/916/1474
+f 1316/916/1475 1320/919/1475 1218/917/1475
+f 1223/920/1442 1221/921/1442 1318/922/1442
+f 1318/922/1439 1221/921/1439 1320/919/1439
+f 1320/919/1475 1221/921/1475 1218/917/1475
+f 1430/814/1481 1431/405/1481 1432/725/1481
+f 1433/406/1481 1432/725/1481 1431/405/1481
+f 1434/438/1482 1435/923/1482 1436/924/1482
+f 1437/925/1482 1436/924/1482 1435/923/1482
+f 1438/926/1483 1436/924/1483 1439/927/1483
+f 1437/925/1483 1439/927/1483 1436/924/1483
+f 1440/928/1484 1441/929/1484 1442/930/1484
+f 1441/929/1485 1438/926/1485 1442/930/1485
+f 1442/930/1485 1438/926/1485 1439/927/1485
+f 1007/931/1486 1443/931/1487 1006/931/1488
+f 1443/931/1487 1007/931/1486 1444/932/1489
+f 1073/932/1490 1444/932/1489 1007/931/1486
+f 1444/932/1489 1073/932/1490 1445/901/1491
+f 1075/901/1492 1445/901/1491 1073/932/1490
+f 1445/901/1491 1075/901/1492 1446/901/1493
+f 1077/901/1494 1446/901/1493 1075/901/1492
+f 1447/901/1495 1446/901/1493 1077/901/1494
+f 1406/901/1496 1447/901/1495 1077/901/1494
+f 1009/901/1497 1447/901/1495 1406/901/1496
+f 1447/901/1495 1009/901/1497 1448/931/1498
+f 1006/931/1488 1448/931/1498 1009/901/1497
+f 1448/931/1498 1006/931/1488 1443/931/1487
+f 1443/814/1499 1429/725/1499 1448/724/1499
+f 1428/415/1499 1448/724/1499 1429/725/1499
+f 1444/723/1500 1427/724/1500 1443/727/1500
+f 1429/405/1500 1443/727/1500 1427/724/1500
+f 1445/813/1501 1426/402/1501 1444/416/1501
+f 1427/404/1501 1444/416/1501 1426/402/1501
+f 1448/723/1502 1428/724/1502 1447/813/1503
+f 1425/402/1504 1447/813/1503 1428/724/1502
+f 1447/813/1503 1425/402/1504 1446/726/1505
+f 1424/404/1352 1446/726/1505 1425/402/1504
+f 1446/726/1505 1424/404/1352 1445/727/1506
+f 1426/409/1506 1445/727/1506 1424/404/1352
+f 706/408/1507 1219/417/1507 721/417/1508
+f 1219/417/1507 706/408/1507 1217/417/1509
+f 752/417/1510 1217/417/1509 706/408/1507
+f 1217/417/1509 752/417/1510 1215/419/1511
+f 753/419/1512 1215/419/1511 752/417/1510
+f 1215/419/1511 753/419/1512 1315/421/1513
+f 739/421/1514 1315/421/1513 753/419/1512
+f 1315/421/1513 739/421/1514 1322/423/1515
+f 740/423/1516 1322/423/1515 739/421/1514
+f 1322/423/1515 740/423/1516 1321/423/1517
+f 728/424/1517 1321/423/1517 740/423/1516
+f 1321/423/1517 728/424/1517 1319/423/1518
+f 727/423/1519 1319/423/1518 728/424/1517
+f 1319/423/1518 727/423/1519 1317/421/1520
+f 725/421/1521 1317/421/1520 727/423/1519
+f 1317/421/1520 725/421/1521 1222/419/1522
+f 723/419/1523 1222/419/1522 725/421/1521
+f 1222/419/1522 723/419/1523 1220/417/1524
+f 721/417/1508 1220/417/1524 723/419/1523
+f 1220/417/1524 721/417/1508 1219/417/1507
+f 1449/668/1154 1450/667/1167 1451/662/1165
+f 1451/662/1165 1452/660/1155 1449/668/1154
+f 1452/660/1155 1451/662/1165 1453/659/1166
+f 1453/659/1166 1454/657/1157 1452/660/1155
+f 1455/658/1156 1452/660/1155 1454/657/1157
+f 1454/657/1157 1456/663/1158 1455/658/1156
+f 1457/664/1159 1455/658/1156 1456/663/1158
+f 1456/663/1158 1458/657/1160 1457/664/1159
+f 1459/658/1161 1457/664/1159 1458/657/1160
+f 1458/657/1160 1460/659/1162 1459/658/1161
+f 1461/660/1163 1459/658/1161 1460/659/1162
+f 1460/659/1162 1462/661/1164 1461/660/1163
+f 1451/662/1165 1461/660/1163 1462/661/1164
+f 1462/661/1164 1453/659/1166 1451/662/1165
+f 1461/660/1163 1451/662/1165 1450/667/1167
+f 1450/667/1167 1463/666/1168 1461/660/1163
+f 1459/658/1161 1461/660/1163 1463/666/1168
+f 1463/666/1168 1464/665/1169 1459/658/1161
+f 1457/664/1159 1459/658/1161 1464/665/1169
+f 1464/665/1169 1465/666/1170 1457/664/1159
+f 1455/658/1156 1457/664/1159 1465/666/1170
+f 1465/666/1170 1466/667/1153 1455/658/1156
+f 1452/660/1155 1455/658/1156 1466/667/1153
+f 1466/667/1153 1449/668/1154 1452/660/1155
+f 1458/739/1229 1456/740/1229 1460/741/1229
+f 1456/740/1229 1453/742/1229 1460/741/1229
+f 1454/743/1229 1453/742/1229 1456/740/1229
+f 1460/741/1229 1453/742/1229 1462/744/1229
+f 1467/668/1154 1468/667/1167 1469/662/1165
+f 1469/662/1165 1470/660/1155 1467/668/1154
+f 1470/660/1155 1469/662/1165 1471/659/1166
+f 1471/659/1166 1472/657/1157 1470/660/1155
+f 1473/658/1156 1470/660/1155 1472/657/1157
+f 1472/657/1157 1474/663/1158 1473/658/1156
+f 1475/664/1159 1473/658/1156 1474/663/1158
+f 1474/663/1158 1476/657/1160 1475/664/1159
+f 1477/658/1161 1475/664/1159 1476/657/1160
+f 1476/657/1160 1478/659/1162 1477/658/1161
+f 1479/660/1163 1477/658/1161 1478/659/1162
+f 1478/659/1162 1480/661/1164 1479/660/1163
+f 1469/662/1165 1479/660/1163 1480/661/1164
+f 1480/661/1164 1471/659/1166 1469/662/1165
+f 1479/660/1163 1469/662/1165 1468/667/1167
+f 1468/667/1167 1481/666/1168 1479/660/1163
+f 1477/658/1161 1479/660/1163 1481/666/1168
+f 1481/666/1168 1482/665/1169 1477/658/1161
+f 1475/664/1159 1477/658/1161 1482/665/1169
+f 1482/665/1169 1483/666/1170 1475/664/1159
+f 1473/658/1156 1475/664/1159 1483/666/1170
+f 1483/666/1170 1484/667/1153 1473/658/1156
+f 1470/660/1155 1473/658/1156 1484/667/1153
+f 1484/667/1153 1467/668/1154 1470/660/1155
+f 1476/739/1229 1474/740/1229 1478/741/1229
+f 1474/740/1229 1471/742/1229 1478/741/1229
+f 1472/743/1229 1471/742/1229 1474/740/1229
+f 1478/741/1229 1471/742/1229 1480/744/1229
+f 1485/668/1154 1486/667/1167 1487/662/1165
+f 1487/662/1165 1488/660/1155 1485/668/1154
+f 1488/660/1155 1487/662/1165 1489/659/1166
+f 1489/659/1166 1490/657/1157 1488/660/1155
+f 1491/658/1156 1488/660/1155 1490/657/1157
+f 1490/657/1157 1492/663/1158 1491/658/1156
+f 1493/664/1159 1491/658/1156 1492/663/1158
+f 1492/663/1158 1494/657/1160 1493/664/1159
+f 1495/658/1161 1493/664/1159 1494/657/1160
+f 1494/657/1160 1496/659/1162 1495/658/1161
+f 1497/660/1163 1495/658/1161 1496/659/1162
+f 1496/659/1162 1498/661/1164 1497/660/1163
+f 1487/662/1165 1497/660/1163 1498/661/1164
+f 1498/661/1164 1489/659/1166 1487/662/1165
+f 1497/660/1163 1487/662/1165 1486/667/1167
+f 1486/667/1167 1499/666/1168 1497/660/1163
+f 1495/658/1161 1497/660/1163 1499/666/1168
+f 1499/666/1168 1500/665/1169 1495/658/1161
+f 1493/664/1159 1495/658/1161 1500/665/1169
+f 1500/665/1169 1501/666/1170 1493/664/1159
+f 1491/658/1156 1493/664/1159 1501/666/1170
+f 1501/666/1170 1502/667/1153 1491/658/1156
+f 1488/660/1155 1491/658/1156 1502/667/1153
+f 1502/667/1153 1485/668/1154 1488/660/1155
+f 1494/739/1229 1492/740/1229 1496/741/1229
+f 1492/740/1229 1489/742/1229 1496/741/1229
+f 1490/743/1229 1489/742/1229 1492/740/1229
+f 1496/741/1229 1489/742/1229 1498/744/1229
+f 1503/668/1154 1504/667/1167 1505/662/1165
+f 1505/662/1165 1506/660/1155 1503/668/1154
+f 1506/660/1155 1505/662/1165 1507/659/1166
+f 1507/659/1166 1508/657/1157 1506/660/1155
+f 1509/658/1156 1506/660/1155 1508/657/1157
+f 1508/657/1157 1510/663/1158 1509/658/1156
+f 1511/664/1159 1509/658/1156 1510/663/1158
+f 1510/663/1158 1512/657/1160 1511/664/1159
+f 1513/658/1161 1511/664/1159 1512/657/1160
+f 1512/657/1160 1514/659/1162 1513/658/1161
+f 1515/660/1163 1513/658/1161 1514/659/1162
+f 1514/659/1162 1516/661/1164 1515/660/1163
+f 1505/662/1165 1515/660/1163 1516/661/1164
+f 1516/661/1164 1507/659/1166 1505/662/1165
+f 1515/660/1163 1505/662/1165 1504/667/1167
+f 1504/667/1167 1517/666/1168 1515/660/1163
+f 1513/658/1161 1515/660/1163 1517/666/1168
+f 1517/666/1168 1518/665/1169 1513/658/1161
+f 1511/664/1159 1513/658/1161 1518/665/1169
+f 1518/665/1169 1519/666/1170 1511/664/1159
+f 1509/658/1156 1511/664/1159 1519/666/1170
+f 1519/666/1170 1520/667/1153 1509/658/1156
+f 1506/660/1155 1509/658/1156 1520/667/1153
+f 1520/667/1153 1503/668/1154 1506/660/1155
+f 1512/739/1229 1510/740/1229 1514/741/1229
+f 1510/740/1229 1507/742/1229 1514/741/1229
+f 1508/743/1229 1507/742/1229 1510/740/1229
+f 1514/741/1229 1507/742/1229 1516/744/1229
+f 1521/822/1525 1522/820/1526 1523/821/1525
+f 1524/819/1527 1523/821/1525 1522/820/1526
+f 1522/820/1526 1525/818/1528 1524/819/1527
+f 1526/817/1529 1524/819/1527 1525/818/1528
+f 1525/818/1528 1527/816/1530 1526/817/1529
+f 1528/815/1530 1526/817/1529 1527/816/1530
+f 1529/830/1531 1530/829/1531 1531/828/1532
+f 1532/827/1533 1531/828/1532 1530/829/1531
+f 1531/828/1532 1532/827/1533 1533/826/1534
+f 1534/824/1535 1533/826/1534 1532/827/1533
+f 1533/826/1534 1534/824/1535 1535/825/1536
+f 1536/823/1536 1535/825/1536 1534/824/1535
+f 1527/833/1537 1530/831/1537 1528/834/1537
+f 1529/832/1537 1528/834/1537 1530/831/1537
+f 1521/822/1538 1536/823/1538 1522/820/1538
+f 1534/824/1538 1522/820/1538 1536/823/1538
+f 1522/820/1538 1534/824/1538 1525/818/1538
+f 1532/827/1538 1525/818/1538 1534/824/1538
+f 1525/818/1538 1532/827/1538 1527/816/1538
+f 1530/829/1538 1527/816/1538 1532/827/1538
+f 1523/834/1539 1535/832/1539 1521/833/1539
+f 1536/831/1539 1521/833/1539 1535/832/1539
+f 1537/667/1121 1538/660/1112 1539/668/1120
+f 1540/662/1110 1539/668/1120 1538/660/1112
+f 1539/668/1120 1540/662/1110 1541/667/1119
+f 1542/660/1108 1541/667/1119 1540/662/1110
+f 1541/667/1119 1542/660/1108 1543/666/1118
+f 1544/658/1106 1543/666/1118 1542/660/1108
+f 1543/666/1118 1544/658/1106 1545/665/1117
+f 1546/664/1116 1545/665/1117 1544/658/1106
+f 1545/665/1117 1546/664/1116 1547/666/1122
+f 1548/658/1114 1547/666/1122 1546/664/1116
+f 1547/666/1122 1548/658/1114 1537/667/1121
+f 1538/660/1112 1537/667/1121 1548/658/1114
+f 1548/658/1114 1549/657/1113 1538/660/1112
+f 1550/659/1111 1538/660/1112 1549/657/1113
+f 1538/660/1112 1550/659/1111 1540/662/1110
+f 1551/661/1109 1540/662/1110 1550/659/1111
+f 1540/662/1110 1551/661/1109 1542/660/1108
+f 1552/659/1107 1542/660/1108 1551/661/1109
+f 1542/660/1108 1552/659/1107 1544/658/1106
+f 1553/657/1105 1544/658/1106 1552/659/1107
+f 1544/658/1106 1553/657/1105 1546/664/1116
+f 1554/663/1115 1546/664/1116 1553/657/1105
+f 1546/664/1116 1554/663/1115 1548/658/1114
+f 1549/657/1113 1548/658/1114 1554/663/1115
+f 1549/743/1230 1554/740/1230 1550/742/1230
+f 1554/740/1230 1552/741/1230 1550/742/1230
+f 1553/739/1230 1552/741/1230 1554/740/1230
+f 1550/742/1230 1552/741/1230 1551/744/1230
+f 1555/667/1121 1556/660/1112 1557/668/1120
+f 1558/662/1110 1557/668/1120 1556/660/1112
+f 1557/668/1120 1558/662/1110 1559/667/1119
+f 1560/660/1108 1559/667/1119 1558/662/1110
+f 1559/667/1119 1560/660/1108 1561/666/1118
+f 1562/658/1106 1561/666/1118 1560/660/1108
+f 1561/666/1118 1562/658/1106 1563/665/1117
+f 1564/664/1116 1563/665/1117 1562/658/1106
+f 1563/665/1117 1564/664/1116 1565/666/1122
+f 1566/658/1114 1565/666/1122 1564/664/1116
+f 1565/666/1122 1566/658/1114 1555/667/1121
+f 1556/660/1112 1555/667/1121 1566/658/1114
+f 1566/658/1114 1567/657/1113 1556/660/1112
+f 1568/659/1111 1556/660/1112 1567/657/1113
+f 1556/660/1112 1568/659/1111 1558/662/1110
+f 1569/661/1109 1558/662/1110 1568/659/1111
+f 1558/662/1110 1569/661/1109 1560/660/1108
+f 1570/659/1107 1560/660/1108 1569/661/1109
+f 1560/660/1108 1570/659/1107 1562/658/1106
+f 1571/657/1105 1562/658/1106 1570/659/1107
+f 1562/658/1106 1571/657/1105 1564/664/1116
+f 1572/663/1115 1564/664/1116 1571/657/1105
+f 1564/664/1116 1572/663/1115 1566/658/1114
+f 1567/657/1113 1566/658/1114 1572/663/1115
+f 1567/743/1230 1572/740/1230 1568/742/1230
+f 1572/740/1230 1570/741/1230 1568/742/1230
+f 1571/739/1230 1570/741/1230 1572/740/1230
+f 1568/742/1230 1570/741/1230 1569/744/1230
+f 1573/667/1121 1574/660/1112 1575/668/1120
+f 1576/662/1110 1575/668/1120 1574/660/1112
+f 1575/668/1120 1576/662/1110 1577/667/1119
+f 1578/660/1108 1577/667/1119 1576/662/1110
+f 1577/667/1119 1578/660/1108 1579/666/1118
+f 1580/658/1106 1579/666/1118 1578/660/1108
+f 1579/666/1118 1580/658/1106 1581/665/1117
+f 1582/664/1116 1581/665/1117 1580/658/1106
+f 1581/665/1117 1582/664/1116 1583/666/1122
+f 1584/658/1114 1583/666/1122 1582/664/1116
+f 1583/666/1122 1584/658/1114 1573/667/1121
+f 1574/660/1112 1573/667/1121 1584/658/1114
+f 1584/658/1114 1585/657/1113 1574/660/1112
+f 1586/659/1111 1574/660/1112 1585/657/1113
+f 1574/660/1112 1586/659/1111 1576/662/1110
+f 1587/661/1109 1576/662/1110 1586/659/1111
+f 1576/662/1110 1587/661/1109 1578/660/1108
+f 1588/659/1107 1578/660/1108 1587/661/1109
+f 1578/660/1108 1588/659/1107 1580/658/1106
+f 1589/657/1105 1580/658/1106 1588/659/1107
+f 1580/658/1106 1589/657/1105 1582/664/1116
+f 1590/663/1115 1582/664/1116 1589/657/1105
+f 1582/664/1116 1590/663/1115 1584/658/1114
+f 1585/657/1113 1584/658/1114 1590/663/1115
+f 1585/743/1230 1590/740/1230 1586/742/1230
+f 1590/740/1230 1588/741/1230 1586/742/1230
+f 1589/739/1230 1588/741/1230 1590/740/1230
+f 1586/742/1230 1588/741/1230 1587/744/1230
+f 1591/667/1121 1592/660/1112 1593/668/1120
+f 1594/662/1110 1593/668/1120 1592/660/1112
+f 1593/668/1120 1594/662/1110 1595/667/1119
+f 1596/660/1108 1595/667/1119 1594/662/1110
+f 1595/667/1119 1596/660/1108 1597/666/1118
+f 1598/658/1106 1597/666/1118 1596/660/1108
+f 1597/666/1118 1598/658/1106 1599/665/1117
+f 1600/664/1116 1599/665/1117 1598/658/1106
+f 1599/665/1117 1600/664/1116 1601/666/1122
+f 1602/658/1114 1601/666/1122 1600/664/1116
+f 1601/666/1122 1602/658/1114 1591/667/1121
+f 1592/660/1112 1591/667/1121 1602/658/1114
+f 1602/658/1114 1603/657/1113 1592/660/1112
+f 1604/659/1111 1592/660/1112 1603/657/1113
+f 1592/660/1112 1604/659/1111 1594/662/1110
+f 1605/661/1109 1594/662/1110 1604/659/1111
+f 1594/662/1110 1605/661/1109 1596/660/1108
+f 1606/659/1107 1596/660/1108 1605/661/1109
+f 1596/660/1108 1606/659/1107 1598/658/1106
+f 1607/657/1105 1598/658/1106 1606/659/1107
+f 1598/658/1106 1607/657/1105 1600/664/1116
+f 1608/663/1115 1600/664/1116 1607/657/1105
+f 1600/664/1116 1608/663/1115 1602/658/1114
+f 1603/657/1113 1602/658/1114 1608/663/1115
+f 1603/743/1230 1608/740/1230 1604/742/1230
+f 1608/740/1230 1606/741/1230 1604/742/1230
+f 1607/739/1230 1606/741/1230 1608/740/1230
+f 1604/742/1230 1606/741/1230 1605/744/1230
+f 1609/667/1121 1610/660/1112 1611/668/1120
+f 1612/662/1110 1611/668/1120 1610/660/1112
+f 1611/668/1120 1612/662/1110 1613/667/1119
+f 1614/660/1108 1613/667/1119 1612/662/1110
+f 1613/667/1119 1614/660/1108 1615/666/1118
+f 1616/658/1106 1615/666/1118 1614/660/1108
+f 1615/666/1118 1616/658/1106 1617/665/1117
+f 1618/664/1116 1617/665/1117 1616/658/1106
+f 1617/665/1117 1618/664/1116 1619/666/1122
+f 1620/658/1114 1619/666/1122 1618/664/1116
+f 1619/666/1122 1620/658/1114 1609/667/1121
+f 1610/660/1112 1609/667/1121 1620/658/1114
+f 1620/658/1114 1621/657/1113 1610/660/1112
+f 1622/659/1111 1610/660/1112 1621/657/1113
+f 1610/660/1112 1622/659/1111 1612/662/1110
+f 1623/661/1109 1612/662/1110 1622/659/1111
+f 1612/662/1110 1623/661/1109 1614/660/1108
+f 1624/659/1107 1614/660/1108 1623/661/1109
+f 1614/660/1108 1624/659/1107 1616/658/1106
+f 1625/657/1105 1616/658/1106 1624/659/1107
+f 1616/658/1106 1625/657/1105 1618/664/1116
+f 1626/663/1115 1618/664/1116 1625/657/1105
+f 1618/664/1116 1626/663/1115 1620/658/1114
+f 1621/657/1113 1620/658/1114 1626/663/1115
+f 1621/743/1230 1626/740/1230 1622/742/1230
+f 1626/740/1230 1624/741/1230 1622/742/1230
+f 1625/739/1230 1624/741/1230 1626/740/1230
+f 1622/742/1230 1624/741/1230 1623/744/1230
+f 1102/620/1540 1627/933/1540 1055/621/1540
+f 1628/933/1541 1055/621/1541 1627/933/1541
+f 1101/619/1542 1629/933/1542 1102/620/1542
+f 1627/933/1543 1102/620/1543 1629/933/1543
+f 998/572/1544 1630/933/1544 1101/619/1544
+f 1629/933/1545 1101/619/1545 1630/933/1545
+f 997/571/1546 1631/933/1546 998/572/1546
+f 1630/933/1547 998/572/1547 1631/933/1547
+f 996/570/1548 1632/934/1548 997/571/1548
+f 1631/933/1549 997/571/1549 1632/934/1549
+f 923/534/1550 1633/934/1550 996/570/1550
+f 1632/934/1551 996/570/1551 1633/934/1551
+f 921/532/1552 1634/934/1552 923/534/1552
+f 1633/934/1553 923/534/1553 1634/934/1553
+f 919/530/1554 1635/935/1554 921/532/1554
+f 1634/934/1552 921/532/1552 1635/935/1552
+f 792/466/1555 1636/935/1555 919/530/1555
+f 1635/935/1556 919/530/1556 1636/935/1556
+f 793/467/1557 1637/935/1557 792/466/1557
+f 1636/935/1558 792/466/1558 1637/935/1558
+f 756/437/1559 1638/935/1559 793/467/1559
+f 1637/935/1560 793/467/1560 1638/935/1560
+f 983/569/1561 1639/935/1561 756/437/1561
+f 1638/935/1562 756/437/1562 1639/935/1562
+f 982/437/1563 1640/935/1563 983/569/1563
+f 1639/935/1564 983/569/1564 1640/935/1564
+f 981/467/1066 1641/935/1066 982/437/1066
+f 1640/935/1565 982/437/1565 1641/935/1565
+f 979/466/1566 1642/935/1566 981/467/1566
+f 1641/935/1567 981/467/1567 1642/935/1567
+f 977/530/1568 1643/935/1568 979/466/1568
+f 1642/935/1569 979/466/1569 1643/935/1569
+f 975/532/1570 1644/934/1570 977/530/1570
+f 1643/935/1571 977/530/1571 1644/934/1571
+f 963/534/1572 1645/934/1572 975/532/1572
+f 1644/934/1573 975/532/1573 1645/934/1573
+f 1067/570/1574 1646/934/1574 963/534/1574
+f 1645/934/1575 963/534/1575 1646/934/1575
+f 1066/571/1576 1647/933/1576 1067/570/1576
+f 1646/934/1577 1067/570/1577 1647/933/1577
+f 1064/572/1578 1648/933/1578 1066/571/1578
+f 1647/933/1579 1066/571/1579 1648/933/1579
+f 1053/619/1580 1649/933/1580 1064/572/1580
+f 1648/933/1581 1064/572/1581 1649/933/1581
+f 1054/620/1582 1650/933/1582 1053/619/1582
+f 1649/933/1583 1053/619/1583 1650/933/1583
+f 1055/621/1584 1628/933/1584 1054/620/1584
+f 1650/933/1585 1054/620/1585 1628/933/1585
+f 1627/936/1586 1441/937/1586 1628/938/1586
+f 1440/938/1587 1628/938/1587 1441/937/1587
+f 1629/937/1588 1441/937/1588 1627/936/1588
+f 1630/939/1589 1438/940/1589 1629/937/1589
+f 1441/937/1590 1629/937/1590 1438/940/1590
+f 1631/939/1591 1438/940/1591 1630/939/1591
+f 1632/941/1592 1436/942/1592 1631/943/1592
+f 1438/944/1593 1631/943/1593 1436/942/1593
+f 1633/945/1594 1434/946/1594 1632/941/1594
+f 1436/942/1595 1632/941/1595 1434/946/1595
+f 1634/947/961 1651/948/961 1633/945/961
+f 1434/946/961 1633/945/961 1651/948/961
+f 1635/949/1596 1430/950/1596 1634/947/1596
+f 1651/948/1597 1634/947/1597 1430/950/1597
+f 1431/951/1598 1430/950/1598 1635/949/1598
+f 1642/939/1599 1433/952/1599 1641/936/1599
+f 1641/936/1600 1433/952/1600 1640/953/1600
+f 1640/953/1601 1433/952/1601 1639/954/1601
+f 1639/954/1602 1433/952/1602 1638/955/1602
+f 1638/955/1603 1433/952/1603 1637/947/1603
+f 1433/952/1604 1431/956/1604 1637/947/1604
+f 1637/947/1605 1431/956/1605 1636/957/1605
+f 1643/958/1606 1433/952/1606 1642/939/1606
+f 1644/947/1607 1652/948/1607 1643/949/1607
+f 1432/950/1608 1643/949/1608 1652/948/1608
+f 1645/959/1609 1435/946/1609 1644/947/1609
+f 1652/948/1609 1644/947/1609 1435/946/1609
+f 1646/941/1610 1437/942/1610 1645/959/1610
+f 1435/946/1611 1645/959/1611 1437/942/1611
+f 1647/943/1612 1439/944/1612 1646/941/1612
+f 1437/942/1613 1646/941/1613 1439/944/1613
+f 1648/960/1614 1439/961/1614 1647/960/1614
+f 1649/960/1615 1442/957/1615 1648/960/1615
+f 1439/961/1616 1648/960/1616 1442/957/1616
+f 1650/962/1617 1442/957/1617 1649/960/1617
+f 1628/938/1618 1440/938/1618 1650/962/1618
+f 1442/957/1619 1650/962/1619 1440/938/1619
+f 1435/723/1620 1434/963/1620 1652/415/1620
+f 1434/963/1620 1651/724/1620 1652/415/1620
+f 1651/724/1621 1430/814/1621 1652/415/1621
+f 1652/415/1621 1430/814/1621 1432/725/1621
+f 1653/964/1622 1654/965/1622 1655/966/1622
+f 1656/967/1622 1655/966/1622 1654/965/1622
+f 1657/968/1028 1658/969/1028 1653/964/1028
+f 1654/965/1028 1653/964/1028 1658/969/1028
+f 1659/970/1623 1660/971/1623 1657/968/1623
+f 1658/969/1623 1657/968/1623 1660/971/1623
+f 1655/966/1624 1656/967/1624 1661/878/1624
+f 1662/905/1624 1661/878/1624 1656/967/1624
+f 1655/972/1625 1661/973/1626 1653/974/1627
+f 1663/975/1628 1653/974/1627 1661/973/1626
+f 1664/975/1629 1662/973/1630 1654/974/1631
+f 1656/972/1632 1654/974/1631 1662/973/1630
+f 1664/976/1633 1663/977/1633 1662/967/1633
+f 1661/966/1633 1662/967/1633 1663/977/1633
+f 1432/950/1634 1433/958/1634 1643/949/1634
+f 1636/957/1635 1431/956/1635 1635/978/1635
+f 1410/979/1636 1409/980/1636 1108/979/1636
+f 1408/850/1637 1108/979/1637 1409/980/1637
+f 1122/981/1638 1121/982/1638 1107/983/1638
+f 1123/912/1639 1418/914/1639 1121/982/1639
+f 1421/984/1640 1422/985/1640 1418/914/1640
+f 1418/914/1641 1422/985/1641 1121/982/1641
+f 1423/986/1642 1410/878/1642 1422/985/1642
+f 1422/985/1643 1410/878/1643 1121/982/1643
+f 1121/982/1644 1410/878/1644 1107/983/1644
+f 1107/983/1645 1410/878/1645 1108/987/1645
+f 1145/985/1646 1143/984/1646 1147/988/1646
+f 1162/914/1647 1401/914/1647 1143/984/1647
+f 1399/989/1648 1397/990/1648 1401/914/1648
+f 1401/914/1649 1397/990/1649 1143/984/1649
+f 1143/984/1650 1397/990/1650 1147/988/1650
+f 1397/990/1651 1394/850/1651 1147/988/1651
+f 1147/988/1652 1394/850/1652 1159/877/1652
+f 1162/849/1653 1164/991/1653 1401/848/1653
+f 1230/731/1654 1228/374/1655 1665/731/1654
+f 1666/374/1656 1665/731/1654 1228/374/1655
+f 1228/374/1655 1225/391/1657 1666/374/1656
+f 1667/391/1658 1666/374/1656 1225/391/1657
+f 1225/391/1657 1224/730/1659 1667/391/1658
+f 1668/730/1659 1667/391/1658 1224/730/1659
+f 1665/731/611 1666/374/614 1669/731/611
+f 1670/374/614 1669/731/611 1666/374/614
+f 1666/374/614 1667/391/612 1670/374/614
+f 1671/391/612 1670/374/614 1667/391/612
+f 1667/391/612 1668/730/611 1671/391/612
+f 1672/730/611 1671/391/612 1668/730/611
+f 1669/731/1660 1670/374/1661 1231/731/1660
+f 1229/374/1662 1231/731/1660 1670/374/1661
+f 1670/374/1661 1671/391/1663 1229/374/1662
+f 1227/391/1664 1229/374/1662 1671/391/1663
+f 1671/391/1663 1672/730/1665 1227/391/1664
+f 1226/730/1665 1227/391/1664 1672/730/1665
+f 1201/992/1149 1277/993/1149 1200/994/1149
+f 1275/995/1666 1200/994/1666 1277/993/1666
+f 1203/996/1667 1279/997/1667 1201/992/1667
+f 1277/993/1668 1201/992/1668 1279/997/1668
+f 1281/998/1669 1279/997/1669 1205/999/1669
+f 1203/996/1670 1205/999/1670 1279/997/1670
+f 1207/1000/1671 1283/1001/1671 1205/999/1671
+f 1281/998/1672 1205/999/1672 1283/1001/1672
+f 1208/1002/913 1284/1003/913 1207/1000/913
+f 1283/1001/1673 1207/1000/1673 1284/1003/1673
+f 1214/1004/1674 1286/1005/1674 1208/1002/1674
+f 1286/1005/1675 1284/1003/1675 1208/1002/1675
+f 1307/1006/1676 1293/1002/1676 1299/1007/1676
+f 1238/1008/1677 1239/1009/1677 1313/994/1677
+f 1314/1010/1678 1313/994/1678 1239/1009/1678
+f 1239/1009/1679 1241/996/1679 1314/1010/1679
+f 1309/1011/1680 1314/1010/1680 1241/996/1680
+f 1241/996/1681 1243/999/1681 1309/1011/1681
+f 1304/1012/1682 1309/1011/1682 1243/999/1682
+f 1304/1012/1683 1243/999/1683 1305/1013/1683
+f 1245/1000/1684 1305/1013/1684 1243/999/1684
+f 1245/1000/1685 1293/1002/1685 1305/1013/1685
+f 1307/1006/1686 1305/1013/1686 1293/1002/1686
+f 1673/417/1687 1674/1014/1687 1675/417/1688
+f 1676/1014/1689 1675/417/1688 1674/1014/1687
+f 1675/417/1688 1676/1014/1689 1677/417/1690
+f 1678/1014/1690 1677/417/1690 1676/1014/1689
+f 1677/417/1691 1678/1014/1691 1679/417/1692
+f 1680/1014/1693 1679/417/1692 1678/1014/1691
+f 1679/417/1692 1680/1014/1693 1673/417/1694
+f 1674/1014/1694 1673/417/1694 1680/1014/1693
+f 1674/726/1695 1680/726/1695 1676/727/1695
+f 1678/727/1695 1676/727/1695 1680/726/1695
+f 1164/892/1696 1163/891/1697 1681/893/1698
+f 1163/891/1697 1161/866/1419 1681/893/1698
+f 1401/864/658 1681/893/1698 1161/866/1419
+# 1961 faces
+
+#
+# object P_51_Mustang_Right_Wing_Flap
+#
+
+v -4.86 -0.53 -0.60
+v -4.41 -0.27 3.38
+v -4.43 -0.76 3.40
+v -29.11 -0.39 3.17
+v -28.77 -0.08 6.47
+v -28.79 -0.68 6.50
+# 6 vertices
+
+vn 0.99 -0.05 -0.11
+vn -0.01 1.00 -0.09
+vn -0.00 1.00 -0.07
+vn -0.00 1.00 -0.06
+vn 0.13 0.05 0.99
+vn 0.13 0.03 0.99
+vn -0.01 -1.00 -0.09
+vn -0.01 -1.00 -0.08
+vn -0.01 -1.00 -0.06
+vn -0.99 0.05 0.10
+# 10 vertex normals
+
+vt 0.29 0.02 0.00
+vt 0.23 0.01 0.00
+vt 0.23 0.02 0.00
+vt 0.71 0.15 0.00
+vt 0.71 0.21 0.00
+vt 0.39 0.10 0.00
+vt 0.38 0.16 0.00
+vt 0.23 0.00 0.00
+vt 0.46 0.00 0.00
+vt 0.46 0.01 0.00
+vt 0.05 0.31 0.00
+vt 0.01 0.31 0.00
+vt 0.06 0.05 0.00
+vt 0.01 0.04 0.00
+vt 0.33 0.02 0.00
+vt 0.28 0.01 0.00
+vt 0.33 0.01 0.00
+# 17 texture coords
+
+g P_51_Mustang_Right_Wing_Flap
+f 1682/1015/1699 1683/1016/1699 1684/1017/1699
+f 1685/1018/1700 1686/1019/1700 1682/1020/1701
+f 1683/1021/1702 1682/1020/1701 1686/1019/1700
+f 1686/1022/1703 1687/1016/1703 1683/1023/1704
+f 1684/1024/1704 1683/1023/1704 1687/1016/1703
+f 1687/1025/1705 1685/1026/1706 1684/1027/1707
+f 1682/1028/1707 1684/1027/1707 1685/1026/1706
+f 1686/1029/1708 1685/1030/1708 1687/1031/1708
+# 8 faces
+
+#
+# object P_51_Mustang_Left_Wing
+#
+
+v 21.73 -0.34 5.07
+v 29.47 -0.26 5.88
+v 29.43 -1.11 5.94
+v 13.89 -0.70 20.02
+v 13.32 0.44 17.79
+v 8.22 -0.70 21.64
+v 6.69 0.53 18.92
+v 13.59 0.59 15.01
+v 6.67 0.70 16.38
+v 13.51 0.45 11.97
+v 6.64 0.56 12.08
+v 12.99 0.26 8.88
+v 6.75 0.38 9.22
+v 12.85 -0.11 6.05
+v 18.46 -0.07 6.17
+v 18.38 -0.30 4.71
+v 18.77 0.27 8.57
+v 22.48 0.10 8.18
+v 18.54 0.45 12.11
+v 22.26 0.41 12.21
+v 18.69 0.44 14.67
+v 22.30 0.37 14.75
+v 19.28 -0.74 18.90
+v 18.83 0.28 17.17
+v 22.46 0.18 16.71
+v 23.13 -0.75 18.50
+v 30.30 -0.03 16.07
+v 30.77 -0.79 17.69
+v 29.80 0.01 8.15
+v 29.00 0.22 12.29
+v 29.20 0.27 14.36
+v 6.63 -2.09 14.77
+v 13.47 -1.97 15.15
+v 6.91 -1.78 18.50
+v 13.40 -1.81 12.10
+v 18.43 -1.86 12.23
+v 18.67 -1.64 8.68
+v 22.40 -1.51 8.27
+v 21.69 -1.11 5.12
+v 29.73 -1.49 8.23
+v 28.90 -1.73 12.40
+v 22.15 -1.85 12.34
+v 22.20 -1.84 14.87
+v 18.58 -1.87 14.79
+v 18.75 -1.79 16.77
+v 13.22 -1.77 17.34
+v 7.17 -1.73 19.64
+v 22.37 -1.71 16.82
+v 30.16 -1.61 16.17
+v 29.10 -1.79 14.47
+v 18.09 -0.19 18.03
+v 18.07 -0.12 19.96
+v 18.47 -0.42 18.05
+v 17.66 -0.35 19.98
+v 17.68 -0.41 18.05
+v 17.64 -0.81 20.03
+v 17.66 -0.87 18.10
+v 18.02 -1.05 20.04
+v 18.04 -1.11 18.11
+v 18.43 -0.82 20.02
+v 18.45 -0.88 18.09
+v 18.45 -0.36 19.98
+v 19.42 -0.43 17.94
+v 19.40 -0.37 19.87
+v 19.82 -0.20 17.92
+v 19.37 -0.83 19.91
+v 19.40 -0.89 17.98
+v 19.76 -1.06 19.93
+v 19.78 -1.12 18.00
+v 20.16 -0.83 19.90
+v 20.18 -0.90 17.98
+v 20.18 -0.37 19.86
+v 20.20 -0.44 17.93
+v 19.80 -0.14 19.84
+v 21.31 -0.91 17.79
+v 21.29 -0.85 19.72
+v 21.33 -0.45 17.75
+v 21.67 -1.08 19.74
+v 21.69 -1.15 17.81
+v 22.07 -0.85 19.71
+v 22.09 -0.92 17.79
+v 22.09 -0.39 19.67
+v 22.12 -0.46 17.74
+v 21.71 -0.16 19.65
+v 21.73 -0.22 17.73
+v 21.31 -0.39 19.68
+v 6.36 -1.85 12.28
+v 12.90 -1.58 8.99
+v 18.40 -1.29 6.24
+v 18.34 -1.03 4.76
+v 12.79 -1.19 6.11
+v 12.60 -0.96 4.14
+v 6.61 -1.24 6.37
+v 6.45 -0.95 3.49
+v 6.61 -1.63 9.28
+v 6.54 -0.19 3.45
+v 12.64 -0.25 4.10
+v 6.70 0.02 6.36
+v 25.72 -2.97 15.17
+v 26.04 -2.97 15.16
+v 25.78 -1.70 14.94
+v 26.10 -1.70 14.93
+v 25.71 -3.12 14.67
+v 26.03 -3.12 14.66
+v 26.02 -3.16 10.99
+v 25.71 -3.16 10.99
+v 25.78 -1.72 9.85
+v 26.09 -1.72 9.85
+v 49.14 -0.79 5.08
+v 48.24 -0.91 6.93
+v 48.25 -0.61 6.89
+v 48.48 -0.39 13.06
+v 45.09 -0.22 13.27
+v 48.37 -0.52 14.30
+v 49.79 -0.70 13.22
+v 49.65 -0.81 14.45
+v 50.18 -0.86 13.17
+v 49.94 -0.86 14.46
+v 49.46 -0.86 15.18
+v 48.14 -0.86 15.82
+v 45.11 -0.50 14.61
+v 44.86 -0.85 16.21
+v 37.77 -0.27 15.37
+v 37.66 -0.83 16.94
+v 37.87 0.03 13.78
+v 37.92 0.07 11.77
+v 37.54 -0.12 8.23
+v 44.74 -0.34 7.95
+v 44.69 -0.53 6.74
+v 47.69 -0.50 8.05
+v 49.33 -0.63 7.63
+v 49.65 -0.83 7.70
+v 49.74 -0.63 11.09
+v 50.12 -0.85 11.07
+v 48.01 -0.49 11.12
+v 44.83 -0.18 11.19
+v 37.83 -1.66 11.86
+v 44.77 -1.59 11.25
+v 37.86 -1.64 13.87
+v 37.71 -1.53 15.44
+v 44.80 -1.48 14.64
+v 48.34 -1.08 14.45
+v 44.94 -1.58 13.33
+v 48.44 -1.09 13.22
+v 47.98 -1.08 11.27
+v 49.72 -0.95 11.28
+v 49.21 -0.88 7.78
+v 47.66 -0.96 8.19
+v 44.69 -1.31 7.98
+v 44.66 -1.07 6.82
+v 37.47 -1.43 8.30
+v 37.60 -1.17 6.48
+v 49.77 -1.00 13.41
+v 49.64 -0.94 14.48
+v 37.65 -0.33 6.41
+v 29.53 -2.84 10.92
+v 29.47 -2.71 15.01
+v 29.60 -1.55 9.80
+v 29.51 -1.73 14.90
+v 29.69 -1.73 14.90
+v 29.64 -2.71 15.01
+v 29.78 -1.55 9.80
+v 29.70 -2.84 10.92
+v 32.08 -2.73 14.99
+v 32.26 -2.73 14.99
+v 32.13 -1.70 14.87
+v 32.31 -1.70 14.87
+v 32.14 -2.86 10.90
+v 32.32 -2.87 10.90
+v 32.22 -1.51 9.77
+v 32.40 -1.51 9.77
+v 34.83 -2.75 14.96
+v 35.01 -2.75 14.96
+v 34.88 -1.62 14.83
+v 35.06 -1.62 14.83
+v 34.89 -2.89 10.87
+v 35.07 -2.89 10.87
+v 34.97 -1.51 9.74
+v 35.15 -1.51 9.74
+v 25.90 -3.10 16.05
+v 25.99 -3.13 9.38
+v 24.57 -3.45 16.08
+v 27.29 -3.50 9.39
+v 27.20 -3.47 16.06
+v 28.21 -4.49 9.44
+v 28.12 -4.46 16.11
+v 28.50 -5.83 9.52
+v 28.41 -5.80 16.19
+v 28.08 -7.16 9.61
+v 28.00 -7.14 16.28
+v 27.07 -8.14 9.68
+v 26.98 -8.11 16.36
+v 25.73 -8.49 9.72
+v 25.65 -8.46 16.39
+v 24.43 -8.12 9.71
+v 24.35 -8.09 16.38
+v 23.51 -7.13 9.66
+v 23.43 -7.10 16.33
+v 23.22 -5.79 9.57
+v 23.14 -5.76 16.24
+v 23.64 -4.45 9.48
+v 23.56 -4.42 16.15
+v 24.65 -3.48 9.41
+v 25.98 -4.22 6.21
+v 25.18 -4.43 6.23
+v 24.57 -5.01 6.27
+v 24.32 -5.81 6.33
+v 24.50 -6.61 6.37
+v 25.04 -7.20 6.41
+v 25.82 -7.42 6.41
+v 26.62 -7.21 6.39
+v 27.23 -6.63 6.35
+v 27.48 -5.83 6.30
+v 25.96 -5.24 3.65
+v 25.66 -5.32 3.66
+v 27.30 -5.03 6.25
+v 26.75 -4.44 6.21
+v 26.25 -5.32 3.65
+v 25.93 -5.83 3.43
+v 25.44 -5.53 3.68
+v 25.35 -5.83 3.70
+v 25.41 -6.12 3.71
+v 25.62 -6.34 3.73
+v 25.90 -6.42 3.73
+v 26.20 -6.35 3.72
+v 26.42 -6.13 3.70
+v 26.52 -5.84 3.68
+v 26.45 -5.54 3.67
+v 23.60 -6.99 17.58
+v 23.33 -5.76 17.50
+v 23.72 -4.53 17.42
+v 24.65 -3.63 17.35
+v 25.88 -3.31 17.32
+v 27.08 -3.65 17.33
+v 27.92 -4.56 17.38
+v 28.19 -5.79 17.46
+v 27.80 -7.03 17.54
+v 26.87 -7.92 17.61
+v 23.89 -5.75 19.06
+v 24.18 -4.81 19.00
+v 24.72 -5.76 20.24
+v 24.83 -6.27 20.28
+v 24.09 -6.70 19.12
+v 25.64 -8.24 17.64
+v 24.44 -7.90 17.63
+v 24.74 -7.39 19.16
+v 25.18 -6.64 20.30
+v 25.72 -5.76 20.57
+v 24.88 -5.25 20.21
+v 24.89 -4.13 18.95
+v 25.83 -3.88 18.92
+v 26.75 -4.14 18.93
+v 27.39 -4.84 18.97
+v 27.60 -5.78 19.03
+v 27.30 -6.72 19.09
+v 26.59 -7.41 19.14
+v 25.65 -7.65 19.16
+v 25.68 -6.78 20.30
+v 26.19 -6.65 20.29
+v 26.57 -6.28 20.26
+v 26.73 -5.77 20.22
+v 26.62 -5.26 20.19
+v 26.27 -4.89 20.17
+v 25.77 -4.74 20.17
+v 25.27 -4.88 20.18
+v 29.89 -0.71 2.47
+# 266 vertices
+
+vn 0.10 -0.07 -0.99
+vn 0.10 0.89 0.44
+vn 0.06 0.97 0.24
+vn 0.09 0.92 0.39
+vn 0.05 0.98 0.21
+vn 0.02 1.00 0.01
+vn 0.02 1.00 0.02
+vn 0.01 1.00 -0.05
+vn 0.02 1.00 -0.05
+vn 0.00 1.00 -0.10
+vn 0.02 1.00 -0.09
+vn 0.01 0.99 -0.10
+vn 0.01 0.99 -0.15
+vn 0.02 0.99 -0.15
+vn 0.02 1.00 -0.10
+vn 0.02 0.99 -0.10
+vn 0.01 1.00 -0.03
+vn 0.02 1.00 -0.03
+vn 0.02 1.00 0.03
+vn 0.03 1.00 0.05
+vn 0.09 0.87 0.48
+vn 0.06 0.96 0.28
+vn 0.05 0.96 0.28
+vn 0.06 0.89 0.44
+vn 0.04 0.95 0.31
+vn 0.05 0.91 0.41
+vn 0.01 0.99 -0.12
+vn 0.01 1.00 -0.09
+vn 0.02 1.00 -0.04
+vn 0.02 1.00 0.08
+vn 0.01 -1.00 -0.01
+vn 0.01 -1.00 0.02
+vn 0.01 -1.00 0.07
+vn -0.00 -1.00 -0.06
+vn 0.01 -1.00 -0.04
+vn 0.00 -0.99 -0.10
+vn 0.02 -0.99 -0.10
+vn 0.01 -0.99 -0.14
+vn 0.00 -0.99 -0.16
+vn 0.00 -0.99 -0.11
+vn 0.01 -1.00 0.03
+vn 0.03 -0.97 0.23
+vn 0.04 -0.98 0.22
+vn 0.08 -0.97 0.23
+vn 0.13 -0.92 0.38
+vn 0.07 -0.93 0.36
+vn 0.05 -0.90 0.44
+vn 0.03 -0.96 0.28
+vn 0.05 -0.88 0.48
+vn 0.03 -0.94 0.33
+vn 0.04 -0.89 0.46
+vn 0.01 -1.00 0.04
+vn 0.88 0.48 -0.01
+vn -0.86 0.51 -0.03
+vn -0.84 0.54 -0.03
+vn -0.88 -0.48 0.01
+vn -0.89 -0.46 0.01
+vn -0.02 -1.00 0.03
+vn -0.01 -1.00 0.03
+vn 0.84 -0.54 0.03
+vn 0.86 -0.51 0.03
+vn 0.89 0.46 -0.01
+vn 0.00 -1.00 -0.09
+vn -0.01 -0.99 -0.10
+vn -0.01 -0.99 -0.16
+vn -0.01 -0.99 -0.17
+vn -0.00 -0.99 -0.13
+vn 0.01 -0.99 -0.12
+vn 0.01 -0.99 -0.10
+vn 0.11 -0.07 -0.99
+vn 0.02 1.00 -0.07
+vn 0.01 0.09 1.00
+vn 0.02 0.18 0.98
+vn 0.00 -0.96 0.29
+vn -0.00 -1.00 0.01
+vn -0.02 -0.62 -0.78
+vn -1.00 0.05 0.00
+vn 1.00 -0.05 -0.00
+vn 0.99 -0.06 -0.14
+vn 0.99 -0.06 -0.10
+vn 0.99 -0.05 -0.10
+vn 0.98 -0.04 0.19
+vn 0.85 -0.11 -0.52
+vn 0.83 -0.07 -0.55
+vn 0.94 -0.10 -0.32
+vn -1.00 0.08 0.01
+vn -1.00 0.07 0.01
+vn -0.99 0.12 0.05
+vn -1.00 0.08 0.06
+vn -1.00 0.01 0.00
+vn -0.98 0.13 0.12
+vn -0.99 0.11 -0.07
+vn -1.00 0.07 -0.04
+vn -0.88 -0.04 0.48
+vn -0.99 -0.11 0.08
+vn -1.00 0.01 0.01
+vn -0.96 -0.13 0.23
+vn -0.90 -0.01 -0.44
+vn 0.13 0.99 0.04
+vn 0.05 0.99 0.10
+vn 0.11 0.98 0.16
+vn 0.30 0.95 0.08
+vn 0.20 0.97 0.10
+vn 0.37 0.93 0.06
+vn 0.18 0.98 0.07
+vn 0.16 0.97 0.17
+vn 0.06 0.97 0.22
+vn 0.04 0.98 0.21
+vn 0.04 0.97 0.23
+vn 0.04 0.96 0.26
+vn 0.04 0.94 0.34
+vn 0.06 0.92 0.40
+vn 0.05 0.97 0.25
+vn 0.04 0.99 0.10
+vn 0.03 1.00 -0.02
+vn 0.02 1.00 -0.08
+vn 0.04 0.99 -0.11
+vn 0.04 0.99 -0.15
+vn 0.06 1.00 -0.05
+vn 0.05 1.00 -0.07
+vn 0.31 0.95 -0.06
+vn 0.17 0.98 -0.07
+vn 0.54 0.84 -0.08
+vn 0.31 0.95 -0.03
+vn 0.50 0.86 -0.04
+vn 0.08 1.00 -0.03
+vn 0.06 1.00 -0.02
+vn 0.01 -1.00 -0.03
+vn 0.08 -1.00 -0.04
+vn 0.02 -1.00 0.04
+vn 0.03 -0.97 0.25
+vn 0.03 -0.97 0.24
+vn 0.05 -0.89 0.45
+vn 0.04 -0.91 0.42
+vn 0.04 -0.93 0.38
+vn 0.06 -0.98 0.21
+vn 0.10 -0.97 0.22
+vn 0.11 -0.99 0.08
+vn 0.08 -1.00 0.03
+vn 0.10 -1.00 -0.01
+vn 0.11 -0.99 -0.03
+vn 0.07 -1.00 -0.03
+vn 0.05 -1.00 -0.03
+vn 0.09 -1.00 -0.03
+vn 0.05 -0.99 -0.13
+vn 0.06 -1.00 -0.04
+vn 0.03 -0.98 -0.20
+vn 0.01 -0.99 -0.11
+vn 0.00 -0.99 -0.17
+vn 0.11 -0.99 -0.04
+vn 0.24 -0.97 -0.02
+vn 0.24 -0.97 -0.03
+vn 0.31 -0.95 0.01
+vn 0.35 -0.94 0.05
+vn 0.22 -0.97 0.13
+vn 0.26 -0.96 0.09
+vn 0.11 -0.98 0.15
+vn 0.08 -0.98 0.15
+vn 0.08 -0.98 0.16
+vn 0.03 0.99 -0.11
+vn 0.02 0.99 -0.12
+vn 0.08 -1.00 0.01
+vn 0.10 -0.99 0.06
+vn -1.00 0.05 -0.02
+vn 1.00 -0.05 0.02
+vn 0.00 0.12 0.99
+vn -0.00 -1.00 0.03
+vn -0.00 -0.64 -0.77
+vn 0.00 0.11 0.99
+vn 0.05 -0.47 -0.88
+vn 0.07 -0.07 -1.00
+vn 0.05 0.63 -0.77
+vn 0.05 -0.19 -0.98
+vn 0.04 -0.08 -1.00
+vn 0.04 -0.11 -0.99
+vn -0.34 -0.94 0.05
+vn -0.19 0.98 -0.09
+vn -0.32 -0.95 0.05
+vn -0.99 0.06 0.14
+vn -1.00 -0.05 0.08
+vn -0.10 0.99 0.04
+vn -0.80 0.60 -0.05
+vn -0.85 0.11 0.52
+vn -0.94 0.10 0.32
+vn -0.00 -0.66 -0.75
+vn 0.01 1.00 -0.00
+vn -0.50 0.87 -0.01
+vn 0.52 0.85 0.00
+vn 0.88 0.47 0.01
+vn 0.89 0.46 0.01
+vn 1.00 -0.03 0.01
+vn 1.00 -0.05 0.01
+vn 0.86 -0.52 0.01
+vn 0.85 -0.53 0.01
+vn 0.50 -0.87 0.01
+vn 0.48 -0.88 0.01
+vn -0.01 -1.00 0.00
+vn -0.52 -0.85 -0.00
+vn -0.89 -0.46 -0.01
+vn -0.88 -0.47 -0.01
+vn -1.00 0.05 -0.01
+vn -1.00 0.03 -0.01
+vn -0.85 0.53 -0.01
+vn -0.86 0.52 -0.01
+vn -0.48 0.88 -0.01
+vn 0.01 0.95 -0.33
+vn 0.01 0.94 -0.35
+vn -0.48 0.82 -0.32
+vn -0.47 0.81 -0.34
+vn -0.82 0.47 -0.32
+vn -0.81 0.48 -0.34
+vn -0.95 0.01 -0.32
+vn -0.94 0.02 -0.34
+vn -0.83 -0.46 -0.32
+vn -0.83 -0.45 -0.34
+vn -0.49 -0.81 -0.32
+vn -0.48 -0.81 -0.34
+vn -0.02 -0.95 -0.31
+vn -0.01 -0.95 -0.33
+vn 0.45 -0.84 -0.30
+vn 0.45 -0.83 -0.32
+vn 0.80 -0.52 -0.29
+vn 0.80 -0.51 -0.31
+vn 0.95 -0.07 -0.30
+vn 0.94 -0.06 -0.32
+vn 0.00 0.73 -0.69
+vn -0.38 0.63 -0.68
+vn 0.85 0.42 -0.31
+vn 0.84 0.42 -0.33
+vn 0.50 0.80 -0.32
+vn 0.50 0.80 -0.34
+vn 0.39 0.61 -0.68
+vn -0.01 -0.05 -1.00
+vn -0.65 0.36 -0.67
+vn -0.75 -0.00 -0.66
+vn -0.66 -0.38 -0.65
+vn -0.39 -0.66 -0.64
+vn -0.01 -0.77 -0.64
+vn 0.36 -0.68 -0.63
+vn 0.64 -0.43 -0.64
+vn 0.75 -0.07 -0.65
+vn 0.67 0.31 -0.67
+vn -0.88 -0.44 0.16
+vn -0.86 -0.44 0.25
+vn -0.99 0.06 0.15
+vn -0.97 0.06 0.24
+vn -0.83 0.54 0.15
+vn -0.82 0.52 0.23
+vn -0.47 0.87 0.15
+vn -0.47 0.85 0.24
+vn 0.02 0.99 0.16
+vn 0.01 0.97 0.25
+vn 0.51 0.84 0.17
+vn 0.50 0.83 0.26
+vn 0.87 0.47 0.17
+vn 0.85 0.46 0.26
+vn 0.98 -0.02 0.17
+vn 0.96 -0.03 0.26
+vn 0.85 -0.50 0.17
+vn 0.83 -0.50 0.26
+vn 0.49 -0.85 0.17
+vn 0.48 -0.84 0.26
+vn -0.89 0.07 0.45
+vn -0.75 0.49 0.44
+vn -0.62 0.08 0.78
+vn -0.55 -0.24 0.80
+vn -0.79 -0.39 0.47
+vn -0.01 -0.99 0.17
+vn -0.01 -0.96 0.26
+vn -0.52 -0.84 0.17
+vn -0.51 -0.82 0.26
+vn -0.47 -0.74 0.48
+vn -0.32 -0.49 0.81
+vn 0.01 0.06 1.00
+vn -0.53 0.37 0.76
+vn -0.43 0.79 0.44
+vn 0.01 0.89 0.45
+vn 0.45 0.76 0.46
+vn 0.78 0.43 0.46
+vn 0.89 -0.01 0.46
+vn 0.76 -0.44 0.47
+vn 0.45 -0.76 0.47
+vn -0.01 -0.88 0.48
+vn 0.00 -0.59 0.81
+vn 0.32 -0.51 0.80
+vn 0.54 -0.29 0.79
+vn 0.63 0.02 0.78
+vn 0.55 0.33 0.77
+vn 0.32 0.56 0.76
+vn 0.01 0.65 0.76
+vn -0.30 0.58 0.76
+vn -0.99 0.04 -0.13
+vn 0.02 0.99 -0.13
+vn 0.03 0.99 -0.13
+vn 0.01 -1.00 -0.07
+vn 0.01 -1.00 -0.06
+vn 0.90 0.01 0.44
+vn -0.05 0.07 1.00
+vn -0.05 0.11 0.99
+# 299 vertex normals
+
+vt 0.55 0.02 0.00
+vt 0.58 0.02 0.00
+vt 0.86 0.72 0.00
+vt 0.86 0.69 0.00
+vt 0.93 0.75 0.00
+vt 0.95 0.70 0.00
+vt 0.86 0.64 0.00
+vt 0.95 0.66 0.00
+vt 0.86 0.59 0.00
+vt 0.95 0.59 0.00
+vt 0.87 0.54 0.00
+vt 0.95 0.55 0.00
+vt 0.87 0.50 0.00
+vt 0.80 0.50 0.00
+vt 0.80 0.48 0.00
+vt 0.75 0.48 0.00
+vt 0.79 0.54 0.00
+vt 0.74 0.54 0.00
+vt 0.79 0.60 0.00
+vt 0.75 0.60 0.00
+vt 0.79 0.64 0.00
+vt 0.74 0.64 0.00
+vt 0.78 0.71 0.00
+vt 0.79 0.68 0.00
+vt 0.74 0.67 0.00
+vt 0.73 0.70 0.00
+vt 0.64 0.67 0.00
+vt 0.63 0.69 0.00
+vt 0.65 0.50 0.00
+vt 0.64 0.54 0.00
+vt 0.66 0.60 0.00
+vt 0.65 0.64 0.00
+vt 0.20 0.10 0.00
+vt 0.20 0.17 0.00
+vt 0.25 0.11 0.00
+vt 0.16 0.16 0.00
+vt 0.15 0.22 0.00
+vt 0.11 0.21 0.00
+vt 0.10 0.25 0.00
+vt 0.06 0.24 0.00
+vt 0.05 0.32 0.00
+vt 0.08 0.33 0.00
+vt 0.14 0.33 0.00
+vt 0.15 0.26 0.00
+vt 0.18 0.26 0.00
+vt 0.19 0.22 0.00
+vt 0.21 0.23 0.00
+vt 0.23 0.17 0.00
+vt 0.27 0.11 0.00
+vt 0.29 0.13 0.00
+vt 0.26 0.19 0.00
+vt 0.24 0.24 0.00
+vt 0.21 0.27 0.00
+vt 0.23 0.28 0.00
+vt 0.19 0.35 0.00
+vt 0.21 0.36 0.00
+vt 0.16 0.34 0.00
+vt 0.39 0.68 0.00
+vt 0.25 0.68 0.00
+vt 0.39 0.69 0.00
+vt 0.25 0.69 0.00
+vt 0.25 0.70 0.00
+vt 0.39 0.70 0.00
+vt 0.25 0.71 0.00
+vt 0.39 0.71 0.00
+vt 0.17 0.09 0.00
+vt 0.12 0.15 0.00
+vt 0.08 0.20 0.00
+vt 0.06 0.20 0.00
+vt 0.08 0.14 0.00
+vt 0.06 0.14 0.00
+vt 0.10 0.08 0.00
+vt 0.06 0.07 0.00
+vt 0.13 0.08 0.00
+vt 0.48 0.02 0.00
+vt 0.51 0.02 0.00
+vt 0.53 0.02 0.00
+vt 0.55 0.03 0.00
+vt 0.87 0.46 0.00
+vt 0.95 0.50 0.00
+vt 0.95 0.45 0.00
+vt 0.37 0.72 0.00
+vt 0.38 0.71 0.00
+vt 0.37 0.73 0.00
+vt 0.39 0.73 0.00
+vt 0.39 0.72 0.00
+vt 0.38 0.74 0.00
+vt 0.01 0.74 0.00
+vt 0.02 0.73 0.00
+vt 0.04 0.73 0.00
+vt 0.03 0.73 0.00
+vt 0.77 0.13 0.00
+vt 0.87 0.13 0.00
+vt 0.77 0.11 0.00
+vt 0.78 0.11 0.00
+vt 0.85 0.11 0.00
+vt 0.20 0.52 0.00
+vt 0.20 0.50 0.00
+vt 0.22 0.51 0.00
+vt 0.21 0.50 0.00
+vt 0.21 0.57 0.00
+vt 0.20 0.55 0.00
+vt 0.23 0.56 0.00
+vt 0.23 0.55 0.00
+vt 0.21 0.58 0.00
+vt 0.23 0.57 0.00
+vt 0.23 0.59 0.00
+vt 0.21 0.51 0.00
+vt 0.21 0.53 0.00
+vt 0.20 0.53 0.00
+vt 0.21 0.56 0.00
+vt 0.21 0.54 0.00
+vt 0.22 0.54 0.00
+vt 0.22 0.58 0.00
+vt 0.23 0.58 0.00
+vt 0.48 0.06 0.00
+vt 0.47 0.06 0.00
+vt 0.39 0.62 0.00
+vt 0.44 0.63 0.00
+vt 0.40 0.64 0.00
+vt 0.38 0.63 0.00
+vt 0.38 0.65 0.00
+vt 0.37 0.63 0.00
+vt 0.38 0.66 0.00
+vt 0.40 0.67 0.00
+vt 0.44 0.65 0.00
+vt 0.44 0.67 0.00
+vt 0.54 0.66 0.00
+vt 0.54 0.68 0.00
+vt 0.54 0.63 0.00
+vt 0.54 0.60 0.00
+vt 0.54 0.54 0.00
+vt 0.44 0.54 0.00
+vt 0.45 0.52 0.00
+vt 0.40 0.54 0.00
+vt 0.40 0.53 0.00
+vt 0.38 0.54 0.00
+vt 0.39 0.49 0.00
+vt 0.38 0.59 0.00
+vt 0.37 0.59 0.00
+vt 0.40 0.59 0.00
+vt 0.44 0.59 0.00
+vt 0.12 0.42 0.00
+vt 0.10 0.50 0.00
+vt 0.14 0.43 0.00
+vt 0.16 0.43 0.00
+vt 0.18 0.43 0.00
+vt 0.16 0.51 0.00
+vt 0.14 0.51 0.00
+vt 0.15 0.54 0.00
+vt 0.13 0.54 0.00
+vt 0.13 0.50 0.00
+vt 0.12 0.54 0.00
+vt 0.09 0.53 0.00
+vt 0.09 0.55 0.00
+vt 0.05 0.54 0.00
+vt 0.05 0.52 0.00
+vt 0.04 0.52 0.00
+vt 0.06 0.49 0.00
+vt 0.01 0.53 0.00
+vt 0.04 0.49 0.00
+vt 0.07 0.41 0.00
+vt 0.05 0.41 0.00
+vt 0.12 0.56 0.00
+vt 0.13 0.56 0.00
+vt 0.14 0.56 0.00
+vt 0.54 0.51 0.00
+vt 0.65 0.01 0.00
+vt 0.65 0.02 0.00
+vt 0.52 0.01 0.00
+vt 0.52 0.02 0.00
+vt 0.62 0.03 0.00
+vt 0.66 0.02 0.00
+vt 0.62 0.02 0.00
+vt 0.22 0.56 0.00
+vt 0.20 0.49 0.00
+vt 0.21 0.49 0.00
+vt 0.23 0.54 0.00
+vt 0.24 0.56 0.00
+vt 0.24 0.57 0.00
+vt 0.75 0.10 0.00
+vt 0.88 0.11 0.00
+vt 0.75 0.09 0.00
+vt 0.88 0.10 0.00
+vt 0.88 0.08 0.00
+vt 0.75 0.08 0.00
+vt 0.88 0.06 0.00
+vt 0.75 0.05 0.00
+vt 0.88 0.03 0.00
+vt 0.75 0.03 0.00
+vt 0.88 0.02 0.00
+vt 0.75 0.01 0.00
+vt 0.88 0.01 0.00
+vt 0.75 0.00 0.00
+vt 0.94 0.09 0.00
+vt 0.94 0.08 0.00
+vt 0.94 0.07 0.00
+vt 0.94 0.06 0.00
+vt 0.94 0.04 0.00
+vt 0.94 0.03 0.00
+vt 0.99 0.07 0.00
+vt 0.99 0.06 0.00
+vt 0.99 0.05 0.00
+vt 0.73 0.03 0.00
+vt 0.73 0.05 0.00
+vt 0.73 0.08 0.00
+vt 0.73 0.09 0.00
+vt 0.73 0.10 0.00
+vt 0.73 0.02 0.00
+vt 0.70 0.05 0.00
+vt 0.70 0.07 0.00
+vt 0.68 0.05 0.00
+vt 0.68 0.04 0.00
+vt 0.70 0.03 0.00
+vt 0.73 0.01 0.00
+vt 0.70 0.02 0.00
+vt 0.67 0.05 0.00
+vt 0.67 0.06 0.00
+vt 0.70 0.08 0.00
+vt 0.70 0.09 0.00
+vt 0.68 0.03 0.00
+vt 0.67 0.07 0.00
+vt 0.48 0.03 0.00
+vt 0.64 0.44 0.00
+vt 0.40 0.52 0.00
+vt 0.01 0.32 0.00
+vt 0.49 0.03 0.00
+vt 0.48 0.01 0.00
+vt 0.66 0.01 0.00
+# 229 texture coords
+
+g P_51_Mustang_Left_Wing
+f 1688/1032/1709 1689/1033/1709 1690/1033/1709
+f 1691/1034/1710 1692/1035/1711 1693/1036/1712
+f 1694/1037/1713 1693/1036/1712 1692/1035/1711
+f 1692/1035/1711 1695/1038/1714 1694/1037/1713
+f 1696/1039/1715 1694/1037/1713 1695/1038/1714
+f 1695/1038/1714 1697/1040/1716 1696/1039/1715
+f 1698/1041/1717 1696/1039/1715 1697/1040/1716
+f 1697/1040/1716 1699/1042/1718 1698/1041/1717
+f 1700/1043/1719 1698/1041/1717 1699/1042/1718
+f 1699/1042/1718 1701/1044/1720 1700/1043/1719
+f 1701/1044/1720 1699/1042/1718 1702/1045/1721
+f 1702/1045/1721 1703/1046/1721 1701/1044/1720
+f 1688/1047/1722 1703/1046/1721 1702/1045/1721
+f 1702/1045/1721 1704/1048/1723 1688/1047/1722
+f 1705/1049/1724 1688/1047/1722 1704/1048/1723
+f 1704/1048/1723 1706/1050/1725 1705/1049/1724
+f 1707/1051/1726 1705/1049/1724 1706/1050/1725
+f 1706/1050/1725 1708/1052/1727 1707/1051/1726
+f 1709/1053/1728 1707/1051/1726 1708/1052/1727
+f 1710/1054/1729 1711/1055/1730 1691/1034/1710
+f 1692/1035/1711 1691/1034/1710 1711/1055/1730
+f 1692/1035/1711 1711/1055/1730 1695/1038/1714
+f 1708/1052/1727 1695/1038/1714 1711/1055/1730
+f 1708/1052/1727 1706/1050/1725 1695/1038/1714
+f 1697/1040/1716 1695/1038/1714 1706/1050/1725
+f 1706/1050/1725 1704/1048/1723 1697/1040/1716
+f 1699/1042/1718 1697/1040/1716 1704/1048/1723
+f 1704/1048/1723 1702/1045/1721 1699/1042/1718
+f 1708/1052/1727 1711/1055/1730 1709/1053/1728
+f 1712/1056/1731 1709/1053/1728 1711/1055/1730
+f 1711/1055/1730 1710/1054/1729 1712/1056/1731
+f 1713/1057/1732 1712/1056/1731 1710/1054/1729
+f 1712/1056/1731 1713/1057/1732 1714/1058/1733
+f 1715/1059/1734 1714/1058/1733 1713/1057/1732
+f 1688/1047/1722 1705/1049/1724 1689/1060/1735
+f 1716/1061/1736 1689/1060/1735 1705/1049/1724
+f 1716/1061/1736 1705/1049/1724 1717/1062/1737
+f 1707/1051/1726 1717/1062/1737 1705/1049/1724
+f 1707/1051/1726 1709/1053/1728 1717/1062/1737
+f 1718/1063/1738 1717/1062/1737 1709/1053/1728
+f 1718/1063/1738 1709/1053/1728 1714/1058/1733
+f 1712/1056/1731 1714/1058/1733 1709/1053/1728
+f 1719/1064/1739 1720/1065/1740 1721/1066/1741
+f 1720/1065/1740 1719/1064/1739 1722/1067/1742
+f 1722/1067/1742 1723/1068/1743 1720/1065/1740
+f 1723/1068/1743 1722/1067/1742 1724/1069/1744
+f 1724/1069/1744 1725/1070/1745 1723/1068/1743
+f 1725/1070/1745 1724/1069/1744 1726/1071/1746
+f 1726/1071/1746 1690/1072/1747 1725/1070/1745
+f 1727/1073/1748 1725/1070/1745 1690/1072/1747
+f 1727/1073/1748 1728/1074/1743 1725/1070/1745
+f 1729/1075/1743 1725/1070/1745 1728/1074/1743
+f 1729/1075/1743 1728/1074/1743 1730/1076/1749
+f 1730/1076/1749 1731/1077/1740 1729/1075/1743
+f 1731/1077/1740 1730/1076/1749 1732/1078/1750
+f 1731/1077/1740 1732/1078/1750 1720/1065/1740
+f 1733/1079/1751 1720/1065/1740 1732/1078/1750
+f 1733/1079/1751 1721/1066/1741 1720/1065/1740
+f 1721/1066/1741 1733/1079/1751 1734/1080/1752
+f 1734/1080/1752 1733/1079/1751 1693/1081/1753
+f 1729/1075/1743 1723/1068/1743 1725/1070/1745
+f 1723/1068/1743 1729/1075/1743 1731/1077/1740
+f 1731/1077/1740 1720/1065/1740 1723/1068/1743
+f 1691/1082/1754 1693/1081/1753 1733/1079/1751
+f 1733/1079/1751 1732/1078/1750 1691/1082/1754
+f 1710/1083/1755 1691/1082/1754 1732/1078/1750
+f 1732/1078/1750 1735/1084/1756 1710/1083/1755
+f 1713/1085/1757 1710/1083/1755 1735/1084/1756
+f 1735/1084/1756 1736/1086/1758 1713/1085/1757
+f 1715/1087/1759 1713/1085/1757 1736/1086/1758
+f 1737/1088/1760 1730/1076/1749 1728/1074/1743
+f 1737/1088/1760 1736/1086/1758 1730/1076/1749
+f 1735/1084/1756 1730/1076/1749 1736/1086/1758
+f 1735/1084/1756 1732/1078/1750 1730/1076/1749
+f 1738/1089/1726 1739/1090/1725 1740/1091/1761
+f 1739/1090/1725 1738/1089/1726 1741/1092/1762
+f 1742/1091/1763 1741/1092/1762 1738/1089/1726
+f 1741/1092/1762 1742/1091/1763 1743/1093/1764
+f 1744/1094/1765 1743/1093/1764 1742/1091/1763
+f 1743/1093/1764 1744/1094/1765 1745/1095/1766
+f 1746/1096/1767 1745/1095/1766 1744/1094/1765
+f 1745/1095/1766 1746/1096/1767 1747/1093/1768
+f 1748/1094/1769 1747/1093/1768 1746/1096/1767
+f 1747/1093/1768 1748/1094/1769 1749/1092/1770
+f 1740/1091/1761 1749/1092/1770 1748/1094/1769
+f 1749/1092/1770 1740/1091/1761 1739/1090/1725
+f 1750/1091/1763 1751/1092/1762 1752/1089/1726
+f 1751/1092/1762 1750/1091/1763 1753/1093/1764
+f 1754/1094/1765 1753/1093/1764 1750/1091/1763
+f 1753/1093/1764 1754/1094/1765 1755/1095/1766
+f 1756/1096/1767 1755/1095/1766 1754/1094/1765
+f 1755/1095/1766 1756/1096/1767 1757/1093/1768
+f 1758/1094/1769 1757/1093/1768 1756/1096/1767
+f 1757/1093/1768 1758/1094/1769 1759/1092/1770
+f 1760/1091/1761 1759/1092/1770 1758/1094/1769
+f 1759/1092/1770 1760/1091/1761 1761/1090/1725
+f 1752/1089/1726 1761/1090/1725 1760/1091/1761
+f 1761/1090/1725 1752/1089/1726 1751/1092/1762
+f 1762/1094/1765 1763/1093/1764 1764/1091/1763
+f 1763/1093/1764 1762/1094/1765 1765/1095/1766
+f 1766/1096/1767 1765/1095/1766 1762/1094/1765
+f 1765/1095/1766 1766/1096/1767 1767/1093/1768
+f 1768/1094/1769 1767/1093/1768 1766/1096/1767
+f 1767/1093/1768 1768/1094/1769 1769/1092/1770
+f 1770/1091/1761 1769/1092/1770 1768/1094/1769
+f 1769/1092/1770 1770/1091/1761 1771/1090/1725
+f 1772/1089/1726 1771/1090/1725 1770/1091/1761
+f 1771/1090/1725 1772/1089/1726 1773/1092/1762
+f 1764/1091/1763 1773/1092/1762 1772/1089/1726
+f 1773/1092/1762 1764/1091/1763 1763/1093/1764
+f 1774/1097/1771 1722/1067/1742 1719/1064/1739
+f 1722/1067/1742 1774/1097/1771 1775/1098/1772
+f 1775/1098/1772 1724/1069/1744 1722/1067/1742
+f 1724/1069/1744 1775/1098/1772 1776/1099/1773
+f 1776/1099/1773 1726/1071/1746 1724/1069/1744
+f 1776/1099/1773 1777/1100/1774 1726/1071/1746
+f 1776/1099/1773 1778/1101/1775 1777/1100/1774
+f 1779/1102/1748 1777/1100/1774 1778/1101/1775
+f 1778/1101/1775 1780/1103/1776 1779/1102/1748
+f 1781/1104/1777 1779/1102/1748 1780/1103/1776
+f 1782/1105/1744 1775/1098/1772 1774/1097/1771
+f 1775/1098/1772 1782/1105/1744 1778/1101/1775
+f 1778/1101/1775 1776/1099/1773 1775/1098/1772
+f 1780/1103/1776 1778/1101/1775 1782/1105/1744
+f 1783/1106/1778 1779/1107/1778 1781/1106/1778
+f 1784/1107/1778 1779/1107/1778 1783/1106/1778
+f 1777/1108/1778 1779/1107/1778 1784/1107/1778
+f 1703/1108/1778 1777/1108/1778 1784/1107/1778
+f 1777/1108/1778 1703/1108/1778 1726/1109/1778
+f 1703/1108/1778 1688/1032/1778 1726/1109/1778
+f 1726/1109/1778 1688/1032/1778 1690/1033/1778
+f 1784/1110/1779 1701/1044/1720 1703/1046/1721
+f 1701/1044/1720 1784/1110/1779 1785/1111/1723
+f 1785/1111/1723 1700/1043/1719 1701/1044/1720
+f 1783/1112/1779 1785/1111/1723 1784/1110/1779
+f 1749/1113/1780 1739/1114/1780 1747/1115/1780
+f 1739/1114/1780 1743/1116/1780 1747/1115/1780
+f 1741/1117/1780 1743/1116/1780 1739/1114/1780
+f 1747/1115/1780 1743/1116/1780 1745/1118/1780
+f 1759/1113/1780 1761/1114/1780 1757/1115/1780
+f 1761/1114/1780 1753/1116/1780 1757/1115/1780
+f 1751/1117/1780 1753/1116/1780 1761/1114/1780
+f 1757/1115/1780 1753/1116/1780 1755/1118/1780
+f 1769/1113/1780 1771/1114/1780 1767/1115/1780
+f 1771/1114/1780 1763/1116/1780 1767/1115/1780
+f 1773/1117/1780 1763/1116/1780 1771/1114/1780
+f 1767/1115/1780 1763/1116/1780 1765/1118/1780
+f 1786/1119/1781 1787/1119/1781 1788/1119/1781
+f 1789/1119/1781 1788/1119/1781 1787/1119/1781
+f 1790/1120/1782 1791/1120/1782 1786/1120/1782
+f 1787/1120/1782 1786/1120/1782 1791/1120/1782
+f 1791/1120/1783 1790/1120/1783 1792/1121/1783
+f 1793/1121/1783 1792/1121/1783 1790/1120/1783
+f 1794/1121/1784 1795/1121/1784 1793/1122/1784
+f 1792/1122/1784 1793/1122/1784 1795/1121/1784
+f 1788/1123/1785 1794/1124/1785 1786/1125/1785
+f 1790/1126/1785 1794/1124/1785 1793/1127/1785
+f 1786/1125/1785 1794/1124/1785 1790/1126/1785
+f 1789/1123/1786 1787/1125/1786 1795/1124/1786
+f 1795/1124/1786 1787/1125/1786 1792/1127/1786
+f 1792/1127/1786 1787/1125/1786 1791/1126/1786
+f 1727/1128/1787 1690/1129/1787 1716/1130/1787
+f 1689/1131/1787 1716/1130/1787 1690/1129/1787
+f 1737/1132/1788 1728/1133/1789 1718/1134/1789
+f 1717/1135/1789 1718/1134/1789 1728/1133/1789
+f 1717/1135/1790 1728/1133/1790 1716/1130/1790
+f 1727/1128/1790 1716/1130/1790 1728/1133/1790
+f 1736/1136/1791 1737/1132/1791 1714/1137/1791
+f 1718/1134/1792 1714/1137/1792 1737/1132/1792
+f 1715/1138/1793 1736/1136/1793 1714/1137/1793
+f 1780/1139/1794 1782/1140/1794 1785/1128/1794
+f 1700/1141/1795 1785/1128/1795 1782/1140/1795
+f 1783/1129/1796 1781/1129/1796 1785/1128/1796
+f 1780/1139/1797 1785/1128/1797 1781/1129/1797
+f 1696/1142/1798 1698/1143/1798 1719/1135/1798
+f 1774/1144/1799 1719/1135/1799 1698/1143/1799
+f 1774/1144/1800 1698/1143/1800 1782/1140/1800
+f 1700/1141/1801 1782/1140/1801 1698/1143/1801
+f 1693/1138/1802 1694/1145/1802 1734/1146/1802
+f 1721/1137/1803 1694/1145/1803 1719/1135/1803
+f 1696/1142/1804 1719/1135/1804 1694/1145/1804
+f 1734/1146/1805 1694/1145/1805 1721/1137/1805
+f 1796/1147/1806 1797/1148/1806 1798/1148/1806
+f 1799/1149/1807 1800/1150/1808 1801/1151/1809
+f 1799/1149/1807 1801/1151/1809 1802/1152/1810
+f 1803/1153/1811 1802/1152/1810 1801/1151/1809
+f 1802/1152/1810 1803/1153/1811 1804/1154/1812
+f 1805/1153/1813 1804/1154/1812 1803/1153/1811
+f 1805/1153/1813 1803/1153/1811 1806/1155/1814
+f 1803/1153/1811 1801/1151/1809 1806/1155/1814
+f 1807/1156/1815 1806/1155/1814 1801/1151/1809
+f 1801/1151/1809 1808/1157/1816 1807/1156/1815
+f 1809/1158/1817 1807/1156/1815 1808/1157/1816
+f 1808/1157/1816 1810/1159/1818 1809/1158/1817
+f 1811/1160/1819 1809/1158/1817 1810/1159/1818
+f 1811/1160/1819 1810/1159/1818 1715/1059/1820
+f 1714/1058/1821 1715/1059/1820 1810/1159/1818
+f 1714/1058/1821 1810/1159/1818 1718/1063/1728
+f 1812/1161/1822 1718/1063/1728 1810/1159/1818
+f 1718/1063/1728 1812/1161/1822 1717/1062/1726
+f 1813/1162/1823 1717/1062/1726 1812/1161/1822
+f 1810/1159/1818 1808/1157/1816 1812/1161/1822
+f 1800/1150/1808 1812/1161/1822 1808/1157/1816
+f 1808/1157/1816 1801/1151/1809 1800/1150/1808
+f 1813/1162/1823 1814/1163/1824 1717/1062/1726
+f 1814/1163/1824 1813/1162/1823 1815/1164/1825
+f 1815/1164/1825 1816/1165/1826 1814/1163/1824
+f 1815/1164/1825 1817/1166/1827 1816/1165/1826
+f 1798/1167/1828 1816/1165/1826 1817/1166/1827
+f 1817/1166/1827 1818/1168/1829 1798/1167/1828
+f 1796/1169/1830 1798/1167/1828 1818/1168/1829
+f 1819/1168/1831 1796/1169/1830 1818/1168/1829
+f 1818/1168/1829 1820/1170/1832 1819/1168/1831
+f 1821/1171/1833 1819/1168/1831 1820/1170/1832
+f 1821/1171/1833 1820/1170/1832 1804/1154/1812
+f 1802/1152/1810 1804/1154/1812 1820/1170/1832
+f 1802/1152/1810 1820/1170/1832 1799/1149/1807
+f 1822/1172/1834 1799/1149/1807 1820/1170/1832
+f 1799/1149/1807 1822/1172/1834 1800/1150/1808
+f 1823/1173/1835 1800/1150/1808 1822/1172/1834
+f 1800/1150/1808 1823/1173/1835 1812/1161/1822
+f 1813/1162/1823 1812/1161/1822 1823/1173/1835
+f 1823/1173/1835 1815/1164/1825 1813/1162/1823
+f 1815/1164/1825 1823/1173/1835 1817/1166/1827
+f 1822/1172/1834 1817/1166/1827 1823/1173/1835
+f 1817/1166/1827 1822/1172/1834 1818/1168/1829
+f 1820/1170/1832 1818/1168/1829 1822/1172/1834
+f 1824/1174/1836 1825/1175/1837 1826/1176/1838
+f 1826/1176/1838 1737/1088/1740 1824/1174/1836
+f 1826/1176/1838 1827/1177/1839 1737/1088/1740
+f 1736/1086/1840 1737/1088/1740 1827/1177/1839
+f 1736/1086/1840 1827/1177/1839 1715/1087/1841
+f 1811/1178/1842 1715/1087/1841 1827/1177/1839
+f 1811/1178/1842 1827/1177/1839 1809/1179/1843
+f 1828/1180/1844 1809/1179/1843 1827/1177/1839
+f 1809/1179/1843 1828/1180/1844 1807/1181/1845
+f 1829/1182/1846 1807/1181/1845 1828/1180/1844
+f 1828/1180/1844 1830/1183/1847 1829/1182/1846
+f 1831/1184/1848 1829/1182/1846 1830/1183/1847
+f 1831/1184/1848 1830/1183/1847 1832/1185/1849
+f 1832/1185/1849 1833/1186/1850 1831/1184/1848
+f 1833/1186/1850 1832/1185/1849 1834/1187/1851
+f 1835/1188/1852 1834/1187/1851 1832/1185/1849
+f 1835/1188/1852 1797/1189/1850 1834/1187/1851
+f 1835/1188/1852 1836/1190/1853 1797/1189/1850
+f 1797/1189/1850 1796/1191/1854 1834/1187/1851
+f 1837/1192/1855 1797/1189/1850 1836/1190/1853
+f 1836/1190/1853 1838/1193/1777 1837/1192/1855
+f 1839/1194/1746 1837/1192/1855 1838/1193/1777
+f 1838/1193/1777 1727/1073/1856 1839/1194/1746
+f 1690/1072/1857 1839/1194/1746 1727/1073/1856
+f 1727/1073/1856 1838/1193/1777 1728/1074/1743
+f 1824/1174/1836 1728/1074/1743 1838/1193/1777
+f 1838/1193/1777 1836/1190/1853 1824/1174/1836
+f 1825/1175/1837 1824/1174/1836 1836/1190/1853
+f 1836/1190/1853 1835/1188/1852 1825/1175/1837
+f 1832/1185/1849 1825/1175/1837 1835/1188/1852
+f 1825/1175/1837 1832/1185/1849 1830/1183/1847
+f 1830/1183/1847 1826/1176/1838 1825/1175/1837
+f 1830/1183/1847 1828/1180/1844 1826/1176/1838
+f 1827/1177/1839 1826/1176/1838 1828/1180/1844
+f 1728/1074/1743 1824/1174/1836 1737/1088/1740
+f 1834/1187/1858 1796/1191/1858 1819/1187/1858
+f 1834/1187/1858 1819/1187/1858 1833/1186/1859
+f 1821/1186/1860 1833/1186/1859 1819/1187/1858
+f 1821/1186/1860 1804/1195/1861 1833/1186/1859
+f 1840/1195/1862 1833/1186/1859 1804/1195/1861
+f 1840/1195/1862 1804/1195/1861 1841/1196/1863
+f 1805/1196/1864 1841/1196/1863 1804/1195/1861
+f 1841/1196/1863 1805/1196/1864 1806/1197/1865
+f 1841/1196/1863 1806/1197/1865 1829/1182/1866
+f 1807/1181/1867 1829/1182/1866 1806/1197/1865
+f 1842/1198/1868 1814/1163/1824 1816/1165/1826
+f 1814/1163/1824 1842/1198/1868 1716/1061/1824
+f 1716/1061/1824 1717/1062/1726 1814/1163/1824
+f 1689/1060/1869 1716/1061/1824 1842/1198/1868
+f 1840/1195/1870 1831/1184/1848 1833/1186/1850
+f 1831/1184/1848 1840/1195/1870 1829/1182/1846
+f 1841/1196/1871 1829/1182/1846 1840/1195/1870
+f 1843/1127/1872 1844/1125/1872 1845/1124/1872
+f 1846/1123/1872 1845/1124/1872 1844/1125/1872
+f 1847/1123/1873 1848/1125/1873 1849/1124/1873
+f 1850/1127/1873 1849/1124/1873 1848/1125/1873
+f 1851/1119/1874 1852/1119/1874 1853/1119/1874
+f 1854/1119/1874 1853/1119/1874 1852/1119/1874
+f 1855/1199/1875 1856/1200/1875 1851/1201/1875
+f 1852/1202/1875 1851/1201/1875 1856/1200/1875
+f 1857/1121/1876 1858/1121/1876 1855/1122/1876
+f 1856/1122/1876 1855/1122/1876 1858/1121/1876
+f 1853/1123/1872 1857/1124/1872 1851/1125/1872
+f 1855/1127/1872 1851/1125/1872 1857/1124/1872
+f 1854/1123/1873 1852/1125/1873 1858/1124/1873
+f 1856/1127/1873 1858/1124/1873 1852/1125/1873
+f 1859/1119/1877 1860/1119/1877 1861/1119/1877
+f 1862/1119/1877 1861/1119/1877 1860/1119/1877
+f 1863/1199/1875 1864/1200/1875 1859/1201/1875
+f 1860/1202/1875 1859/1201/1875 1864/1200/1875
+f 1865/1121/1876 1866/1121/1876 1863/1122/1876
+f 1864/1122/1876 1863/1122/1876 1866/1121/1876
+f 1861/1123/1872 1865/1124/1872 1859/1125/1872
+f 1863/1127/1872 1859/1125/1872 1865/1124/1872
+f 1862/1123/1873 1860/1125/1873 1866/1124/1873
+f 1864/1127/1873 1866/1124/1873 1860/1125/1873
+f 1837/1200/1878 1839/1203/1878 1797/1204/1878
+f 1690/1033/1879 1689/1033/1879 1839/1203/1879
+f 1842/1205/1880 1816/1200/1880 1689/1033/1880
+f 1689/1033/1881 1816/1200/1881 1839/1203/1881
+f 1839/1203/1882 1816/1200/1882 1797/1204/1882
+f 1816/1200/1883 1798/1204/1883 1797/1204/1883
+f 1718/1206/1884 1717/1143/1884 1714/1145/1884
+f 1716/1139/1885 1689/1207/1885 1717/1143/1885
+f 1717/1143/1886 1689/1207/1886 1714/1145/1886
+f 1690/1208/1887 1727/1130/1887 1689/1207/1887
+f 1689/1207/1888 1727/1130/1888 1714/1145/1888
+f 1728/1209/1889 1737/1210/1889 1727/1130/1889
+f 1727/1130/1890 1737/1210/1890 1714/1145/1890
+f 1737/1210/1891 1736/1211/1891 1714/1145/1891
+f 1714/1145/1892 1736/1211/1892 1715/1138/1892
+f 1844/1119/1874 1848/1119/1874 1846/1119/1874
+f 1847/1119/1874 1846/1119/1874 1848/1119/1874
+f 1843/1199/1875 1850/1200/1875 1844/1201/1875
+f 1848/1202/1875 1844/1201/1875 1850/1200/1875
+f 1845/1121/1893 1849/1121/1893 1843/1122/1893
+f 1850/1122/1893 1843/1122/1893 1849/1121/1893
+f 1867/1212/1894 1868/1213/1894 1869/1214/1895
+f 1868/1213/1894 1867/1212/1894 1870/1215/1896
+f 1871/1214/1896 1870/1215/1896 1867/1212/1894
+f 1870/1215/1896 1871/1214/1896 1872/1216/1897
+f 1873/1217/1898 1872/1216/1897 1871/1214/1896
+f 1872/1216/1897 1873/1217/1898 1874/1218/1899
+f 1875/1219/1900 1874/1218/1899 1873/1217/1898
+f 1874/1218/1899 1875/1219/1900 1876/1220/1901
+f 1877/1221/1902 1876/1220/1901 1875/1219/1900
+f 1876/1220/1901 1877/1221/1902 1878/1222/1903
+f 1879/1223/1904 1878/1222/1903 1877/1221/1902
+f 1878/1222/1903 1879/1223/1904 1880/1224/1905
+f 1881/1225/1905 1880/1224/1905 1879/1223/1904
+f 1880/1224/1905 1881/1225/1905 1882/1222/1906
+f 1883/1223/1906 1882/1222/1906 1881/1225/1905
+f 1882/1222/1906 1883/1223/1906 1884/1220/1907
+f 1885/1221/1908 1884/1220/1907 1883/1223/1906
+f 1884/1220/1907 1885/1221/1908 1886/1218/1909
+f 1887/1219/1910 1886/1218/1909 1885/1221/1908
+f 1886/1218/1909 1887/1219/1910 1888/1216/1911
+f 1889/1217/1912 1888/1216/1911 1887/1219/1910
+f 1888/1216/1911 1889/1217/1912 1890/1215/1913
+f 1869/1214/1895 1890/1215/1913 1889/1217/1912
+f 1890/1215/1913 1869/1214/1895 1868/1213/1894
+f 1868/1213/1914 1891/1226/1915 1890/1215/1916
+f 1892/1227/1917 1890/1215/1916 1891/1226/1915
+f 1890/1215/1916 1892/1227/1917 1888/1216/1918
+f 1893/1228/1919 1888/1216/1918 1892/1227/1917
+f 1888/1216/1918 1893/1228/1919 1886/1218/1920
+f 1894/1229/1921 1886/1218/1920 1893/1228/1919
+f 1886/1218/1920 1894/1229/1921 1884/1220/1922
+f 1895/1230/1923 1884/1220/1922 1894/1229/1921
+f 1884/1220/1922 1895/1230/1923 1882/1222/1924
+f 1896/1231/1925 1882/1222/1924 1895/1230/1923
+f 1882/1222/1924 1896/1231/1925 1880/1224/1926
+f 1897/1231/1927 1880/1224/1926 1896/1231/1925
+f 1880/1224/1926 1897/1231/1927 1878/1222/1928
+f 1898/1231/1929 1878/1222/1928 1897/1231/1927
+f 1878/1222/1928 1898/1231/1929 1876/1220/1930
+f 1899/1230/1931 1876/1220/1930 1898/1231/1929
+f 1876/1220/1930 1899/1230/1931 1874/1218/1932
+f 1900/1229/1933 1874/1218/1932 1899/1230/1931
+f 1891/1226/1915 1901/1232/1934 1892/1227/1917
+f 1902/1232/1935 1892/1227/1917 1901/1232/1934
+f 1892/1227/1917 1902/1232/1935 1893/1228/1919
+f 1874/1218/1932 1900/1229/1933 1872/1216/1936
+f 1903/1228/1937 1872/1216/1936 1900/1229/1933
+f 1872/1216/1936 1903/1228/1937 1870/1215/1938
+f 1904/1227/1939 1870/1215/1938 1903/1228/1937
+f 1870/1215/1938 1904/1227/1939 1868/1213/1914
+f 1891/1226/1915 1868/1213/1914 1904/1227/1939
+f 1904/1227/1939 1905/1232/1940 1891/1226/1915
+f 1901/1232/1934 1891/1226/1915 1905/1232/1940
+f 1901/1232/1934 1905/1232/1940 1906/1233/1941
+f 1902/1232/1935 1901/1232/1934 1906/1233/1941
+f 1907/1233/1942 1902/1232/1935 1906/1233/1941
+f 1907/1233/1942 1893/1228/1919 1902/1232/1935
+f 1893/1228/1919 1907/1233/1942 1894/1229/1921
+f 1908/1233/1943 1894/1229/1921 1907/1233/1942
+f 1894/1229/1921 1908/1233/1943 1895/1230/1923
+f 1909/1234/1944 1895/1230/1923 1908/1233/1943
+f 1895/1230/1923 1909/1234/1944 1896/1231/1925
+f 1910/1234/1945 1896/1231/1925 1909/1234/1944
+f 1896/1231/1925 1910/1234/1945 1897/1231/1927
+f 1911/1234/1946 1897/1231/1927 1910/1234/1945
+f 1897/1231/1927 1911/1234/1946 1898/1231/1929
+f 1912/1234/1947 1898/1231/1929 1911/1234/1946
+f 1898/1231/1929 1912/1234/1947 1899/1230/1931
+f 1913/1234/1948 1899/1230/1931 1912/1234/1947
+f 1899/1230/1931 1913/1234/1948 1900/1229/1933
+f 1914/1233/1949 1900/1229/1933 1913/1234/1948
+f 1900/1229/1933 1914/1233/1949 1903/1228/1937
+f 1915/1233/1950 1903/1228/1937 1914/1233/1949
+f 1903/1228/1937 1915/1233/1950 1904/1227/1939
+f 1905/1232/1940 1904/1227/1939 1915/1233/1950
+f 1905/1232/1940 1915/1233/1950 1906/1233/1941
+f 1915/1233/1950 1914/1233/1949 1906/1233/1941
+f 1914/1233/1949 1913/1234/1948 1906/1233/1941
+f 1913/1234/1948 1912/1234/1947 1906/1233/1941
+f 1912/1234/1947 1911/1234/1946 1906/1233/1941
+f 1911/1234/1946 1910/1234/1945 1906/1233/1941
+f 1910/1234/1945 1909/1234/1944 1906/1233/1941
+f 1909/1234/1944 1908/1233/1943 1906/1233/1941
+f 1908/1233/1943 1907/1233/1942 1906/1233/1941
+f 1885/1221/1951 1916/1235/1952 1887/1219/1953
+f 1917/1236/1954 1887/1219/1953 1916/1235/1952
+f 1887/1219/1953 1917/1236/1954 1889/1217/1955
+f 1918/1237/1956 1889/1217/1955 1917/1236/1954
+f 1889/1217/1955 1918/1237/1956 1869/1214/1957
+f 1919/1238/1958 1869/1214/1957 1918/1237/1956
+f 1869/1214/1957 1919/1238/1958 1867/1212/1959
+f 1920/1239/1960 1867/1212/1959 1919/1238/1958
+f 1867/1212/1959 1920/1239/1960 1871/1214/1961
+f 1921/1238/1962 1871/1214/1961 1920/1239/1960
+f 1871/1214/1961 1921/1238/1962 1873/1217/1963
+f 1922/1237/1964 1873/1217/1963 1921/1238/1962
+f 1873/1217/1963 1922/1237/1964 1875/1219/1965
+f 1923/1236/1966 1875/1219/1965 1922/1237/1964
+f 1875/1219/1965 1923/1236/1966 1877/1221/1967
+f 1924/1235/1968 1877/1221/1967 1923/1236/1966
+f 1877/1221/1967 1924/1235/1968 1879/1223/1969
+f 1925/1240/1970 1879/1223/1969 1924/1235/1968
+f 1917/1236/1954 1926/1241/1971 1918/1237/1956
+f 1918/1237/1956 1927/1242/1972 1919/1238/1958
+f 1927/1242/1972 1918/1237/1956 1926/1241/1971
+f 1926/1241/1971 1928/1243/1973 1927/1242/1972
+f 1928/1243/1973 1926/1241/1971 1929/1244/1974
+f 1930/1245/1975 1929/1244/1974 1926/1241/1971
+f 1926/1241/1971 1917/1236/1954 1930/1245/1975
+f 1916/1235/1952 1930/1245/1975 1917/1236/1954
+f 1879/1223/1969 1925/1240/1970 1881/1225/1976
+f 1931/1246/1977 1881/1225/1976 1925/1240/1970
+f 1881/1225/1976 1931/1246/1977 1883/1223/1978
+f 1932/1240/1979 1883/1223/1978 1931/1246/1977
+f 1883/1223/1978 1932/1240/1979 1885/1221/1951
+f 1916/1235/1952 1885/1221/1951 1932/1240/1979
+f 1932/1240/1979 1933/1247/1980 1916/1235/1952
+f 1930/1245/1975 1916/1235/1952 1933/1247/1980
+f 1933/1247/1980 1934/1244/1981 1930/1245/1975
+f 1929/1244/1974 1930/1245/1975 1934/1244/1981
+f 1934/1244/1981 1935/1248/1982 1929/1244/1974
+f 1929/1244/1974 1935/1248/1982 1928/1243/1973
+f 1928/1243/1973 1935/1248/1982 1936/1249/1983
+f 1936/1249/1983 1927/1242/1972 1928/1243/1973
+f 1927/1242/1972 1936/1249/1983 1937/1250/1984
+f 1937/1250/1984 1919/1238/1958 1927/1242/1972
+f 1919/1238/1958 1937/1250/1984 1920/1239/1960
+f 1938/1251/1985 1920/1239/1960 1937/1250/1984
+f 1920/1239/1960 1938/1251/1985 1921/1238/1962
+f 1939/1250/1986 1921/1238/1962 1938/1251/1985
+f 1921/1238/1962 1939/1250/1986 1922/1237/1964
+f 1940/1242/1987 1922/1237/1964 1939/1250/1986
+f 1922/1237/1964 1940/1242/1987 1923/1236/1966
+f 1941/1241/1988 1923/1236/1966 1940/1242/1987
+f 1923/1236/1966 1941/1241/1988 1924/1235/1968
+f 1942/1245/1989 1924/1235/1968 1941/1241/1988
+f 1924/1235/1968 1942/1245/1989 1925/1240/1970
+f 1943/1247/1990 1925/1240/1970 1942/1245/1989
+f 1925/1240/1970 1943/1247/1990 1931/1246/1977
+f 1944/1247/1991 1931/1246/1977 1943/1247/1990
+f 1931/1246/1977 1944/1247/1991 1932/1240/1979
+f 1933/1247/1980 1932/1240/1979 1944/1247/1991
+f 1944/1247/1991 1945/1252/1992 1933/1247/1980
+f 1934/1244/1981 1933/1247/1980 1945/1252/1992
+f 1945/1252/1992 1935/1248/1982 1934/1244/1981
+f 1946/1244/1993 1935/1248/1982 1945/1252/1992
+f 1945/1252/1992 1944/1247/1991 1946/1244/1993
+f 1943/1247/1990 1946/1244/1993 1944/1247/1991
+f 1947/1244/1994 1935/1248/1982 1946/1244/1993
+f 1946/1244/1993 1943/1247/1990 1947/1244/1994
+f 1942/1245/1989 1947/1244/1994 1943/1247/1990
+f 1947/1244/1994 1942/1245/1989 1948/1243/1995
+f 1941/1241/1988 1948/1243/1995 1942/1245/1989
+f 1948/1243/1995 1941/1241/1988 1949/1249/1996
+f 1940/1242/1987 1949/1249/1996 1941/1241/1988
+f 1949/1249/1996 1940/1242/1987 1950/1253/1997
+f 1939/1250/1986 1950/1253/1997 1940/1242/1987
+f 1950/1253/1997 1939/1250/1986 1951/1253/1998
+f 1938/1251/1985 1951/1253/1998 1939/1250/1986
+f 1951/1253/1998 1938/1251/1985 1952/1253/1999
+f 1937/1250/1984 1952/1253/1999 1938/1251/1985
+f 1952/1253/1999 1937/1250/1984 1936/1249/1983
+f 1936/1249/1983 1935/1248/1982 1952/1253/1999
+f 1952/1253/1999 1935/1248/1982 1951/1253/1998
+f 1951/1253/1998 1935/1248/1982 1950/1253/1997
+f 1950/1253/1997 1935/1248/1982 1949/1249/1996
+f 1949/1249/1996 1935/1248/1982 1948/1243/1995
+f 1948/1243/1995 1935/1248/1982 1947/1244/1994
+f 1689/1106/2000 1953/1107/2000 1690/1254/2000
+f 1796/1169/1719 1953/1255/2001 1798/1256/1719
+f 1689/1060/2002 1798/1256/1719 1953/1255/2001
+f 1953/1257/1856 1796/1191/2003 1690/1072/1856
+f 1797/1189/2004 1690/1072/1856 1796/1191/2003
+f 1798/1258/2005 1797/1258/2005 1796/1254/2005
+f 1690/1204/2006 1797/1259/2006 1689/1260/2006
+f 1798/1259/2007 1689/1260/2007 1797/1259/2007
+# 500 faces
+
+#
+# object P_51_Mustang_Left_Landing_Wheel
+#
+
+v 19.25 -7.41 18.44
+v 19.26 -7.41 18.30
+v 20.79 -7.36 18.42
+v 20.79 -7.36 18.28
+v 20.30 -0.82 17.29
+v 19.89 -9.61 17.84
+v 20.06 -0.82 17.28
+v 20.05 -9.61 18.01
+v 20.47 -0.82 17.47
+v 20.04 -9.61 18.26
+v 20.45 -0.82 17.71
+v 19.86 -9.61 18.43
+v 20.27 -0.82 17.88
+v 19.61 -9.61 18.42
+v 20.03 -0.82 17.87
+v 19.45 -9.60 18.24
+v 19.87 -0.82 17.69
+v 19.46 -9.61 18.00
+v 19.88 -0.82 17.45
+v 19.64 -9.61 17.83
+v 18.91 -13.24 18.10
+v 18.69 -13.22 18.10
+v 19.03 -10.60 17.93
+v 18.70 -10.57 17.94
+v 19.21 -9.83 17.89
+v 19.03 -9.31 17.85
+v 19.56 -9.60 17.87
+v 19.59 -9.04 17.83
+v 19.58 -9.04 18.33
+v 19.02 -9.31 18.35
+v 19.56 -9.59 18.36
+v 19.20 -9.83 18.38
+v 18.70 -10.57 18.43
+v 19.03 -10.60 18.43
+v 18.59 -13.22 18.60
+v 18.90 -13.24 18.60
+v 23.32 -9.94 15.18
+v 21.57 -3.85 17.12
+v 23.08 -10.00 18.57
+v 20.86 -1.44 18.08
+v 20.94 -1.41 16.97
+v 20.73 -1.48 16.97
+v 21.36 -3.92 17.12
+v 20.65 -1.50 18.08
+v 22.86 -10.07 18.58
+v 23.11 -10.00 15.18
+v 20.80 -7.18 18.41
+v 20.80 -7.18 18.27
+v 19.27 -7.10 18.42
+v 19.27 -7.10 18.28
+v 20.80 -7.36 17.54
+v 19.27 -7.42 17.55
+v 20.81 -7.18 17.52
+v 19.28 -7.10 17.53
+v 19.28 -7.10 17.68
+v 19.26 -7.41 17.70
+v 20.81 -7.18 17.67
+v 20.80 -7.36 17.68
+v 18.93 -10.59 17.88
+v 18.90 -10.98 16.68
+v 18.93 -10.87 19.15
+v 18.91 -11.75 20.15
+v 18.87 -12.99 20.61
+v 18.74 -15.33 17.13
+v 18.80 -13.21 15.67
+v 18.76 -14.45 16.14
+v 18.85 -11.94 15.88
+v 19.50 -14.55 15.96
+v 19.55 -13.22 15.47
+v 19.60 -11.86 15.68
+v 19.65 -10.83 16.55
+v 19.68 -10.41 17.84
+v 19.68 -10.71 19.20
+v 19.66 -11.65 20.27
+v 19.62 -12.98 20.77
+v 18.82 -14.26 20.41
+v 19.57 -14.34 20.55
+v 18.78 -15.22 19.60
+v 19.52 -15.37 19.68
+v 20.42 -10.87 19.10
+v 20.40 -11.74 20.10
+v 20.36 -12.98 20.56
+v 20.31 -14.25 20.36
+v 20.27 -15.21 19.55
+v 19.49 -15.79 18.40
+v 20.24 -15.60 18.35
+v 19.48 -15.49 17.04
+v 20.23 -15.32 17.08
+v 18.75 -15.61 18.40
+v 20.25 -14.44 16.08
+v 20.29 -13.21 15.62
+v 20.34 -11.94 15.82
+v 20.39 -10.98 16.63
+v 20.42 -10.59 17.83
+# 94 vertices
+
+vn 0.04 -1.00 0.00
+vn 0.41 -0.08 -0.91
+vn -0.34 -0.04 -0.94
+vn 0.94 -0.07 -0.33
+vn 0.93 -0.07 -0.35
+vn 0.90 -0.02 0.44
+vn 0.91 -0.02 0.40
+vn 0.34 0.04 0.94
+vn 0.37 0.04 0.93
+vn -0.41 0.08 0.91
+vn -0.93 0.07 0.35
+vn -0.94 0.07 0.33
+vn -0.91 0.02 -0.40
+vn -0.90 0.02 -0.44
+vn -0.37 -0.04 -0.93
+vn -0.01 -0.06 -1.00
+vn 0.01 0.06 1.00
+vn -0.01 -1.00 0.00
+vn 0.01 1.00 -0.00
+vn 0.96 0.25 0.07
+vn -0.96 -0.25 -0.07
+vn 1.00 -0.05 0.01
+vn 0.05 1.00 -0.00
+vn -1.00 0.05 -0.01
+vn -0.43 0.90 -0.01
+vn -0.97 0.25 -0.01
+vn -1.00 0.04 -0.01
+vn -1.00 0.03 -0.04
+vn -0.98 -0.00 -0.18
+vn -0.98 -0.01 -0.20
+vn -0.06 -1.00 -0.01
+vn -0.08 -1.00 -0.00
+vn -0.07 -1.00 -0.01
+vn -0.09 -1.00 0.00
+vn 0.98 -0.22 0.01
+vn 0.55 -0.83 0.01
+vn -0.29 0.96 -0.00
+vn -0.01 0.05 1.00
+vn 0.29 -0.96 0.00
+vn -0.09 0.28 -0.96
+vn 0.02 -0.06 -1.00
+vn -1.00 0.04 0.01
+vn -0.26 -0.55 -0.79
+vn -0.27 -0.10 -0.96
+vn -0.03 -0.57 -0.82
+vn -0.03 -0.10 -0.99
+vn -0.27 0.40 -0.87
+vn -0.03 0.42 -0.91
+vn -0.26 0.80 -0.53
+vn -0.02 0.83 -0.56
+vn -0.24 0.97 -0.04
+vn -0.00 1.00 -0.05
+vn -0.22 0.87 0.45
+vn 0.01 0.89 0.45
+vn -0.20 0.55 0.81
+vn 0.03 0.57 0.82
+vn -0.20 0.10 0.97
+vn 0.03 0.10 0.99
+vn -0.21 -0.40 0.89
+vn 0.03 -0.42 0.91
+vn -0.22 -0.81 0.55
+vn 0.02 -0.83 0.56
+vn 0.25 0.87 0.44
+vn 0.26 0.55 0.79
+vn 0.27 0.10 0.96
+vn 0.27 -0.40 0.87
+vn 0.26 -0.80 0.53
+vn 0.00 -1.00 0.05
+vn 0.24 -0.97 0.04
+vn -0.01 -0.89 -0.45
+vn 0.22 -0.87 -0.45
+vn -0.24 -0.97 0.05
+vn -0.25 -0.87 -0.44
+vn 0.20 -0.55 -0.81
+vn 0.20 -0.10 -0.97
+vn 0.21 0.40 -0.89
+vn 0.22 0.81 -0.55
+vn 0.24 0.97 -0.05
+vn 1.00 -0.04 -0.01
+# 79 vertex normals
+
+vt 0.07 0.76 0.00
+vt 0.09 0.92 0.00
+vt 0.30 0.92 0.00
+vt 0.30 0.93 0.00
+vt 0.09 0.93 0.00
+vt 0.30 0.94 0.00
+vt 0.09 0.94 0.00
+vt 0.44 0.70 0.00
+vt 0.44 0.73 0.00
+vt 0.44 0.74 0.00
+vt 0.43 0.74 0.00
+vt 0.43 0.75 0.00
+vt 0.31 0.99 0.00
+vt 0.31 0.98 0.00
+vt 0.32 1.00 0.00
+vt 0.33 0.99 0.00
+vt 0.33 0.98 0.00
+vt 0.33 1.00 0.00
+vt 0.32 0.98 0.00
+vt 0.66 0.03 0.00
+vt 0.53 0.08 0.00
+vt 0.67 0.11 0.00
+vt 0.47 0.11 0.00
+vt 0.47 0.08 0.00
+vt 0.61 0.03 0.00
+vt 0.66 0.00 0.00
+vt 0.47 0.00 0.00
+vt 0.08 0.75 0.00
+vt 0.09 0.75 0.00
+vt 0.07 0.75 0.00
+vt 0.03 0.85 0.00
+vt 0.04 0.85 0.00
+vt 0.03 0.84 0.00
+vt 0.04 0.84 0.00
+vt 0.08 0.76 0.00
+vt 0.09 0.74 0.00
+vt 0.42 0.74 0.00
+vt 0.42 0.73 0.00
+vt 0.43 0.73 0.00
+vt 0.42 0.72 0.00
+vt 0.43 0.72 0.00
+vt 0.46 0.73 0.00
+vt 0.46 0.72 0.00
+vt 0.45 0.73 0.00
+vt 0.05 0.68 0.00
+vt 0.03 0.68 0.00
+vt 0.03 0.67 0.00
+vt 0.16 0.67 0.00
+vt 0.08 0.68 0.00
+vt 0.08 0.67 0.00
+vt 0.16 0.66 0.00
+vt 0.07 0.66 0.00
+vt 0.07 0.67 0.00
+vt 0.03 0.66 0.00
+vt 0.82 0.92 0.00
+vt 0.80 0.92 0.00
+vt 0.84 0.93 0.00
+vt 0.85 0.94 0.00
+vt 0.85 0.96 0.00
+vt 0.78 0.98 0.00
+vt 0.77 0.94 0.00
+vt 0.77 0.96 0.00
+vt 0.78 0.93 0.00
+vt 0.31 0.77 0.00
+vt 0.29 0.77 0.00
+vt 0.31 0.76 0.00
+vt 0.29 0.76 0.00
+vt 0.32 0.77 0.00
+vt 0.33 0.76 0.00
+vt 0.34 0.77 0.00
+vt 0.34 0.76 0.00
+vt 0.36 0.77 0.00
+vt 0.36 0.76 0.00
+vt 0.38 0.77 0.00
+vt 0.38 0.76 0.00
+vt 0.39 0.77 0.00
+vt 0.39 0.76 0.00
+vt 0.36 0.75 0.00
+vt 0.38 0.75 0.00
+vt 0.39 0.75 0.00
+vt 0.34 0.75 0.00
+vt 0.32 0.75 0.00
+vt 0.31 0.75 0.00
+vt 0.29 0.75 0.00
+vt 0.84 0.98 0.00
+vt 0.82 0.99 0.00
+vt 0.80 0.99 0.00
+# 87 texture coords
+
+g P_51_Mustang_Left_Landing_Wheel
+f 1954/1261/2008 1955/1261/2008 1956/1261/2008
+f 1957/1261/2008 1956/1261/2008 1955/1261/2008
+f 1958/1262/2009 1959/1263/2009 1960/1262/2010
+f 1959/1263/2009 1958/1262/2009 1961/1264/2011
+f 1962/1265/2012 1961/1264/2011 1958/1262/2009
+f 1961/1264/2011 1962/1265/2012 1963/1266/2013
+f 1964/1267/2014 1963/1266/2013 1962/1265/2012
+f 1963/1266/2013 1964/1267/2014 1965/1266/2015
+f 1966/1267/2016 1965/1266/2015 1964/1267/2014
+f 1965/1266/2015 1966/1267/2016 1967/1266/2017
+f 1968/1267/2017 1967/1266/2017 1966/1267/2016
+f 1967/1266/2017 1968/1267/2017 1969/1266/2018
+f 1970/1267/2019 1969/1266/2018 1968/1267/2017
+f 1969/1266/2018 1970/1267/2019 1971/1264/2020
+f 1972/1265/2021 1971/1264/2020 1970/1267/2019
+f 1971/1264/2020 1972/1265/2021 1973/1263/2022
+f 1960/1262/2010 1973/1263/2022 1972/1265/2021
+f 1973/1263/2022 1960/1262/2010 1959/1263/2009
+f 1974/1268/2023 1975/1268/2023 1976/1269/2023
+f 1975/1268/2023 1977/1269/2023 1976/1269/2023
+f 1976/1269/2023 1977/1269/2023 1978/1270/2023
+f 1977/1269/2023 1979/1270/2023 1978/1270/2023
+f 1978/1270/2023 1979/1270/2023 1980/1271/2023
+f 1979/1270/2023 1981/1272/2023 1980/1271/2023
+f 1982/1272/2024 1983/1270/2024 1984/1271/2024
+f 1983/1270/2024 1985/1270/2024 1984/1271/2024
+f 1986/1269/2024 1985/1270/2024 1983/1270/2024
+f 1987/1269/2024 1985/1270/2024 1986/1269/2024
+f 1988/1268/2024 1987/1269/2024 1986/1269/2024
+f 1989/1268/2024 1987/1269/2024 1988/1268/2024
+f 1967/1273/2025 1969/1274/2025 1965/1275/2025
+f 1969/1274/2025 1961/1276/2025 1965/1275/2025
+f 1973/1277/2025 1961/1276/2025 1969/1274/2025
+f 1959/1277/2025 1961/1276/2025 1973/1277/2025
+f 1965/1275/2025 1961/1276/2025 1963/1278/2025
+f 1958/1279/2026 1960/1277/2026 1962/1274/2026
+f 1960/1277/2026 1966/1275/2026 1962/1274/2026
+f 1970/1276/2026 1966/1275/2026 1960/1277/2026
+f 1968/1278/2026 1966/1275/2026 1970/1276/2026
+f 1972/1277/2026 1970/1276/2026 1960/1277/2026
+f 1990/1280/2027 1991/1281/2027 1992/1282/2027
+f 1992/1282/2027 1991/1281/2027 1993/1283/2027
+f 1991/1281/2027 1994/1284/2027 1993/1283/2027
+f 1995/1280/2028 1996/1285/2028 1997/1286/2028
+f 1996/1285/2028 1998/1287/2028 1997/1286/2028
+f 1999/1284/2028 1998/1287/2028 1996/1285/2028
+f 1956/1288/2029 1957/1288/2029 2000/1288/2029
+f 2001/1288/2029 2000/1288/2029 1957/1288/2029
+f 2000/1288/2030 2001/1288/2030 2002/1289/2030
+f 2003/1289/2030 2002/1289/2030 2001/1288/2030
+f 2002/1290/2031 2003/1290/2031 1954/1290/2031
+f 1955/1290/2031 1954/1290/2031 2003/1290/2031
+f 2004/1291/2023 2005/1292/2023 2006/1293/2023
+f 2007/1294/2023 2006/1293/2023 2005/1292/2023
+f 2008/1293/2024 2009/1291/2024 2010/1294/2024
+f 2011/1292/2024 2010/1294/2024 2009/1291/2024
+f 2009/1290/2008 2005/1261/2008 2011/1288/2008
+f 2004/1295/2008 2011/1288/2008 2005/1261/2008
+f 2011/1289/2029 2004/1289/2029 2010/1289/2029
+f 2006/1289/2029 2010/1289/2029 2004/1289/2029
+f 2010/1288/2030 2006/1288/2030 2008/1288/2030
+f 2007/1288/2030 2008/1288/2030 2006/1288/2030
+f 2008/1296/2031 2007/1296/2031 2009/1296/2031
+f 2005/1296/2031 2009/1296/2031 2007/1296/2031
+f 1982/1297/2032 1981/1298/2032 1983/1271/2032
+f 1979/1299/2032 1983/1271/2032 1981/1298/2032
+f 1983/1298/2033 1979/1300/2033 1986/1299/2033
+f 1977/1301/2033 1986/1299/2033 1979/1300/2033
+f 1986/1299/2034 1977/1301/2035 1988/1302/2036
+f 1975/1303/2037 1988/1302/2036 1977/1301/2035
+f 1988/1299/2038 1975/1299/2039 1989/1271/2040
+f 1974/1271/2041 1989/1271/2040 1975/1299/2039
+f 1989/1298/2029 1974/1298/2029 1987/1304/2029
+f 1976/1304/2029 1987/1304/2029 1974/1298/2029
+f 1987/1304/2042 1976/1304/2042 1985/1302/2042
+f 1978/1302/2042 1985/1302/2042 1976/1304/2042
+f 1985/1297/2043 1978/1271/2043 1984/1297/2043
+f 1980/1271/2043 1984/1297/2043 1978/1271/2043
+f 1994/1305/2044 1995/1305/2044 1993/1306/2044
+f 1997/1306/2044 1993/1306/2044 1995/1305/2044
+f 1998/1307/2045 1992/1307/2045 1997/1308/2045
+f 1993/1308/2045 1997/1308/2045 1992/1307/2045
+f 1999/1306/2046 1990/1307/2046 1998/1309/2046
+f 1992/1310/2046 1998/1309/2046 1990/1307/2046
+f 1990/1311/2047 1999/1308/2047 1991/1312/2047
+f 1996/1313/2047 1991/1312/2047 1999/1308/2047
+f 1995/1307/2048 1994/1314/2048 1996/1313/2048
+f 1991/1312/2048 1996/1313/2048 1994/1314/2048
+f 1962/1274/2026 1966/1275/2026 1964/1273/2026
+f 1957/1291/2023 1955/1292/2023 2001/1293/2023
+f 2003/1294/2023 2001/1293/2023 1955/1292/2023
+f 2002/1293/2024 1954/1291/2024 2000/1294/2024
+f 1956/1292/2024 2000/1294/2024 1954/1291/2024
+f 1971/1279/2025 1973/1277/2025 1969/1274/2025
+f 2012/1315/2049 2013/1316/2049 2014/1317/2049
+f 2015/1318/2049 2014/1317/2049 2016/1319/2049
+f 2014/1317/2049 2013/1316/2049 2016/1319/2049
+f 2013/1316/2049 2017/1320/2049 2016/1319/2049
+f 2018/1321/2049 2017/1320/2049 2013/1316/2049
+f 2019/1322/2049 2017/1320/2049 2018/1321/2049
+f 2020/1323/2049 2018/1321/2049 2013/1316/2049
+f 2019/1324/2050 2018/1325/2051 2021/1326/2052
+f 2022/1327/2053 2021/1326/2052 2018/1325/2051
+f 2018/1325/2051 2020/1324/2054 2022/1327/2053
+f 2023/1326/2055 2022/1327/2053 2020/1324/2054
+f 2020/1324/2054 2013/1328/2056 2023/1326/2055
+f 2024/1329/2057 2023/1326/2055 2013/1328/2056
+f 2013/1328/2056 2012/1330/2058 2024/1329/2057
+f 2025/1331/2059 2024/1329/2057 2012/1330/2058
+f 2012/1330/2058 2014/1332/2060 2025/1331/2059
+f 2026/1333/2061 2025/1331/2059 2014/1332/2060
+f 2014/1332/2060 2015/1334/2062 2026/1333/2061
+f 2027/1335/2063 2026/1333/2061 2015/1334/2062
+f 2015/1334/2062 2016/1336/2064 2027/1335/2063
+f 2028/1337/2065 2027/1335/2063 2016/1336/2064
+f 2016/1336/2064 2029/1334/2066 2028/1337/2065
+f 2030/1335/2067 2028/1337/2065 2029/1334/2066
+f 2029/1334/2066 2031/1332/2068 2030/1335/2067
+f 2032/1333/2069 2030/1335/2067 2031/1332/2068
+f 2026/1333/2061 2027/1335/2063 2033/1338/2070
+f 2034/1339/2071 2033/1338/2070 2027/1335/2063
+f 2027/1335/2063 2028/1337/2065 2034/1339/2071
+f 2035/1340/2072 2034/1339/2071 2028/1337/2065
+f 2028/1337/2065 2030/1335/2067 2035/1340/2072
+f 2036/1339/2073 2035/1340/2072 2030/1335/2067
+f 2030/1335/2067 2032/1333/2069 2036/1339/2073
+f 2037/1338/2074 2036/1339/2073 2032/1333/2069
+f 2032/1333/2069 2038/1331/2075 2037/1338/2074
+f 2039/1341/2076 2037/1338/2074 2038/1331/2075
+f 2038/1331/2075 2040/1329/2077 2039/1341/2076
+f 2041/1342/2078 2039/1341/2076 2040/1329/2077
+f 2031/1332/2068 2042/1330/2079 2032/1333/2069
+f 2038/1331/2075 2032/1333/2069 2042/1330/2079
+f 2042/1330/2079 2017/1328/2080 2038/1331/2075
+f 2040/1329/2077 2038/1331/2075 2017/1328/2080
+f 2017/1328/2080 2019/1324/2050 2040/1329/2077
+f 2021/1326/2052 2040/1329/2077 2019/1324/2050
+f 2040/1329/2077 2021/1326/2052 2041/1342/2078
+f 2043/1343/2081 2041/1342/2078 2021/1326/2052
+f 2021/1326/2052 2022/1327/2053 2043/1343/2081
+f 2044/1344/2082 2043/1343/2081 2022/1327/2053
+f 2022/1327/2053 2023/1326/2055 2044/1344/2082
+f 2045/1343/2083 2044/1344/2082 2023/1326/2055
+f 2023/1326/2055 2024/1329/2057 2045/1343/2083
+f 2046/1342/2084 2045/1343/2083 2024/1329/2057
+f 2024/1329/2057 2025/1331/2059 2046/1342/2084
+f 2047/1341/2085 2046/1342/2084 2025/1331/2059
+f 2025/1331/2059 2026/1333/2061 2047/1341/2085
+f 2033/1338/2070 2047/1341/2085 2026/1333/2061
+f 2044/1319/2086 2045/1318/2086 2043/1345/2086
+f 2045/1318/2086 2047/1315/2086 2043/1345/2086
+f 2043/1345/2086 2047/1315/2086 2036/1322/2086
+f 2047/1315/2086 2034/1323/2086 2036/1322/2086
+f 2036/1322/2086 2034/1323/2086 2035/1321/2086
+f 2033/1316/2086 2034/1323/2086 2047/1315/2086
+f 2046/1317/2086 2047/1315/2086 2045/1318/2086
+f 2041/1346/2086 2043/1345/2086 2039/1347/2086
+f 2039/1347/2086 2043/1345/2086 2036/1322/2086
+f 2037/1320/2086 2039/1347/2086 2036/1322/2086
+f 2042/1347/2049 2031/1346/2049 2017/1320/2049
+f 2017/1320/2049 2031/1346/2049 2016/1319/2049
+f 2016/1319/2049 2031/1346/2049 2029/1345/2049
+# 162 faces
+
+#
+# object P_51_Mustang_Left_Rockets
+#
+
+v 28.30 -4.77 8.29
+v 28.33 -4.86 5.62
+v 28.36 -4.84 8.30
+v 28.39 -4.93 5.63
+v 30.30 -3.78 17.72
+v 30.11 -3.64 18.78
+v 29.93 -4.14 17.76
+v 29.98 -4.36 6.27
+v 29.58 -4.47 6.28
+v 29.44 -4.27 17.78
+v 29.18 -4.36 6.28
+v 28.96 -4.13 17.77
+v 28.90 -4.06 6.25
+v 28.63 -3.77 17.74
+v 28.82 -3.65 6.22
+v 28.52 -3.28 17.70
+v 28.94 -3.25 6.18
+v 28.67 -2.78 17.65
+v 29.25 -2.95 6.15
+v 29.04 -2.43 17.61
+v 29.65 -2.85 6.14
+v 29.53 -2.30 17.60
+v 30.05 -2.96 6.14
+v 30.01 -2.44 17.60
+v 28.80 -3.63 18.79
+v 29.07 -3.91 18.82
+v 29.44 -4.02 18.82
+v 29.82 -3.92 18.81
+v 29.46 -3.20 20.36
+v 30.23 -3.25 18.75
+v 30.46 -3.29 17.68
+v 30.29 -4.07 6.24
+v 30.41 -3.66 6.20
+v 29.13 -2.58 18.69
+v 28.84 -2.86 18.72
+v 28.72 -3.24 18.76
+v 29.51 -2.48 18.68
+v 30.32 -3.26 6.17
+v 30.35 -2.80 17.63
+v 30.15 -2.87 18.71
+v 29.89 -2.58 18.69
+v 29.57 -3.63 6.19
+v 29.64 -3.70 6.20
+v 30.92 -2.50 5.38
+v 30.85 -2.43 5.38
+v 29.61 -3.61 8.86
+v 29.55 -3.54 8.86
+v 30.89 -2.41 8.05
+v 30.82 -2.34 8.04
+v 30.77 -4.79 8.27
+v 29.63 -3.54 8.86
+v 30.70 -4.86 8.27
+v 29.56 -3.61 8.86
+v 28.48 -2.33 8.06
+v 28.41 -2.40 8.07
+v 30.73 -4.94 5.61
+v 29.59 -3.70 6.20
+v 28.44 -2.48 5.41
+v 28.51 -2.41 5.40
+v 29.66 -3.63 6.19
+v 30.80 -4.88 5.60
+v 30.94 -4.79 8.27
+v 30.97 -4.88 5.60
+v 31.00 -4.86 8.27
+v 31.03 -4.95 5.60
+v 32.94 -3.80 17.70
+v 32.75 -3.66 18.76
+v 32.57 -4.16 17.74
+v 32.62 -4.38 6.25
+v 32.21 -4.49 6.26
+v 32.08 -4.29 17.75
+v 31.82 -4.38 6.25
+v 31.60 -4.15 17.74
+v 31.54 -4.08 6.23
+v 31.26 -3.79 17.71
+v 31.45 -3.67 6.19
+v 31.16 -3.30 17.67
+v 31.58 -3.27 6.15
+v 31.31 -2.81 17.62
+v 31.89 -2.97 6.12
+v 31.68 -2.45 17.59
+v 32.29 -2.87 6.11
+v 32.17 -2.32 17.57
+v 32.68 -2.98 6.12
+v 32.65 -2.46 17.58
+v 31.44 -3.65 18.77
+v 31.70 -3.93 18.79
+v 32.08 -4.04 18.80
+v 32.46 -3.94 18.79
+v 32.09 -3.22 20.34
+v 32.87 -3.27 18.72
+v 33.09 -3.31 17.65
+v 32.92 -4.09 6.22
+v 33.05 -3.68 6.18
+v 31.77 -2.60 18.67
+v 31.48 -2.88 18.70
+v 31.36 -3.26 18.73
+v 32.15 -2.50 18.66
+v 32.96 -3.28 6.14
+v 32.99 -2.82 17.61
+v 32.79 -2.89 18.69
+v 32.52 -2.61 18.66
+v 32.21 -3.65 6.17
+v 32.28 -3.72 6.17
+v 33.55 -2.52 5.36
+v 33.49 -2.45 5.35
+v 32.25 -3.63 8.84
+v 32.18 -3.56 8.83
+v 33.52 -2.43 8.02
+v 33.46 -2.36 8.02
+v 33.41 -4.81 8.24
+v 32.27 -3.56 8.83
+v 33.34 -4.88 8.25
+v 32.19 -3.63 8.84
+v 31.12 -2.35 8.04
+v 31.05 -2.42 8.05
+v 33.37 -4.96 5.58
+v 32.22 -3.72 6.17
+v 31.08 -2.50 5.38
+v 31.15 -2.43 5.37
+v 32.29 -3.65 6.16
+v 33.44 -4.90 5.58
+v 33.69 -4.81 8.24
+v 33.72 -4.90 5.57
+v 33.75 -4.88 8.25
+v 33.78 -4.97 5.58
+v 35.69 -3.82 17.67
+v 35.50 -3.68 18.73
+v 35.32 -4.18 17.71
+v 35.37 -4.40 6.22
+v 34.96 -4.51 6.23
+v 34.83 -4.31 17.73
+v 34.57 -4.40 6.23
+v 34.35 -4.17 17.72
+v 34.29 -4.10 6.20
+v 34.01 -3.81 17.69
+v 34.21 -3.69 6.17
+v 33.91 -3.32 17.64
+v 34.33 -3.29 6.13
+v 34.06 -2.83 17.60
+v 34.64 -2.99 6.10
+v 34.43 -2.47 17.56
+v 35.04 -2.89 6.08
+v 34.92 -2.34 17.54
+v 35.44 -3.00 6.09
+v 35.40 -2.48 17.55
+v 34.19 -3.67 18.74
+v 34.45 -3.95 18.77
+v 34.83 -4.06 18.77
+v 35.21 -3.96 18.76
+v 34.85 -3.24 20.31
+v 35.62 -3.30 18.69
+v 35.84 -3.33 17.63
+v 35.67 -4.11 6.19
+v 35.80 -3.71 6.15
+v 34.52 -2.62 18.64
+v 34.23 -2.90 18.67
+v 34.11 -3.28 18.71
+v 34.90 -2.52 18.63
+v 35.71 -3.30 6.12
+v 35.74 -2.84 17.58
+v 35.54 -2.91 18.66
+v 35.27 -2.63 18.64
+v 34.96 -3.67 6.14
+v 35.03 -3.74 6.15
+v 36.31 -2.54 5.33
+v 36.24 -2.47 5.32
+v 35.00 -3.65 8.81
+v 34.93 -3.58 8.81
+v 36.28 -2.46 8.00
+v 36.21 -2.39 7.99
+v 36.16 -4.83 8.22
+v 35.02 -3.58 8.81
+v 36.09 -4.90 8.22
+v 34.94 -3.65 8.81
+v 33.87 -2.37 8.01
+v 33.80 -2.44 8.02
+v 36.12 -4.99 5.56
+v 34.97 -3.74 6.15
+v 33.83 -2.52 5.35
+v 33.90 -2.45 5.35
+v 35.05 -3.67 6.14
+v 36.19 -4.92 5.55
+# 183 vertices
+
+vn -0.73 -0.68 0.01
+vn 0.85 -0.51 0.11
+vn 0.82 -0.47 0.33
+vn 0.49 -0.86 0.12
+vn 0.50 -0.87 0.02
+vn -0.01 -1.00 0.02
+vn -0.01 -0.99 0.12
+vn -0.52 -0.85 0.01
+vn -0.52 -0.85 0.12
+vn -0.89 -0.46 -0.01
+vn -0.89 -0.45 0.10
+vn -1.00 0.05 -0.03
+vn -1.00 0.05 0.08
+vn -0.85 0.53 -0.04
+vn -0.85 0.53 0.06
+vn -0.48 0.87 -0.05
+vn -0.49 0.87 0.05
+vn 0.01 1.00 -0.05
+vn 0.01 1.00 0.06
+vn 0.52 0.85 -0.04
+vn 0.52 0.85 0.07
+vn -0.85 -0.42 0.32
+vn -0.50 -0.79 0.34
+vn -0.01 -0.94 0.35
+vn 0.47 -0.81 0.34
+vn -0.35 -0.53 0.78
+vn 0.92 -0.26 0.31
+vn 0.95 -0.29 0.10
+vn 0.86 -0.52 0.01
+vn 0.95 -0.30 0.01
+vn -0.46 0.85 0.27
+vn -0.81 0.52 0.28
+vn -0.95 0.07 0.30
+vn 0.01 0.96 0.27
+vn 0.45 0.77 0.46
+vn 0.88 0.47 -0.02
+vn 0.88 0.47 0.08
+vn 0.98 0.21 -0.01
+vn 0.97 0.22 0.09
+vn 0.84 0.46 0.30
+vn 0.93 0.23 0.30
+vn 0.49 0.82 0.29
+vn -0.01 -0.09 -1.00
+vn 0.27 0.17 -0.95
+vn 0.00 -0.08 -1.00
+vn -0.27 -0.33 -0.91
+vn -0.27 -0.17 0.95
+vn -0.00 0.08 1.00
+vn 0.01 0.09 1.00
+vn 0.27 0.33 0.91
+vn -0.69 0.72 -0.03
+vn 0.28 -0.19 0.94
+vn 0.02 0.08 1.00
+vn -0.25 0.35 0.90
+vn 0.25 -0.35 -0.90
+vn -0.02 -0.08 -1.00
+vn -0.28 0.19 -0.94
+vn 0.73 0.68 -0.01
+vn 0.69 -0.72 0.03
+# 59 vertex normals
+
+vt 0.81 0.65 0.00
+vt 0.71 0.65 0.00
+vt 0.83 0.57 0.00
+vt 0.85 0.57 0.00
+vt 0.64 0.57 0.00
+vt 0.64 0.58 0.00
+vt 0.83 0.58 0.00
+vt 0.64 0.59 0.00
+vt 0.83 0.59 0.00
+vt 0.64 0.60 0.00
+vt 0.83 0.60 0.00
+vt 0.85 0.58 0.00
+vt 0.89 0.58 0.00
+vt 0.85 0.59 0.00
+vt 0.85 0.60 0.00
+vt 0.89 0.60 0.00
+vt 0.64 0.61 0.00
+vt 0.83 0.61 0.00
+vt 0.85 0.61 0.00
+vt 0.37 0.73 0.00
+vt 0.37 0.74 0.00
+vt 0.39 0.74 0.00
+vt 0.39 0.72 0.00
+vt 0.39 0.73 0.00
+vt 0.38 0.74 0.00
+vt 0.69 0.65 0.00
+vt 0.75 0.65 0.00
+vt 0.91 0.70 0.00
+vt 0.91 0.66 0.00
+vt 0.98 0.70 0.00
+vt 0.98 0.66 0.00
+vt 0.91 0.63 0.00
+vt 0.98 0.63 0.00
+vt 0.37 0.72 0.00
+vt 0.38 0.71 0.00
+# 35 texture coords
+
+g P_51_Mustang_Left_Rockets
+f 2048/1348/2087 2049/1349/2087 2050/1348/2087
+f 2051/1349/2087 2050/1348/2087 2049/1349/2087
+f 2052/1350/2088 2053/1351/2089 2054/1350/2090
+f 2054/1350/2090 2055/1352/2091 2052/1350/2088
+f 2055/1352/2091 2054/1350/2090 2056/1353/2092
+f 2057/1354/2093 2056/1353/2092 2054/1350/2090
+f 2056/1353/2092 2057/1354/2093 2058/1353/2094
+f 2059/1354/2095 2058/1353/2094 2057/1354/2093
+f 2058/1353/2094 2059/1354/2095 2060/1353/2096
+f 2061/1354/2097 2060/1353/2096 2059/1354/2095
+f 2060/1353/2096 2061/1354/2097 2062/1355/2098
+f 2063/1356/2099 2062/1355/2098 2061/1354/2097
+f 2062/1355/2098 2063/1356/2099 2064/1355/2100
+f 2065/1356/2101 2064/1355/2100 2063/1356/2099
+f 2064/1355/2100 2065/1356/2101 2066/1355/2102
+f 2067/1356/2103 2066/1355/2102 2065/1356/2101
+f 2066/1355/2102 2067/1356/2103 2068/1357/2104
+f 2069/1358/2105 2068/1357/2104 2067/1356/2103
+f 2068/1357/2104 2069/1358/2105 2070/1357/2106
+f 2071/1358/2107 2070/1357/2106 2069/1358/2105
+f 2061/1354/2097 2072/1359/2108 2063/1356/2099
+f 2072/1359/2108 2061/1354/2097 2073/1359/2109
+f 2059/1354/2095 2073/1359/2109 2061/1354/2097
+f 2073/1359/2109 2059/1354/2095 2074/1359/2110
+f 2057/1354/2093 2074/1359/2110 2059/1354/2095
+f 2074/1359/2110 2057/1354/2093 2075/1351/2111
+f 2054/1350/2090 2075/1351/2111 2057/1354/2093
+f 2075/1351/2111 2054/1350/2090 2053/1351/2089
+f 2075/1351/2111 2053/1351/2089 2076/1360/2112
+f 2053/1351/2089 2077/1351/2113 2076/1360/2112
+f 2053/1351/2089 2052/1350/2088 2077/1351/2113
+f 2078/1350/2114 2077/1351/2113 2052/1350/2088
+f 2052/1350/2088 2079/1352/2115 2078/1350/2114
+f 2080/1352/2116 2078/1350/2114 2079/1352/2115
+f 2081/1361/2117 2082/1361/2118 2076/1360/2112
+f 2082/1361/2118 2083/1361/2119 2076/1360/2112
+f 2083/1361/2119 2072/1359/2108 2076/1360/2112
+f 2072/1359/2108 2073/1359/2109 2076/1360/2112
+f 2073/1359/2109 2074/1359/2110 2076/1360/2112
+f 2074/1359/2110 2075/1351/2111 2076/1360/2112
+f 2084/1362/2120 2081/1361/2117 2076/1363/2121
+f 2070/1357/2106 2071/1358/2107 2085/1357/2122
+f 2086/1358/2123 2085/1357/2122 2071/1358/2107
+f 2085/1357/2122 2086/1358/2123 2080/1364/2124
+f 2078/1365/2125 2080/1364/2124 2086/1358/2123
+f 2086/1358/2123 2087/1362/2126 2078/1365/2125
+f 2077/1366/2127 2078/1365/2125 2087/1362/2126
+f 2077/1366/2127 2087/1362/2126 2076/1363/2121
+f 2087/1362/2126 2088/1362/2128 2076/1363/2121
+f 2088/1362/2128 2084/1362/2120 2076/1363/2121
+f 2088/1362/2128 2071/1358/2107 2084/1362/2120
+f 2069/1358/2105 2084/1362/2120 2071/1358/2107
+f 2084/1362/2120 2069/1358/2105 2081/1361/2117
+f 2067/1356/2103 2081/1361/2117 2069/1358/2105
+f 2081/1361/2117 2067/1356/2103 2082/1361/2118
+f 2065/1356/2101 2082/1361/2118 2067/1356/2103
+f 2082/1361/2118 2065/1356/2101 2083/1361/2119
+f 2063/1356/2099 2083/1361/2119 2065/1356/2101
+f 2083/1361/2119 2063/1356/2099 2072/1359/2108
+f 2087/1362/2126 2086/1358/2123 2088/1362/2128
+f 2071/1358/2107 2088/1362/2128 2086/1358/2123
+f 2085/1367/2129 2080/1367/2129 2070/1368/2129
+f 2080/1367/2129 2066/1369/2129 2070/1368/2129
+f 2058/1370/2129 2066/1369/2129 2080/1367/2129
+f 2062/1371/2129 2066/1369/2129 2058/1370/2129
+f 2060/1370/2129 2062/1371/2129 2058/1370/2129
+f 2070/1368/2129 2066/1369/2129 2068/1372/2129
+f 2064/1371/2129 2066/1369/2129 2062/1371/2129
+f 2049/1373/2130 2089/1374/2129 2051/1373/2130
+f 2090/1374/2131 2051/1373/2130 2089/1374/2129
+f 2090/1374/2131 2089/1374/2129 2091/1348/2132
+f 2092/1348/2132 2091/1348/2132 2089/1374/2129
+f 2050/1373/2133 2093/1374/2134 2048/1373/2133
+f 2094/1374/2135 2048/1373/2133 2093/1374/2134
+f 2093/1374/2134 2095/1348/2136 2094/1374/2135
+f 2096/1348/2136 2094/1374/2135 2095/1348/2136
+f 2048/1375/2137 2094/1376/2137 2049/1377/2137
+f 2089/1378/2137 2049/1377/2137 2094/1376/2137
+f 2094/1376/2137 2096/1379/2137 2089/1378/2137
+f 2092/1380/2137 2089/1378/2137 2096/1379/2137
+f 2097/1373/2138 2098/1374/2135 2099/1373/2138
+f 2100/1374/2139 2099/1373/2138 2098/1374/2135
+f 2098/1374/2135 2101/1348/2140 2100/1374/2139
+f 2102/1348/2140 2100/1374/2139 2101/1348/2140
+f 2099/1375/2087 2100/1376/2087 2103/1377/2087
+f 2104/1378/2087 2103/1377/2087 2100/1376/2087
+f 2100/1376/2087 2102/1379/2087 2104/1378/2087
+f 2105/1380/2087 2104/1378/2087 2102/1379/2087
+f 2105/1348/2141 2106/1348/2141 2104/1374/2142
+f 2107/1374/2129 2104/1374/2142 2106/1348/2141
+f 2107/1374/2129 2108/1373/2143 2104/1374/2142
+f 2103/1373/2143 2104/1374/2142 2108/1373/2143
+f 2101/1375/2144 2098/1376/2144 2106/1377/2144
+f 2107/1378/2144 2106/1377/2144 2098/1376/2144
+f 2098/1376/2144 2097/1379/2144 2107/1378/2144
+f 2108/1380/2144 2107/1378/2144 2097/1379/2144
+f 2079/1381/2129 2055/1381/2129 2080/1367/2129
+f 2055/1381/2129 2058/1370/2129 2080/1367/2129
+f 2056/1382/2129 2058/1370/2129 2055/1381/2129
+f 2095/1375/2145 2093/1376/2145 2091/1377/2145
+f 2090/1378/2145 2091/1377/2145 2093/1376/2145
+f 2093/1376/2145 2050/1379/2145 2090/1378/2145
+f 2051/1380/2145 2090/1378/2145 2050/1379/2145
+f 2095/1348/2144 2091/1349/2144 2096/1348/2144
+f 2092/1349/2144 2096/1348/2144 2091/1349/2144
+f 2099/1348/2145 2103/1349/2145 2097/1348/2145
+f 2108/1349/2145 2097/1348/2145 2103/1349/2145
+f 2101/1348/2137 2106/1349/2137 2102/1348/2137
+f 2105/1349/2137 2102/1348/2137 2106/1349/2137
+f 2079/1352/2115 2052/1350/2088 2055/1352/2091
+f 2109/1348/2087 2110/1349/2087 2111/1348/2087
+f 2112/1349/2087 2111/1348/2087 2110/1349/2087
+f 2113/1350/2088 2114/1351/2089 2115/1350/2090
+f 2115/1350/2090 2116/1352/2091 2113/1350/2088
+f 2116/1352/2091 2115/1350/2090 2117/1353/2092
+f 2118/1354/2093 2117/1353/2092 2115/1350/2090
+f 2117/1353/2092 2118/1354/2093 2119/1353/2094
+f 2120/1354/2095 2119/1353/2094 2118/1354/2093
+f 2119/1353/2094 2120/1354/2095 2121/1353/2096
+f 2122/1354/2097 2121/1353/2096 2120/1354/2095
+f 2121/1353/2096 2122/1354/2097 2123/1355/2098
+f 2124/1356/2099 2123/1355/2098 2122/1354/2097
+f 2123/1355/2098 2124/1356/2099 2125/1355/2100
+f 2126/1356/2101 2125/1355/2100 2124/1356/2099
+f 2125/1355/2100 2126/1356/2101 2127/1355/2102
+f 2128/1356/2103 2127/1355/2102 2126/1356/2101
+f 2127/1355/2102 2128/1356/2103 2129/1357/2104
+f 2130/1358/2105 2129/1357/2104 2128/1356/2103
+f 2129/1357/2104 2130/1358/2105 2131/1357/2106
+f 2132/1358/2107 2131/1357/2106 2130/1358/2105
+f 2122/1354/2097 2133/1359/2108 2124/1356/2099
+f 2133/1359/2108 2122/1354/2097 2134/1359/2109
+f 2120/1354/2095 2134/1359/2109 2122/1354/2097
+f 2134/1359/2109 2120/1354/2095 2135/1359/2110
+f 2118/1354/2093 2135/1359/2110 2120/1354/2095
+f 2135/1359/2110 2118/1354/2093 2136/1351/2111
+f 2115/1350/2090 2136/1351/2111 2118/1354/2093
+f 2136/1351/2111 2115/1350/2090 2114/1351/2089
+f 2136/1351/2111 2114/1351/2089 2137/1360/2112
+f 2114/1351/2089 2138/1351/2113 2137/1360/2112
+f 2114/1351/2089 2113/1350/2088 2138/1351/2113
+f 2139/1350/2114 2138/1351/2113 2113/1350/2088
+f 2113/1350/2088 2140/1352/2115 2139/1350/2114
+f 2141/1352/2116 2139/1350/2114 2140/1352/2115
+f 2142/1361/2117 2143/1361/2118 2137/1360/2112
+f 2143/1361/2118 2144/1361/2119 2137/1360/2112
+f 2144/1361/2119 2133/1359/2108 2137/1360/2112
+f 2133/1359/2108 2134/1359/2109 2137/1360/2112
+f 2134/1359/2109 2135/1359/2110 2137/1360/2112
+f 2135/1359/2110 2136/1351/2111 2137/1360/2112
+f 2145/1362/2120 2142/1361/2117 2137/1363/2121
+f 2131/1357/2106 2132/1358/2107 2146/1357/2122
+f 2147/1358/2123 2146/1357/2122 2132/1358/2107
+f 2146/1357/2122 2147/1358/2123 2141/1364/2124
+f 2139/1365/2125 2141/1364/2124 2147/1358/2123
+f 2147/1358/2123 2148/1362/2126 2139/1365/2125
+f 2138/1366/2127 2139/1365/2125 2148/1362/2126
+f 2138/1366/2127 2148/1362/2126 2137/1363/2121
+f 2148/1362/2126 2149/1362/2128 2137/1363/2121
+f 2149/1362/2128 2145/1362/2120 2137/1363/2121
+f 2149/1362/2128 2132/1358/2107 2145/1362/2120
+f 2130/1358/2105 2145/1362/2120 2132/1358/2107
+f 2145/1362/2120 2130/1358/2105 2142/1361/2117
+f 2128/1356/2103 2142/1361/2117 2130/1358/2105
+f 2142/1361/2117 2128/1356/2103 2143/1361/2118
+f 2126/1356/2101 2143/1361/2118 2128/1356/2103
+f 2143/1361/2118 2126/1356/2101 2144/1361/2119
+f 2124/1356/2099 2144/1361/2119 2126/1356/2101
+f 2144/1361/2119 2124/1356/2099 2133/1359/2108
+f 2148/1362/2126 2147/1358/2123 2149/1362/2128
+f 2132/1358/2107 2149/1362/2128 2147/1358/2123
+f 2146/1367/2129 2141/1367/2129 2131/1368/2129
+f 2141/1367/2129 2127/1369/2129 2131/1368/2129
+f 2119/1370/2129 2127/1369/2129 2141/1367/2129
+f 2123/1371/2129 2127/1369/2129 2119/1370/2129
+f 2121/1370/2129 2123/1371/2129 2119/1370/2129
+f 2131/1368/2129 2127/1369/2129 2129/1372/2129
+f 2125/1371/2129 2127/1369/2129 2123/1371/2129
+f 2110/1373/2130 2150/1374/2129 2112/1373/2130
+f 2151/1374/2131 2112/1373/2130 2150/1374/2129
+f 2151/1374/2131 2150/1374/2129 2152/1348/2132
+f 2153/1348/2132 2152/1348/2132 2150/1374/2129
+f 2111/1373/2133 2154/1374/2134 2109/1373/2133
+f 2155/1374/2135 2109/1373/2133 2154/1374/2134
+f 2154/1374/2134 2156/1348/2136 2155/1374/2135
+f 2157/1348/2136 2155/1374/2135 2156/1348/2136
+f 2109/1375/2137 2155/1376/2137 2110/1377/2137
+f 2150/1378/2137 2110/1377/2137 2155/1376/2137
+f 2155/1376/2137 2157/1379/2137 2150/1378/2137
+f 2153/1380/2137 2150/1378/2137 2157/1379/2137
+f 2158/1373/2138 2159/1374/2135 2160/1373/2138
+f 2161/1374/2139 2160/1373/2138 2159/1374/2135
+f 2159/1374/2135 2162/1348/2140 2161/1374/2139
+f 2163/1348/2140 2161/1374/2139 2162/1348/2140
+f 2160/1375/2087 2161/1376/2087 2164/1377/2087
+f 2165/1378/2087 2164/1377/2087 2161/1376/2087
+f 2161/1376/2087 2163/1379/2087 2165/1378/2087
+f 2166/1380/2087 2165/1378/2087 2163/1379/2087
+f 2166/1348/2141 2167/1348/2141 2165/1374/2142
+f 2168/1374/2129 2165/1374/2142 2167/1348/2141
+f 2168/1374/2129 2169/1373/2143 2165/1374/2142
+f 2164/1373/2143 2165/1374/2142 2169/1373/2143
+f 2162/1375/2144 2159/1376/2144 2167/1377/2144
+f 2168/1378/2144 2167/1377/2144 2159/1376/2144
+f 2159/1376/2144 2158/1379/2144 2168/1378/2144
+f 2169/1380/2144 2168/1378/2144 2158/1379/2144
+f 2140/1381/2129 2116/1381/2129 2141/1367/2129
+f 2116/1381/2129 2119/1370/2129 2141/1367/2129
+f 2117/1382/2129 2119/1370/2129 2116/1381/2129
+f 2156/1375/2145 2154/1376/2145 2152/1377/2145
+f 2151/1378/2145 2152/1377/2145 2154/1376/2145
+f 2154/1376/2145 2111/1379/2145 2151/1378/2145
+f 2112/1380/2145 2151/1378/2145 2111/1379/2145
+f 2156/1348/2144 2152/1349/2144 2157/1348/2144
+f 2153/1349/2144 2157/1348/2144 2152/1349/2144
+f 2160/1348/2145 2164/1349/2145 2158/1348/2145
+f 2169/1349/2145 2158/1348/2145 2164/1349/2145
+f 2162/1348/2137 2167/1349/2137 2163/1348/2137
+f 2166/1349/2137 2163/1348/2137 2167/1349/2137
+f 2140/1352/2115 2113/1350/2088 2116/1352/2091
+f 2170/1348/2087 2171/1349/2087 2172/1348/2087
+f 2173/1349/2087 2172/1348/2087 2171/1349/2087
+f 2174/1350/2088 2175/1351/2089 2176/1350/2090
+f 2176/1350/2090 2177/1352/2091 2174/1350/2088
+f 2177/1352/2091 2176/1350/2090 2178/1353/2092
+f 2179/1354/2093 2178/1353/2092 2176/1350/2090
+f 2178/1353/2092 2179/1354/2093 2180/1353/2094
+f 2181/1354/2095 2180/1353/2094 2179/1354/2093
+f 2180/1353/2094 2181/1354/2095 2182/1353/2096
+f 2183/1354/2097 2182/1353/2096 2181/1354/2095
+f 2182/1353/2096 2183/1354/2097 2184/1355/2098
+f 2185/1356/2099 2184/1355/2098 2183/1354/2097
+f 2184/1355/2098 2185/1356/2099 2186/1355/2100
+f 2187/1356/2101 2186/1355/2100 2185/1356/2099
+f 2186/1355/2100 2187/1356/2101 2188/1355/2102
+f 2189/1356/2103 2188/1355/2102 2187/1356/2101
+f 2188/1355/2102 2189/1356/2103 2190/1357/2104
+f 2191/1358/2105 2190/1357/2104 2189/1356/2103
+f 2190/1357/2104 2191/1358/2105 2192/1357/2106
+f 2193/1358/2107 2192/1357/2106 2191/1358/2105
+f 2183/1354/2097 2194/1359/2108 2185/1356/2099
+f 2194/1359/2108 2183/1354/2097 2195/1359/2109
+f 2181/1354/2095 2195/1359/2109 2183/1354/2097
+f 2195/1359/2109 2181/1354/2095 2196/1359/2110
+f 2179/1354/2093 2196/1359/2110 2181/1354/2095
+f 2196/1359/2110 2179/1354/2093 2197/1351/2111
+f 2176/1350/2090 2197/1351/2111 2179/1354/2093
+f 2197/1351/2111 2176/1350/2090 2175/1351/2089
+f 2197/1351/2111 2175/1351/2089 2198/1360/2112
+f 2175/1351/2089 2199/1351/2113 2198/1360/2112
+f 2175/1351/2089 2174/1350/2088 2199/1351/2113
+f 2200/1350/2114 2199/1351/2113 2174/1350/2088
+f 2174/1350/2088 2201/1352/2115 2200/1350/2114
+f 2202/1352/2116 2200/1350/2114 2201/1352/2115
+f 2203/1361/2117 2204/1361/2118 2198/1360/2112
+f 2204/1361/2118 2205/1361/2119 2198/1360/2112
+f 2205/1361/2119 2194/1359/2108 2198/1360/2112
+f 2194/1359/2108 2195/1359/2109 2198/1360/2112
+f 2195/1359/2109 2196/1359/2110 2198/1360/2112
+f 2196/1359/2110 2197/1351/2111 2198/1360/2112
+f 2206/1362/2120 2203/1361/2117 2198/1363/2121
+f 2192/1357/2106 2193/1358/2107 2207/1357/2122
+f 2208/1358/2123 2207/1357/2122 2193/1358/2107
+f 2207/1357/2122 2208/1358/2123 2202/1364/2124
+f 2200/1365/2125 2202/1364/2124 2208/1358/2123
+f 2208/1358/2123 2209/1362/2126 2200/1365/2125
+f 2199/1366/2127 2200/1365/2125 2209/1362/2126
+f 2199/1366/2127 2209/1362/2126 2198/1363/2121
+f 2209/1362/2126 2210/1362/2128 2198/1363/2121
+f 2210/1362/2128 2206/1362/2120 2198/1363/2121
+f 2210/1362/2128 2193/1358/2107 2206/1362/2120
+f 2191/1358/2105 2206/1362/2120 2193/1358/2107
+f 2206/1362/2120 2191/1358/2105 2203/1361/2117
+f 2189/1356/2103 2203/1361/2117 2191/1358/2105
+f 2203/1361/2117 2189/1356/2103 2204/1361/2118
+f 2187/1356/2101 2204/1361/2118 2189/1356/2103
+f 2204/1361/2118 2187/1356/2101 2205/1361/2119
+f 2185/1356/2099 2205/1361/2119 2187/1356/2101
+f 2205/1361/2119 2185/1356/2099 2194/1359/2108
+f 2209/1362/2126 2208/1358/2123 2210/1362/2128
+f 2193/1358/2107 2210/1362/2128 2208/1358/2123
+f 2207/1367/2129 2202/1367/2129 2192/1368/2129
+f 2202/1367/2129 2188/1369/2129 2192/1368/2129
+f 2180/1370/2129 2188/1369/2129 2202/1367/2129
+f 2184/1371/2129 2188/1369/2129 2180/1370/2129
+f 2182/1370/2129 2184/1371/2129 2180/1370/2129
+f 2192/1368/2129 2188/1369/2129 2190/1372/2129
+f 2186/1371/2129 2188/1369/2129 2184/1371/2129
+f 2171/1373/2130 2211/1374/2129 2173/1373/2130
+f 2212/1374/2131 2173/1373/2130 2211/1374/2129
+f 2212/1374/2131 2211/1374/2129 2213/1348/2132
+f 2214/1348/2132 2213/1348/2132 2211/1374/2129
+f 2172/1373/2133 2215/1374/2134 2170/1373/2133
+f 2216/1374/2135 2170/1373/2133 2215/1374/2134
+f 2215/1374/2134 2217/1348/2136 2216/1374/2135
+f 2218/1348/2136 2216/1374/2135 2217/1348/2136
+f 2170/1375/2137 2216/1376/2137 2171/1377/2137
+f 2211/1378/2137 2171/1377/2137 2216/1376/2137
+f 2216/1376/2137 2218/1379/2137 2211/1378/2137
+f 2214/1380/2137 2211/1378/2137 2218/1379/2137
+f 2219/1373/2138 2220/1374/2135 2221/1373/2138
+f 2222/1374/2139 2221/1373/2138 2220/1374/2135
+f 2220/1374/2135 2223/1348/2140 2222/1374/2139
+f 2224/1348/2140 2222/1374/2139 2223/1348/2140
+f 2221/1375/2087 2222/1376/2087 2225/1377/2087
+f 2226/1378/2087 2225/1377/2087 2222/1376/2087
+f 2222/1376/2087 2224/1379/2087 2226/1378/2087
+f 2227/1380/2087 2226/1378/2087 2224/1379/2087
+f 2227/1348/2141 2228/1348/2141 2226/1374/2142
+f 2229/1374/2129 2226/1374/2142 2228/1348/2141
+f 2229/1374/2129 2230/1373/2143 2226/1374/2142
+f 2225/1373/2143 2226/1374/2142 2230/1373/2143
+f 2223/1375/2144 2220/1376/2144 2228/1377/2144
+f 2229/1378/2144 2228/1377/2144 2220/1376/2144
+f 2220/1376/2144 2219/1379/2144 2229/1378/2144
+f 2230/1380/2144 2229/1378/2144 2219/1379/2144
+f 2201/1381/2129 2177/1381/2129 2202/1367/2129
+f 2177/1381/2129 2180/1370/2129 2202/1367/2129
+f 2178/1382/2129 2180/1370/2129 2177/1381/2129
+f 2217/1375/2145 2215/1376/2145 2213/1377/2145
+f 2212/1378/2145 2213/1377/2145 2215/1376/2145
+f 2215/1376/2145 2172/1379/2145 2212/1378/2145
+f 2173/1380/2145 2212/1378/2145 2172/1379/2145
+f 2217/1348/2144 2213/1349/2144 2218/1348/2144
+f 2214/1349/2144 2218/1348/2144 2213/1349/2144
+f 2221/1348/2145 2225/1349/2145 2219/1348/2145
+f 2230/1349/2145 2219/1348/2145 2225/1349/2145
+f 2223/1348/2137 2228/1349/2137 2224/1348/2137
+f 2227/1349/2137 2224/1348/2137 2228/1349/2137
+f 2201/1352/2115 2174/1350/2088 2177/1352/2091
+# 330 faces
+
+#
+# object P_51_Mustang_Left_Wing_Flap
+#
+
+v 4.70 -0.34 3.26
+v 5.20 -0.60 -0.73
+v 4.68 -0.83 3.28
+v 29.00 -0.53 5.74
+v 29.38 -0.84 2.43
+v 28.97 -1.13 5.77
+# 6 vertices
+
+vn -0.99 0.04 -0.13
+vn 0.01 1.00 -0.06
+vn 0.02 1.00 -0.09
+vn 0.01 1.00 -0.07
+vn -0.10 0.04 0.99
+vn -0.10 0.06 0.99
+vn -0.00 -1.00 -0.06
+vn -0.00 -1.00 -0.08
+vn -0.00 -1.00 -0.09
+vn 0.99 -0.04 0.12
+# 10 vertex normals
+
+vt 0.23 0.01 0.00
+vt 0.29 0.02 0.00
+vt 0.23 0.02 0.00
+vt 0.98 0.45 0.00
+vt 0.65 0.50 0.00
+vt 0.97 0.38 0.00
+vt 0.65 0.44 0.00
+vt 0.46 0.01 0.00
+vt 0.46 0.00 0.00
+vt 0.23 0.00 0.00
+vt 0.01 0.04 0.00
+vt 0.01 0.31 0.00
+vt 0.06 0.05 0.00
+vt 0.05 0.32 0.00
+vt 0.28 0.01 0.00
+vt 0.33 0.02 0.00
+vt 0.33 0.01 0.00
+# 17 texture coords
+
+g P_51_Mustang_Left_Wing_Flap
+f 2231/1383/2146 2232/1384/2146 2233/1385/2146
+f 2231/1386/2147 2234/1387/2148 2232/1388/2149
+f 2235/1389/2148 2232/1388/2149 2234/1387/2148
+f 2233/1390/2150 2236/1383/2151 2231/1391/2150
+f 2234/1392/2151 2231/1391/2150 2236/1383/2151
+f 2232/1393/2152 2235/1394/2153 2233/1395/2152
+f 2236/1396/2154 2233/1395/2152 2235/1394/2153
+f 2235/1397/2155 2234/1398/2155 2236/1399/2155
+# 8 faces
+
+#
+# object P_51_Mustang_Right_Elevator
+#
+
+v -1.73 4.93 -32.15
+v -1.43 4.98 -35.87
+v -1.80 5.11 -32.31
+v -4.44 4.96 -31.91
+v -4.06 5.00 -35.35
+v -7.81 5.09 -34.62
+v -7.82 5.05 -31.65
+v -11.23 5.16 -33.95
+v -11.33 5.14 -31.30
+v -14.07 5.22 -33.39
+v -14.38 5.21 -32.45
+v -13.95 5.24 -30.69
+v -13.81 5.66 -30.77
+v -11.12 5.68 -31.09
+v -7.79 5.68 -31.43
+v -4.42 5.63 -31.75
+v -1.74 5.55 -32.08
+# 17 vertices
+
+vn 0.91 0.41 0.08
+vn -0.01 -1.00 -0.01
+vn -0.02 -1.00 -0.01
+vn -0.03 -1.00 -0.01
+vn -0.03 -1.00 -0.00
+vn -0.02 -1.00 -0.02
+vn -0.02 -1.00 -0.00
+vn -0.03 -1.00 0.03
+vn -0.03 0.99 -0.16
+vn -0.02 0.98 -0.17
+vn -0.02 0.99 -0.17
+vn -0.02 0.98 -0.18
+vn -0.01 0.98 -0.18
+vn -0.01 0.98 -0.17
+vn -0.03 0.98 -0.18
+vn -0.00 0.99 -0.16
+vn -0.01 0.99 -0.16
+vn 0.01 0.99 -0.15
+vn 0.98 -0.18 0.11
+# 19 vertex normals
+
+vt 0.96 0.79 0.00
+vt 0.96 0.78 0.00
+vt 0.02 0.62 0.00
+vt 0.06 0.63 0.00
+vt 0.01 0.57 0.00
+vt 0.05 0.58 0.00
+vt 0.11 0.59 0.00
+vt 0.11 0.63 0.00
+vt 0.16 0.60 0.00
+vt 0.16 0.63 0.00
+vt 0.20 0.60 0.00
+vt 0.20 0.62 0.00
+vt 0.20 0.64 0.00
+vt 0.29 0.23 0.00
+vt 0.29 0.27 0.00
+vt 0.25 0.22 0.00
+vt 0.25 0.27 0.00
+vt 0.29 0.32 0.00
+vt 0.24 0.32 0.00
+vt 0.28 0.37 0.00
+vt 0.23 0.37 0.00
+vt 0.22 0.41 0.00
+vt 0.28 0.41 0.00
+# 23 texture coords
+
+g P_51_Mustang_Right_Elevator
+f 2237/1400/2156 2238/1401/2156 2239/1400/2156
+f 2237/1402/2157 2240/1403/2158 2238/1404/2157
+f 2241/1405/2158 2238/1404/2157 2240/1403/2158
+f 2241/1405/2158 2240/1403/2158 2242/1406/2159
+f 2243/1407/2159 2242/1406/2159 2240/1403/2158
+f 2242/1406/2159 2243/1407/2159 2244/1408/2158
+f 2245/1409/2160 2244/1408/2158 2243/1407/2159
+f 2246/1410/2161 2244/1408/2158 2245/1409/2160
+f 2247/1411/2162 2246/1410/2161 2245/1409/2160
+f 2248/1412/2163 2247/1411/2162 2245/1409/2160
+f 2249/1413/2164 2250/1414/2165 2246/1415/2166
+f 2244/1416/2167 2246/1415/2166 2250/1414/2165
+f 2250/1414/2165 2251/1417/2168 2244/1416/2167
+f 2242/1418/2168 2244/1416/2167 2251/1417/2168
+f 2251/1417/2168 2252/1419/2168 2242/1418/2168
+f 2241/1420/2169 2242/1418/2168 2252/1419/2168
+f 2241/1420/2170 2252/1419/2171 2238/1421/2172
+f 2253/1422/2173 2238/1421/2172 2252/1419/2171
+f 2253/1400/2174 2239/1400/2174 2238/1401/2174
+# 19 faces
+
+#
+# object P_51_Mustang_Back_Wheel
+#
+
+v 0.75 -3.90 -21.82
+v 0.72 -4.53 -21.59
+v 0.78 -3.45 -22.32
+v 0.67 -5.83 -22.72
+v 0.69 -5.68 -23.36
+v 0.67 -5.64 -22.12
+v 0.79 -3.49 -23.56
+v 0.79 -3.30 -22.96
+v 0.69 -5.17 -21.70
+v 0.29 -3.41 -23.61
+v 0.29 -3.21 -22.96
+v 0.27 -3.37 -22.27
+v 0.24 -3.85 -21.74
+v 0.21 -4.52 -21.50
+v 0.18 -5.20 -21.61
+v 0.16 -5.72 -22.06
+v 0.16 -5.92 -22.71
+v 0.17 -5.76 -23.40
+v 0.72 -5.24 -23.86
+v 0.20 -5.28 -23.93
+v 0.75 -4.61 -24.09
+v 0.24 -4.61 -24.17
+v 0.78 -3.97 -23.98
+v 0.27 -3.92 -24.06
+v -0.25 -3.96 -23.97
+v -0.23 -3.49 -23.55
+v -0.23 -3.30 -22.95
+v -0.24 -3.45 -22.31
+v -0.27 -3.89 -21.81
+v -0.30 -4.52 -21.58
+v -0.33 -5.16 -21.69
+v -0.35 -5.63 -22.11
+v -0.35 -5.82 -22.71
+v -0.33 -5.68 -23.35
+v -0.31 -5.23 -23.85
+v -0.28 -4.60 -24.08
+# 36 vertices
+
+vn 1.00 -0.05 0.01
+vn 0.18 0.82 -0.54
+vn 0.00 0.84 -0.55
+vn 0.19 0.98 -0.04
+vn 0.01 1.00 -0.04
+vn 0.18 0.87 0.46
+vn 0.01 0.89 0.46
+vn 0.18 0.55 0.82
+vn 0.01 0.56 0.83
+vn 0.18 0.09 0.98
+vn 0.01 0.09 1.00
+vn 0.18 -0.42 0.89
+vn 0.00 -0.43 0.90
+vn 0.18 -0.82 0.54
+vn -0.00 -0.84 0.55
+vn 0.17 -0.99 0.03
+vn -0.01 -1.00 0.04
+vn 0.16 -0.87 -0.46
+vn -0.01 -0.89 -0.46
+vn 0.16 -0.55 -0.82
+vn -0.01 -0.56 -0.83
+vn 0.17 -0.09 -0.98
+vn -0.01 -0.09 -1.00
+vn 0.18 0.42 -0.89
+vn -0.00 0.43 -0.90
+vn -0.18 0.42 -0.89
+vn -0.18 0.82 -0.54
+vn -0.17 0.99 -0.03
+vn -0.16 0.87 0.46
+vn -0.16 0.55 0.82
+vn -0.17 0.09 0.98
+vn -0.18 -0.42 0.89
+vn -0.18 -0.82 0.54
+vn -0.19 -0.98 0.04
+vn -0.18 -0.87 -0.46
+vn -0.18 -0.55 -0.82
+vn -0.18 -0.09 -0.98
+vn -1.00 0.05 -0.01
+# 38 vertex normals
+
+vt 0.79 0.99 0.00
+vt 0.81 0.99 0.00
+vt 0.78 0.97 0.00
+vt 0.85 0.95 0.00
+vt 0.85 0.93 0.00
+vt 0.85 0.97 0.00
+vt 0.78 0.93 0.00
+vt 0.77 0.95 0.00
+vt 0.83 0.99 0.00
+vt 0.31 0.75 0.00
+vt 0.31 0.76 0.00
+vt 0.30 0.75 0.00
+vt 0.30 0.76 0.00
+vt 0.33 0.75 0.00
+vt 0.32 0.76 0.00
+vt 0.34 0.75 0.00
+vt 0.34 0.76 0.00
+vt 0.36 0.75 0.00
+vt 0.36 0.76 0.00
+vt 0.37 0.75 0.00
+vt 0.37 0.76 0.00
+vt 0.38 0.75 0.00
+vt 0.39 0.76 0.00
+vt 0.33 0.77 0.00
+vt 0.31 0.77 0.00
+vt 0.30 0.77 0.00
+vt 0.34 0.77 0.00
+vt 0.36 0.77 0.00
+vt 0.37 0.77 0.00
+vt 0.38 0.77 0.00
+vt 0.83 0.92 0.00
+vt 0.79 0.92 0.00
+vt 0.81 0.91 0.00
+# 33 texture coords
+
+g P_51_Mustang_Back_Wheel
+f 2254/1423/2175 2255/1424/2175 2256/1425/2175
+f 2257/1426/2175 2258/1427/2175 2259/1428/2175
+f 2258/1427/2175 2255/1424/2175 2259/1428/2175
+f 2260/1429/2175 2255/1424/2175 2258/1427/2175
+f 2256/1425/2175 2255/1424/2175 2260/1429/2175
+f 2261/1430/2175 2256/1425/2175 2260/1429/2175
+f 2259/1428/2175 2255/1424/2175 2262/1431/2175
+f 2260/1432/2176 2263/1433/2177 2261/1434/2178
+f 2264/1435/2179 2261/1434/2178 2263/1433/2177
+f 2261/1434/2178 2264/1435/2179 2256/1432/2180
+f 2265/1433/2181 2256/1432/2180 2264/1435/2179
+f 2256/1432/2180 2265/1433/2181 2254/1436/2182
+f 2266/1437/2183 2254/1436/2182 2265/1433/2181
+f 2254/1436/2182 2266/1437/2183 2255/1438/2184
+f 2267/1439/2185 2255/1438/2184 2266/1437/2183
+f 2255/1438/2184 2267/1439/2185 2262/1440/2186
+f 2268/1441/2187 2262/1440/2186 2267/1439/2185
+f 2262/1440/2186 2268/1441/2187 2259/1442/2188
+f 2269/1443/2189 2259/1442/2188 2268/1441/2187
+f 2259/1442/2188 2269/1443/2189 2257/1444/2190
+f 2270/1445/2191 2257/1444/2190 2269/1443/2189
+f 2257/1444/2190 2270/1445/2191 2258/1442/2192
+f 2271/1443/2193 2258/1442/2192 2270/1445/2191
+f 2258/1442/2192 2271/1443/2193 2272/1440/2194
+f 2273/1441/2195 2272/1440/2194 2271/1443/2193
+f 2272/1440/2194 2273/1441/2195 2274/1438/2196
+f 2275/1439/2197 2274/1438/2196 2273/1441/2195
+f 2274/1438/2196 2275/1439/2197 2276/1436/2198
+f 2277/1437/2199 2276/1436/2198 2275/1439/2197
+f 2276/1436/2198 2277/1437/2199 2260/1432/2176
+f 2263/1433/2177 2260/1432/2176 2277/1437/2199
+f 2277/1437/2199 2278/1446/2200 2263/1433/2177
+f 2279/1447/2201 2263/1433/2177 2278/1446/2200
+f 2263/1433/2177 2279/1447/2201 2264/1435/2179
+f 2280/1448/2202 2264/1435/2179 2279/1447/2201
+f 2264/1435/2179 2280/1448/2202 2265/1433/2181
+f 2281/1447/2203 2265/1433/2181 2280/1448/2202
+f 2265/1433/2181 2281/1447/2203 2266/1437/2183
+f 2282/1446/2204 2266/1437/2183 2281/1447/2203
+f 2266/1437/2183 2282/1446/2204 2267/1439/2185
+f 2283/1449/2205 2267/1439/2185 2282/1446/2204
+f 2267/1439/2185 2283/1449/2205 2268/1441/2187
+f 2284/1450/2206 2268/1441/2187 2283/1449/2205
+f 2268/1441/2187 2284/1450/2206 2269/1443/2189
+f 2285/1451/2207 2269/1443/2189 2284/1450/2206
+f 2269/1443/2189 2285/1451/2207 2270/1445/2191
+f 2286/1452/2208 2270/1445/2191 2285/1451/2207
+f 2270/1445/2191 2286/1452/2208 2271/1443/2193
+f 2287/1451/2209 2271/1443/2193 2286/1452/2208
+f 2271/1443/2193 2287/1451/2209 2273/1441/2195
+f 2288/1450/2210 2273/1441/2195 2287/1451/2209
+f 2273/1441/2195 2288/1450/2210 2275/1439/2197
+f 2289/1449/2211 2275/1439/2197 2288/1450/2210
+f 2275/1439/2197 2289/1449/2211 2277/1437/2199
+f 2278/1446/2200 2277/1437/2199 2289/1449/2211
+f 2285/1428/2212 2284/1431/2212 2286/1426/2212
+f 2286/1426/2212 2284/1431/2212 2288/1453/2212
+f 2288/1453/2212 2284/1431/2212 2280/1430/2212
+f 2278/1454/2212 2288/1453/2212 2280/1430/2212
+f 2279/1429/2212 2278/1454/2212 2280/1430/2212
+f 2289/1455/2212 2288/1453/2212 2278/1454/2212
+f 2287/1427/2212 2286/1426/2212 2288/1453/2212
+f 2272/1453/2175 2274/1455/2175 2258/1427/2175
+f 2274/1455/2175 2260/1429/2175 2258/1427/2175
+f 2276/1454/2175 2260/1429/2175 2274/1455/2175
+f 2281/1425/2212 2280/1430/2212 2282/1423/2212
+f 2280/1430/2212 2284/1431/2212 2282/1423/2212
+f 2282/1423/2212 2284/1431/2212 2283/1424/2212
+# 68 faces
+
+#
+# object P_51_Mustang_Left_Elevator
+#
+
+v 3.14 4.95 -35.92
+v 3.33 4.89 -32.33
+v 3.39 5.51 -32.16
+v 5.75 4.92 -35.46
+v 6.03 4.88 -32.03
+v 9.49 4.95 -34.81
+v 9.40 4.92 -31.81
+v 12.89 4.98 -34.22
+v 12.73 4.96 -31.49
+v 15.72 4.99 -33.73
+v 15.64 4.97 -32.81
+v 15.50 5.01 -31.28
+v 15.57 5.42 -31.45
+v 12.75 5.49 -31.56
+v 9.43 5.54 -31.80
+v 6.06 5.54 -32.00
+v 3.41 5.07 -32.37
+# 17 vertices
+
+vn -1.00 0.08 0.05
+vn -0.01 -1.00 -0.01
+vn 0.00 -1.00 -0.01
+vn -0.00 -1.00 -0.01
+vn 0.01 -1.00 -0.01
+vn 0.01 -1.00 -0.00
+vn 0.02 -1.00 0.02
+vn 0.03 0.98 -0.18
+vn 0.03 0.98 -0.19
+vn 0.02 0.98 -0.19
+vn 0.02 0.98 -0.18
+vn -0.00 0.98 -0.18
+vn 0.02 0.99 -0.16
+vn 0.01 0.99 -0.17
+vn 0.04 0.99 -0.15
+vn 0.78 -0.24 0.58
+# 16 vertex normals
+
+vt 0.94 0.79 0.00
+vt 0.93 0.78 0.00
+vt 0.01 0.57 0.00
+vt 0.05 0.58 0.00
+vt 0.02 0.62 0.00
+vt 0.06 0.63 0.00
+vt 0.11 0.59 0.00
+vt 0.11 0.63 0.00
+vt 0.16 0.59 0.00
+vt 0.16 0.64 0.00
+vt 0.20 0.60 0.00
+vt 0.20 0.62 0.00
+vt 0.20 0.64 0.00
+vt 0.29 0.61 0.00
+vt 0.26 0.62 0.00
+vt 0.29 0.57 0.00
+vt 0.25 0.57 0.00
+vt 0.29 0.52 0.00
+vt 0.24 0.52 0.00
+vt 0.28 0.47 0.00
+vt 0.23 0.47 0.00
+vt 0.28 0.43 0.00
+vt 0.22 0.43 0.00
+# 23 texture coords
+
+g P_51_Mustang_Left_Elevator
+f 2290/1456/2213 2291/1457/2213 2292/1457/2213
+f 2290/1458/2214 2293/1459/2215 2291/1460/2216
+f 2294/1461/2217 2291/1460/2216 2293/1459/2215
+f 2293/1459/2215 2295/1462/2217 2294/1461/2217
+f 2296/1463/2217 2294/1461/2217 2295/1462/2217
+f 2295/1462/2217 2297/1464/2217 2296/1463/2217
+f 2298/1465/2218 2296/1463/2217 2297/1464/2217
+f 2299/1466/2215 2298/1465/2218 2297/1464/2217
+f 2300/1467/2215 2298/1465/2218 2299/1466/2215
+f 2301/1468/2219 2298/1465/2218 2300/1467/2215
+f 2302/1469/2220 2299/1470/2220 2303/1471/2221
+f 2297/1472/2221 2303/1471/2221 2299/1470/2220
+f 2303/1471/2221 2297/1472/2221 2304/1473/2222
+f 2295/1474/2222 2304/1473/2222 2297/1472/2221
+f 2304/1473/2222 2295/1474/2222 2305/1475/2223
+f 2293/1476/2223 2305/1475/2223 2295/1474/2222
+f 2305/1475/2224 2293/1476/2225 2292/1477/2226
+f 2290/1478/2227 2292/1477/2226 2293/1476/2225
+f 2306/1457/2228 2292/1457/2228 2291/1457/2228
+# 19 faces
+
+#
+# object P_51_Mustang_Rudder
+#
+
+v 1.94 16.37 -39.44
+v 1.85 16.90 -39.49
+v 1.94 16.37 -39.43
+v -0.40 3.34 -38.12
+v -0.34 5.20 -38.31
+v 0.05 2.94 -41.04
+v 0.27 4.65 -42.12
+v 0.29 7.13 -38.50
+v 0.58 6.72 -42.03
+v 0.67 6.59 -43.07
+v 0.75 7.71 -43.00
+v 1.10 7.67 -43.30
+v 1.43 15.17 -42.50
+v 1.44 7.70 -43.02
+v 1.76 15.18 -42.35
+v 1.50 7.81 -42.12
+v 1.78 15.24 -41.86
+v 1.75 8.22 -38.63
+v 1.92 15.54 -39.35
+v 1.82 16.10 -41.76
+v 1.82 16.67 -41.61
+v 0.34 8.23 -38.61
+v 0.87 15.54 -39.34
+v 0.67 7.82 -42.09
+v 0.92 16.38 -39.42
+v 1.07 15.25 -41.84
+v 1.10 15.19 -42.33
+v 1.49 17.19 -40.75
+v 1.48 17.32 -39.52
+v 1.06 16.91 -39.48
+v 1.15 16.68 -41.59
+v 1.10 16.10 -41.74
+v 1.14 16.05 -42.19
+v 1.47 16.03 -42.34
+v 1.80 16.05 -42.20
+v 1.81 16.63 -42.01
+v 1.82 16.83 -41.81
+v 1.17 16.83 -41.79
+v 1.50 16.81 -41.93
+v 1.17 16.63 -41.99
+v 1.49 16.61 -42.13
+v 0.94 4.41 -43.65
+v 0.48 4.74 -43.09
+v 1.05 6.55 -43.43
+v 1.41 4.73 -43.10
+v 1.44 3.03 -42.87
+v 1.58 4.64 -42.14
+v 1.61 2.93 -41.06
+v 2.02 3.32 -38.14
+v 1.63 1.73 -40.70
+v 1.99 1.54 -37.97
+v 1.44 1.15 -40.85
+v 1.75 0.67 -37.88
+v 0.74 0.99 -40.75
+v 0.67 0.46 -37.85
+v 0.05 1.17 -40.84
+v -0.39 0.69 -37.86
+v -0.54 1.56 -37.94
+v -0.09 1.74 -40.68
+v 0.78 1.47 -42.17
+v 0.24 1.84 -42.10
+v 1.35 1.83 -42.11
+v 0.84 2.58 -43.11
+v 0.29 3.04 -42.85
+v 2.09 4.08 -38.22
+v 2.14 5.18 -38.33
+v 1.49 6.71 -42.05
+v 1.69 7.13 -38.52
+v 1.41 6.58 -43.09
+# 69 vertices
+
+vn 1.00 0.09 -0.04
+vn 0.91 0.42 -0.05
+vn 0.99 0.16 -0.05
+vn -0.99 0.04 -0.16
+vn -0.97 0.15 -0.18
+vn -0.99 0.03 -0.16
+vn -0.98 0.10 -0.16
+vn -0.98 0.14 -0.13
+vn -0.99 0.11 -0.10
+vn -0.89 0.11 -0.45
+vn -0.88 0.09 -0.47
+vn -0.01 0.10 -1.00
+vn -0.01 0.13 -0.99
+vn 0.89 0.01 -0.46
+vn 0.83 0.04 -0.56
+vn 1.00 -0.03 -0.06
+vn 1.00 -0.04 -0.05
+vn 1.00 -0.04 -0.06
+vn 1.00 -0.03 -0.05
+vn 1.00 -0.02 -0.05
+vn 0.99 0.15 0.03
+vn -0.99 0.05 -0.10
+vn -0.99 0.06 -0.09
+vn -0.99 0.07 -0.10
+vn -0.99 0.14 -0.08
+vn -1.00 0.05 -0.08
+vn -0.82 0.12 -0.56
+vn 0.03 0.99 -0.13
+vn 0.02 0.99 -0.10
+vn -0.87 0.48 -0.08
+vn -0.97 0.24 -0.01
+vn -0.99 0.07 -0.08
+vn -0.79 0.19 -0.58
+vn -0.01 0.25 -0.97
+vn 0.80 0.12 -0.59
+vn 0.75 0.35 -0.55
+vn 0.71 0.64 -0.29
+vn -0.68 0.67 -0.30
+vn -0.00 0.83 -0.56
+vn -0.74 0.40 -0.55
+vn -0.01 0.51 -0.86
+vn 0.00 -0.04 -1.00
+vn -0.89 0.08 -0.45
+vn 0.00 0.09 -1.00
+vn 0.90 -0.01 -0.44
+vn 0.84 -0.22 -0.49
+vn 0.99 -0.01 -0.14
+vn 0.99 -0.06 -0.13
+vn 0.99 -0.05 -0.14
+vn 0.97 -0.15 -0.17
+vn 0.98 -0.17 -0.14
+vn 0.65 -0.71 -0.26
+vn 0.64 -0.75 -0.19
+vn -0.01 -0.97 -0.24
+vn -0.02 -0.98 -0.18
+vn -0.68 -0.67 -0.28
+vn -0.68 -0.70 -0.21
+vn -0.98 -0.08 -0.17
+vn -0.98 -0.06 -0.19
+vn -0.02 -0.80 -0.60
+vn -0.80 -0.39 -0.45
+vn 0.78 -0.46 -0.43
+vn -0.01 -0.46 -0.89
+vn -0.85 -0.14 -0.51
+vn -0.01 -0.10 -1.00
+vn 0.99 0.04 -0.13
+vn 1.00 0.03 -0.09
+vn 0.99 0.08 -0.07
+vn 0.90 0.02 -0.44
+vn 0.01 0.10 1.00
+# 70 vertex normals
+
+vt 0.93 0.98 0.00
+vt 0.93 0.99 0.00
+vt 0.93 0.83 0.00
+vt 0.93 0.85 0.00
+vt 0.96 0.83 0.00
+vt 0.98 0.85 0.00
+vt 0.93 0.87 0.00
+vt 0.97 0.87 0.00
+vt 0.98 0.87 0.00
+vt 0.98 0.88 0.00
+vt 0.99 0.88 0.00
+vt 0.97 0.97 0.00
+vt 0.97 0.88 0.00
+vt 0.96 0.97 0.00
+vt 0.93 0.89 0.00
+vt 0.93 0.97 0.00
+vt 0.96 0.98 0.00
+vt 0.96 0.99 0.00
+vt 0.95 0.99 0.00
+vt 0.93 1.00 0.00
+vt 0.97 0.98 0.00
+vt 0.97 0.99 0.00
+vt 1.00 0.84 0.00
+vt 0.99 0.85 0.00
+vt 0.99 0.87 0.00
+vt 0.99 0.83 0.00
+vt 0.96 0.81 0.00
+vt 0.93 0.81 0.00
+vt 0.96 0.80 0.00
+vt 0.93 0.80 0.00
+vt 0.96 0.79 0.00
+vt 0.93 0.79 0.00
+vt 0.98 0.80 0.00
+vt 0.98 0.81 0.00
+vt 0.99 0.82 0.00
+vt 0.93 0.84 0.00
+vt 0.65 0.02 0.00
+vt 0.65 0.03 0.00
+vt 0.66 0.02 0.00
+vt 0.64 0.03 0.00
+vt 0.56 0.01 0.00
+vt 0.55 0.03 0.00
+vt 0.55 0.01 0.00
+vt 0.53 0.03 0.00
+vt 0.52 0.01 0.00
+vt 0.48 0.03 0.00
+vt 0.48 0.01 0.00
+vt 0.48 0.02 0.00
+vt 0.56 0.03 0.00
+vt 0.49 0.03 0.00
+vt 0.51 0.03 0.00
+vt 0.49 0.01 0.00
+vt 0.53 0.01 0.00
+vt 0.64 0.01 0.00
+vt 0.65 0.01 0.00
+# 55 texture coords
+
+g P_51_Mustang_Rudder
+f 2307/1479/2229 2308/1480/2230 2309/1479/2231
+f 2310/1481/2232 2311/1482/2233 2312/1483/2234
+f 2313/1484/2235 2312/1483/2234 2311/1482/2233
+f 2311/1482/2233 2314/1485/2236 2313/1484/2235
+f 2315/1486/2237 2313/1484/2235 2314/1485/2236
+f 2315/1486/2237 2316/1487/2238 2313/1484/2235
+f 2316/1487/2238 2315/1486/2237 2317/1488/2239
+f 2317/1488/2239 2318/1489/2240 2316/1487/2238
+f 2318/1489/2240 2317/1488/2239 2319/1490/2241
+f 2318/1489/2240 2319/1490/2241 2320/1488/2242
+f 2321/1490/2243 2320/1488/2242 2319/1490/2241
+f 2320/1488/2242 2321/1490/2243 2322/1491/2244
+f 2323/1492/2245 2322/1491/2244 2321/1490/2243
+f 2322/1491/2244 2323/1492/2245 2324/1493/2246
+f 2325/1494/2247 2324/1493/2246 2323/1492/2245
+f 2323/1492/2245 2326/1495/2248 2325/1494/2247
+f 2307/1479/2229 2325/1494/2247 2326/1495/2248
+f 2326/1495/2248 2327/1496/2249 2307/1479/2229
+f 2327/1496/2249 2308/1480/2230 2307/1479/2229
+f 2314/1485/2236 2328/1493/2250 2315/1486/2237
+f 2328/1493/2250 2329/1494/2251 2330/1491/2252
+f 2330/1491/2252 2315/1486/2237 2328/1493/2250
+f 2330/1491/2252 2317/1488/2239 2315/1486/2237
+f 2329/1494/2251 2331/1479/2253 2332/1492/2254
+f 2332/1492/2254 2330/1491/2252 2329/1494/2251
+f 2332/1492/2254 2333/1490/2255 2330/1491/2252
+f 2317/1488/2239 2330/1491/2252 2333/1490/2255
+f 2333/1490/2255 2319/1490/2241 2317/1488/2239
+f 2327/1496/2249 2334/1497/2256 2308/1480/2230
+f 2335/1498/2257 2308/1480/2230 2334/1497/2256
+f 2335/1498/2257 2334/1497/2256 2336/1480/2258
+f 2337/1496/2259 2336/1480/2258 2334/1497/2256
+f 2336/1480/2258 2337/1496/2259 2331/1479/2253
+f 2338/1495/2260 2331/1479/2253 2337/1496/2259
+f 2338/1495/2260 2332/1492/2254 2331/1479/2253
+f 2338/1495/2260 2339/1495/2261 2332/1492/2254
+f 2333/1490/2255 2332/1492/2254 2339/1495/2261
+f 2339/1495/2261 2340/1499/2262 2333/1490/2255
+f 2319/1490/2241 2333/1490/2255 2340/1499/2262
+f 2319/1490/2241 2340/1499/2262 2321/1490/2243
+f 2341/1495/2263 2321/1490/2243 2340/1499/2262
+f 2321/1490/2243 2341/1495/2263 2323/1492/2245
+f 2326/1495/2248 2323/1492/2245 2341/1495/2263
+f 2341/1495/2263 2342/1496/2264 2326/1495/2248
+f 2327/1496/2249 2326/1495/2248 2342/1496/2264
+f 2342/1496/2264 2343/1496/2265 2327/1496/2249
+f 2337/1496/2259 2334/1497/2256 2344/1496/2266
+f 2327/1496/2249 2343/1496/2265 2334/1497/2256
+f 2345/1496/2267 2334/1497/2256 2343/1496/2265
+f 2345/1496/2267 2344/1496/2266 2334/1497/2256
+f 2344/1496/2266 2345/1496/2267 2346/1496/2268
+f 2344/1496/2266 2346/1496/2268 2337/1496/2259
+f 2337/1496/2259 2346/1496/2268 2338/1495/2260
+f 2339/1495/2261 2338/1495/2260 2346/1496/2268
+f 2346/1496/2268 2347/1500/2269 2339/1495/2261
+f 2340/1499/2262 2339/1495/2261 2347/1500/2269
+f 2340/1499/2262 2347/1500/2269 2341/1495/2263
+f 2342/1496/2264 2341/1495/2263 2347/1500/2269
+f 2347/1500/2269 2345/1496/2267 2342/1496/2264
+f 2343/1496/2265 2342/1496/2264 2345/1496/2267
+f 2347/1500/2269 2346/1496/2268 2345/1496/2267
+f 2348/1501/2270 2349/1502/2271 2350/1503/2272
+f 2348/1501/2270 2350/1503/2272 2351/1502/2273
+f 2351/1502/2273 2352/1504/2274 2348/1501/2270
+f 2351/1502/2273 2353/1484/2275 2352/1504/2274
+f 2354/1483/2276 2352/1504/2274 2353/1484/2275
+f 2355/1481/2277 2354/1483/2276 2353/1484/2275
+f 2354/1483/2276 2355/1481/2277 2356/1505/2278
+f 2357/1506/2279 2356/1505/2278 2355/1481/2277
+f 2356/1505/2278 2357/1506/2279 2358/1507/2280
+f 2359/1508/2281 2358/1507/2280 2357/1506/2279
+f 2358/1507/2280 2359/1508/2281 2360/1509/2282
+f 2361/1510/2283 2360/1509/2282 2359/1508/2281
+f 2360/1509/2282 2361/1510/2283 2362/1507/2284
+f 2363/1508/2285 2362/1507/2284 2361/1510/2283
+f 2363/1508/2285 2364/1506/2286 2362/1507/2284
+f 2365/1505/2287 2362/1507/2284 2364/1506/2286
+f 2364/1506/2286 2310/1481/2232 2365/1505/2287
+f 2312/1483/2234 2365/1505/2287 2310/1481/2232
+f 2366/1511/2288 2362/1507/2284 2367/1512/2289
+f 2362/1507/2284 2366/1511/2288 2360/1509/2282
+f 2366/1511/2288 2358/1507/2280 2360/1509/2282
+f 2366/1511/2288 2368/1512/2290 2358/1507/2280
+f 2356/1505/2278 2358/1507/2280 2368/1512/2290
+f 2356/1505/2278 2368/1512/2290 2354/1483/2276
+f 2352/1504/2274 2354/1483/2276 2368/1512/2290
+f 2352/1504/2274 2368/1512/2290 2369/1513/2291
+f 2369/1513/2291 2348/1501/2270 2352/1504/2274
+f 2369/1513/2291 2370/1504/2292 2348/1501/2270
+f 2349/1502/2271 2348/1501/2270 2370/1504/2292
+f 2366/1511/2288 2369/1513/2291 2368/1512/2290
+f 2366/1511/2288 2367/1512/2289 2369/1513/2291
+f 2370/1504/2292 2369/1513/2291 2367/1512/2289
+f 2371/1514/2293 2355/1481/2277 2372/1482/2294
+f 2372/1482/2294 2355/1481/2277 2353/1484/2275
+f 2353/1484/2275 2373/1486/2295 2372/1482/2294
+f 2374/1485/2296 2372/1482/2294 2373/1486/2295
+f 2374/1485/2296 2373/1486/2295 2324/1493/2246
+f 2322/1491/2244 2324/1493/2246 2373/1486/2295
+f 2322/1491/2244 2373/1486/2295 2320/1488/2242
+f 2375/1487/2297 2320/1488/2242 2373/1486/2295
+f 2320/1488/2242 2375/1487/2297 2318/1489/2240
+f 2350/1503/2272 2318/1489/2240 2375/1487/2297
+f 2350/1503/2272 2316/1487/2238 2318/1489/2240
+f 2316/1487/2238 2350/1503/2272 2349/1502/2271
+f 2349/1502/2271 2313/1484/2235 2316/1487/2238
+f 2349/1502/2271 2370/1504/2292 2313/1484/2235
+f 2312/1483/2234 2313/1484/2235 2370/1504/2292
+f 2370/1504/2292 2367/1512/2289 2312/1483/2234
+f 2365/1505/2287 2312/1483/2234 2367/1512/2289
+f 2365/1505/2287 2367/1512/2289 2362/1507/2284
+f 2373/1486/2295 2353/1484/2275 2375/1487/2297
+f 2351/1502/2273 2375/1487/2297 2353/1484/2275
+f 2375/1487/2297 2351/1502/2273 2350/1503/2272
+f 2336/1515/2298 2331/1516/2298 2335/1517/2298
+f 2331/1516/2298 2329/1518/2298 2335/1517/2298
+f 2329/1518/2298 2324/1519/2298 2335/1517/2298
+f 2314/1520/2298 2324/1519/2298 2329/1518/2298
+f 2374/1521/2298 2324/1519/2298 2314/1520/2298
+f 2314/1520/2298 2311/1522/2298 2374/1521/2298
+f 2311/1522/2298 2371/1523/2298 2374/1521/2298
+f 2363/1524/2298 2371/1523/2298 2311/1522/2298
+f 2359/1525/2298 2371/1523/2298 2363/1524/2298
+f 2361/1526/2298 2359/1525/2298 2363/1524/2298
+f 2328/1527/2298 2314/1520/2298 2329/1518/2298
+f 2364/1528/2298 2363/1524/2298 2310/1529/2298
+f 2310/1529/2298 2363/1524/2298 2311/1522/2298
+f 2357/1530/2298 2371/1523/2298 2359/1525/2298
+f 2371/1523/2298 2372/1531/2298 2374/1521/2298
+f 2324/1519/2298 2325/1532/2298 2335/1517/2298
+f 2325/1532/2298 2309/1533/2298 2335/1517/2298
+f 2309/1533/2298 2308/1515/2298 2335/1517/2298
+# 132 faces
+
+�PNG
+ + +7iCCPsRGB IEC61966-2.1 +�@���R�t C���X��CP�%CBH@�R����f�[�(t� +?���:��0�FB�x$ !���i@ڐ���H���[EE1PL���⢖�V�6��QP��>�U�(j +�MFk����� +{{{;�}�#�tp�8_\<N�+�U�Zp'pWp���������e�F|~?��!(� ��HB*a-���F8K�KxA$��N�p����XI<D<O%�%QHf$6)�$!m!�'�"�"� ��Fdr<YL�Bn&�!�'�Q�*X*(�V+�(t*\Qx��W4T�T\���X�xDqH�^�H���QZ�T�tT�Ҵ2U�F9T9Cy�r���G,ň�C�Q�(�(g(cT��OeS��u�F�Y�8
C3��Ri��oh��)���J�J�J��q)�����2�a�u�;U-UOU��&�6�+����y���J���F�ީ3�}��Է�w���@i�i�k�j��8��tm��9���ք5�4#4Wh��М������Ҫ�:��T�������C����U�MG��C��c� +Ó�Ψd�1�t5u�u%�����3z�zQz�z�z�� �,�$����S:!��
�,��]�������b�6u=2V30�7n5�kB6q7Yf�`r�c�2M3�mz�6�7K1�12����͇-�NB��Lӓ��le�Z�-�--�,�YX�[m���hmo�n�h}džbhSh�c-���\�\߹��v�}ngnǷ�cwӞjb���������ȡ�a���1ѱ���� +cmf�wB;y9�v:�����Y�|���K�K�ˣy����獹�r\�]�n�D��nRw]w�{��}�G�DŽ��g��A�g^�^"���lg�J�)o��ϻ�{Ї��S�s�W�7ٷ�w���o��)���6�Z܀怩@����}A��A�A�͂E�=!pH`�����
��w��Ѐ����Ö�}� � aQѿ��`ɂ��"�"�"�D�DI�z�����_�xǔ�Hc�bW�^�ӈ�u�c����,ܹp<�>�8��"�Ey�.,�X�����%�%Gщ1�-��9����Ҁ��K��l�.��oo���/�O$�&�'=JvMޞ<��R��T�T����֥�NM۟�)=&�=���qTH� �2�3�2��̳���˜��\6% +5eCً���4��Ԁ�D�^2��S��&7:�H�r�0o`���M�'�}�^�Z�]�[�[��`t����UЪ��zW�.Z=��ó���ik(�.,/|�.f]O�Vњ���~�[��E�76�l�ۈ�(�8�iMKx%K�K+J�o�n����W�_}ڒ�e�̡l�V�V����ܷ(W.�/���scGɎ�;��PaWQ���K�KZ\�]eP���}uJ�H�WM{�f���y������V�UWZ�n�`��z������}�}9�6F7�����I�����~�~遈}͎��-�-e�p��u�`����x���l�o����$������A�{����}g�]m����\�9Օ�%��>x��ǥ��{����=Vs\�x� ��N柜>�u�����c�Kz=s�/�o�l����|ϝ���?y������^d]��p�s�~���:;���/;]��7|����W����p�������Q�o�H�!�ɻ��V���sn��Ys}��ҽ����~4��]� =>�=:�`��;cܱ'?e��~��!�ań�D�#�G�&}'/?^�x�I֓���?+�\����w�x�20;5�\��ӯ�_������e�t���W�f^��Qs�-�m���w3���+?�~����O�~�����pf* +Kw�����z��������a�q��C�;��H�y����}p�2w^����(��Umۖe�4M1*JQɴL��*fjB5��������#}牃Y�2-���kQ�n�8v$"�����m�-Kp��v!��n������ˤ�(H��G��Ӹ��M���sY�g�bX,]6��V�U�5�:I��]�>��s��v*^}58�(q����A^7���}�����ѩ�x�=�W��%��˦]2��ж��-Xyo,�M'0����\_m�}U��ֶ�Q���N
�͆�\���4�5���:�g;M1_�ی�R���v۲�DEx{��7/�A���Y���/cE����R4,���ݲ�Ԥ���c���/ +xCY��i6m�r���Һ�xe�ʎ�2�7��1)W�K8eū�q�n�8j"�Ɠ�;F��n���J[��V;�|��;��Ԡ�m��f͑c����z�u6E�-�o�� +~Ł��+ .���[L��f����ΉMB=�2�:�Wh���NH3g�ٳ5%&�����' ��
j~L��5���r�] +�*p�,�"�7:�|� +x��!��ʔ�#�U" +�?�=Ag.a[ɑ>��r�?久���x���7�$J2�,�� +CO��1���l2V�6��5=��:����@ �#�Ge~���F⿈@�}رM1"�6�2.̈d��૩A|��E +�%C}�TJ�%@��u��v��KN^�AL= +"g����ʡ�1���>Tڭ�Ag�]q�
x���H�u�-^4}kjǛR��s��//���XӠ*c��XN[=��A;����_ +�`R�]J�����e��6�-"(���ڒ��}�յlOPD(����#���h �ꖨ +RYbb���=����e��;�*�v~�M���/N��N���x9y�I
%�ё�s#����K�7�r�/Knԉ�Ĩl�&�Eu�x�:XD N���o��vAIi.Ջ�z���`��X]��� �o�H&�ƒiG� +p@{�+ʼn41RAO$�
֛О��Vz��J�iڎ�T�mդ�7O�B����3�2-�\�m�@��:�YwU�i�[��U�Dф!)��͖̀d�8S +�T���l�,;��تN�E��v��� �1��W��i5�L +����fN@0R�K�2k�[���-�Nq���z�����(y�R�Zv+�@��{�-ϋö@��lc5�kG��'����AdA��A߾㚄�P +4 +� ���ǯO�f\��$���Y[�S}�? �_,6�TU49�-@ǟG���4��g�� + �JzZ���M#���!d{�6�GA�tPL�U1&�7߿/�&�*B�>#�3�Z�\��P�H��D2۹�R,[?^�d,Yօ�f&�nԦ^E&Т���7�;E�
�\����JZ�N-�@�|�)�N�n�oX��*:\ׯ�9=1|�b��ӕ� +� h,&�2"tq���K�yNJ�~e�VN�U^�4����ۃpNߘ�]�B�4{z&5���Aa�����k������5MQdq������ ���R�x�P<{f�f�;����J�nWU)�Nj +�u]�|`�� 7d�w�P�)�%�R���0L���J����Ғ3V���Z��6[�O�yaZ
�O���@tM�O��O�%��]�+��c-��Շ�3k.y(�"�����5�+u(��q �hj(Q��QU%�f�pPё$������Y˶k8��N�"�B��j:=<���[7{�J�p����i�d
E
�.�>��0�۶�ĖL�+!�m�p�[{$+~�s��ƤL��Պ���?Ϻ!��H�@}� +�l�`*���VT��������r�f�#�R� �$9)���q��_j�Z�b��5@����&�7� +m��/�!/�� +M�
4�ؘ��
���u���u>���Pd� +�(# +�՞��?�E)3�=�2=|h2��ᥩ3��
jqkU�5�7������.���
��r��6845}�y �J� +�"�^ǿk����GXu��!�_�*�U�R +� +�Z���o���@~�V�d��z?h +7�Ec����)@ .��p�Q����^��=�0wx3ށ� +̓E���r�#���`cU��k��xF�U���k��(�+� 㪘��J�\��1q0.$� ^Z�'cfK�x2f/[��zveх߫���O��}�u�$�.�@�kuto-E�M%d�s!�V������
�(�F�ƈ$���[$�P�0���y�Y.�p���*��Nf6������)�k�: +̥ +h +����/.��X�{���A�G;?^�bA
�R=hڴ����|�8����Xt���1XI +( ]����� +��Bф�v����Ԩ7��i�$��+:�?{z�&�@X�z�e�Q<[8���#|�Yl�n����l ��@��� +$����x�g��)%�Wi4���s���$
@a�h��j +�2ghRw�Qr7�1�j��U���lYf�bF���\xY�3V� asjL����aW�o3�}˕�~ti����QP��dK�Fv0SZl�F�0w-�UΜ��wr[�,渒l� +��>I�m��6�](U�L+NQ!?<ZX@��p������7?�G�~�o��W�a�`���9~U��p)�E�!o�����ݵk 5��eȩ�6�t�BD�+A�VAu˜�pN���sE��D�egN�ga�o�kr�9�?<[0 +�J`�Ns �\��e9�'h�$� +*,���o(]�d1�Zgũ5�͎g��� �j2f5�����N��h�`��P�;�M�2 ϟ� �t&98�n�+�bm����iy;_�L){Ѷk��g5b��r@�S䘻ڞ�pt�m�����O��A +�eլfh@�U�
��
��?��O��mw���{�����Z +��ѩ�n��t��'��_�VR��G������n��q�n\2f�a���j�4��U��J���̯p�PR�y{>��f�Qa�fڭCX���U�ۢ LR��/؝��L@���ߧ|g��X�w�f� ���;��K8',*L� +�~%����sr�BA�' +F +�w-��(�J��ѹI��F�b�%���k5 +��+\+L�_!�}��tqH� +�d�����T��g�sχ^x�����'�#;������o�2z�����H� +@��i�,����ܶ��Ȇvu�GR�^3�r�,�ipZ�<�>�!���^�N�TQ��ӅKCs�:'���лgתC~�_gU�&��]��
%;�W�4��jߒ�^b��>��}(F�G�r�cD���9$�>�I��"�:�0-�W�������I�֘O�:b���.A�~���'9��0W�B%�/�P(f7�/t�����N�^�nw�{NS2[rG^��K���Ȗ�7A%`�s5'=J���nKv��n`��jR�О�?y#���=Y�%��!U� +3���`
�Fȫ��ʀ2v�n��Hs������5�U�mێ
��u���4�f� +�
sx8ʴ�����&�V4%i%k�k���E�ǝ9�`��U�nXr$�Į��fi��l5G�kPH��`5(Fg� �6�J���.���H����E�Q7��x8��O�:z���ݵ�>P�0p�>o�:�Z +�`n@V����w~���e��"�J�!�$���-p�dTSݴ�ኔ/}�k;w�K�T<3%��nrp_m�S鬢$c +���pq�@hIQv��������O�kΊ'/r>tP%9{C�w����_�Y�����a";�Ų�ib����V�v�� +>��yn6�1��VօFSXr�D'a���ȕ>}ú���u&��{�O:���n��}#+~�D>��6u +Z1�ȣ�nc��� +[���M�����T����:+�O��'|!�d� +�����H�:䉡���N�e@۶��h�5�o��K3���v_Y� +'O]X0p�jt�`� +���P��O�������M�$7���/�B��h��q��M�zm��i�r(YP�
����Nc���nQ�Kux��6�`Zٿo���8j-Y;�#Ǐ�p��#)�:�J@�Q��J�W���{�ى��=߸�����q�1?�����l�Ţ��_x���o���1���lT ���P�G>�q�b �r��ڞ ��S3���C��Á�N�8}����kX@��w�mh-� +���8�c<�-���h��j��%�K�Iܵo8�r�̛[7�O��j��I�ɤ����[�/C���6���rݻ87��&W��֯������0�Gܬ4c��]�Dk��!��1~��(G�������S�z<�Oxp;����W����yM�s]��c���y-�x����Byq3��O��e?f�eC��%���� ��A��وp���T���\5 +t���e-;��3����| ��R4�k�F;�(Ff�����M_��}P pF\���B�d�}$Y�C����3���Q�����ٜ#�SV�i"��͍��r��ɓ�����m߶s�8@�I�HB��[Ɗ������,ͽ6[*wD��J�y�6 �}���;��α{�n�|$Kԙ����{������ + �����1j5��ç~վU3�� +U$�#���K��'�U?�%; ��)�OT�`��>Κ���6� �i����}{��I��-t��t;|t��Cy��t��vX���m����(�>⛭wM��5 +'�o۶mϞΠz?�tz��zp=�����Bisz��&k�ɢby}X�v��,�z1��o�-�d��� +>�_?:.;���V��b1� +��s��.@?�O���l��>�qۼ���O�o����Z@�s�L +3��/���L4�j�x���7�F�/����b����#�PW"
@��E��boE=�O���ȵ�w�g;�(��KJW�vaEߘ$������0������^/��<��?y�#?��"���m@ +�ŅhT���]��ӽ�D���\�P�ǎ
4V�.<|:7<��]�j-Y+�Gf�%��^L�-9��D�1iv�8�p��ci�#��G��6Z�w9�m��E�w*�J&� +��E����&i]xMlB<&�n�������G�T + Zoy�s����x� +���Rd5R��W�
��B��}�%y�s˷�<O��ȱ�X�NZ-c�:����F�կ�4����g__�Xa��y$��O���}wON/Uk]�?����ݽ�4 +cZ�GFRN���|'W���� +��i,Y-�ۂS^����d�{s�ȋ�7\Y�����'+��w�ʥj����wm����_?(��ׂJ�7�g[&Gn�Ϝ2561NF�����Y+��|9�v�$������_=5}rkn��{V`� +�3���ff�!�+b�\I�)w�MmLկԷ� ]��KM�e�=���>+=*V�v�/#���}��fz'�V��&����.u�[�˲Z�r�Nk�v��X��8�`��b�ds'�%��.����Ap�|p���$$��I<7pF�;vlϸ�V[m�$��R�J�]"UUl��"����.ٚl�8����f�X�����ߣ��[�qx����f
,��v����?Xa�@��er.@T�fu�E��+lێ��[!ַcY���}�\.��@�6��d�Ԧ�zm�
�`�ۼp�?�ц�GҎ+t��s����'MU7����~��֖;=���i�q�qiЯrCJ�1��N��|�~���)9D��G!���)
�k'I +�~lM��}R�jwL���4��J 9l.!��@*&�WDWDB��TP����6��qEL�H��ݽ�y��NW7e}K��G�*a"�������N� +�OH=�IV�"��2@Pj����Hm�� +���ʌ9V�
�c��Q�[�t�$V�����iLi3?�g��D��UiPY�i���C��*c�:w"b��a��;EΑ��K��ij��u���J��GDd,�������������X7��i�Џd�d���
�|�UȊ����@�^M��� +U�ɒ +�;2�N=�����;��;b��R��p�v��inW^�Mi�HN����=�<�_�]}�w�ѩ�����G�>��������ΜB���k�`n��>�]X������2 +d�F�� +DZ�}I�pSo"R��7�J9�I�3�1���H +����V��s�ʲ���}�ݿ�DO��l�Xyd��_LjRJ�I��2�V?��R���������(�;���Î3H�\��������)�<+� ��5H���Q��GO��n6�\��`䚇?X��ww��T���������wC +G�_\���}��7��-<����Ժq��]�G��b(ػ�59^=� +>v@9��+<g���Q�H�d����+��!�:�.�ż��~�� 1��8��ڤ�,ִ�\�<2J�l +��HWb�u��㯌���!��o�Q�Ҷx�ح��O&ח����Hs�N�{8!tJ8SU�um����C@<���Ji<^d<���cL�R�w�N��s�G>A� ��/�.B�Nۧ��y����:�ِ��w�D���b��O<��_��Q��y�'P���N������l����\Z������*螃��ɝ�Gc�p������~�=��ܪQ�li��]RJ����S=�3qs�T,t�v���ۻrs��~����U-��CW��Ui���L2>0�(�Vo�G�35�~��_V������H��[��a�v�8",b�s��Tq��Z�B��[�vwU������_|̿�o��f�ګ�"�W����\��������ݷ����㺡7v�}��'�օo�R� +&`�rף��.9��j�\V�H�'�#�X{w
�֚�d\�a_����"x��TB��P�������]F9ey�@g��A���D�wo��@:����`J�V�z��W�o��yH�b9��dJC�Ȯ�좺'��^Ҙ@-�8�q�z�-��B����W*LKp�2!��K阰��VJr���bSr@Č.�\�T�Ӽ7����4
6�jy@�7���!�?ܻ(���_�kˆ�E_m��6���ۭ��Puf��ǔ3i��, +�υb ����|^PL�S#��*̚d�F�bS)�����v;��a� �)-���QvH�� +9~ڹ�C`�~~H�!d��s��ϊ��
���tb�d +d@˕
�-�q��89N +"�n�e�l�&�����e�M����{NH��?ߚ2Z����.�nj���t1f��Yr��r'�R�a�PH��ڎ�� w:�X��)A? +�^Ҝg�'��t����4[�Z�|�I�BbJ�pn9��vw�b�\a%A��h� +ڷ`Ʃ���k2?�W�����
3 +�����? +cL!+p#4�8URE��C�Z��I�-����b��\�YLn|�������i�)��#���"�b��'W�
@�����&x"��X +��(j@؈Ll���uv:wz`�zAL�W9�qC���ޏ�`n���2=EѸ��"��Σ��N(�q�U@����dU%���W�#��D���y1��"q���B��@WA[���d���S�|�!�U�n�O<{6{�^�r�/����/���Ǹj���{i��c�����B�Fu.�
����IV>5�~�$�>�R�l�d���M6�p���D��C�#'G�u���0G��N��r�{�qE1����,�h%�=S�T&$��&�Y��5�#�樖꼺��w"bpB��S�h�\ŧO�0 �����aii�(%YG0mb�\�1�_�[��_�ӯ���}.;���_������ +>�������_�u��,^y������������� +ǰ0�U����1�'� +;����� f�Њu�9A��C���2 +�So�{A��aՍk[e���r�
x->�
H���Ȕ����ӂ��89 +�\,2� +��Mc�z��\%
���I�^�����,��RT�a_�CEֽ9gH>(f�@,����8��L=��V�R1\7�Tt����vw��� �HD�"B�RJ����~��W�<��{<�N���w�{�a.�V���A&G�.���\e�l������u�=��K����?^y���Ň�7.5������N��Sg��V�V�V�]}wcqqzi��U���=t���(��b�8m1���; +�]�;a���3���W�YS+�G�P�`\���$6�?fo�ݣ��I��8 a��&-����bIq��~c�a�G +�PEE��7Ւ��%�i1� U��@�X9Z�iSº�䥿}��&N-�}>��� +�� +�]|�9�v]�}I&*ܫ"���g8;��2�F�ő�!82�$���x(��+ � �I#fk� +�}蟍�GW^xi�;�鞑�\����<s��$⡇DD���,���.Z��#���a�5|���f�Rw����ٗ��$@�J�;�ڃ�&UN��諔?ŜIT���|~F�?T}���j��>ڪ��,?x�L@�v�g��(����=�l�vC/Z��e_6�r4p8C �8�Dܚ��0�oܺ�ud +пr�����1*K;������ +Z��F�2W6f�v��?l7�EF��ݾ�P�XB�4M X�����8 +����ʋ`<��a�R�}]�!����K��S�s��rߨ7��r�����S��>��ש��^۾h����Fr=Y��'_r\=l6n'r�$�ǎ��, +CW&}��q�Ҁ��/\x ���V�:)q������uMA�@�.��
�ڶ[�����P;i4s~��������ۭ �����g+p��x3������8��a�=w(�c�TeMX0jA +p�T��?3����} ��k��o��:�����}���G��9���j^ޔr�J`d�*��uR�ݽ��b�u��� ¼�v�"y1��|��nm�[�F1� +UQ&y��R��Wב�����ze=z/$�B�B!�Ѻ�w1���)d~�����R��P��$�@'$0 +���v�vs\��=_7�o���XTA���x2�@�U�S��"ҌR��L�Se����P���OTj'���x��>��
�P���R�L�����@j��9_�wsn8�����hoS��;����Q"�% +#.� +a'u�A_�kd���� �O]6�ʥ���� +h�A�{���"�&m��(
C��Z��¨4Ӌt�1^������N�<�v�U��#f���aɫ��&
(/SS��6~^�r!KD���@�$�Ӓ�B�R���j��z��#grѧ�Ť��@bZ
&m�#�D�>�T`R&'��sEɌ"����*�&�y*��e��T#�i�On;Bc~N�"�G�i����Mժ�*�h���=3��a_�K���������:_1Z�]���/�]{'��9�w� ++Y��ݲ��W�48U�sAP
Y���#����sU����'�<�ع���O�o6Z��k++˰��짗���Z�h�2_i7լ|�r�3�[x-�=ӼQW'S6WS���dey�d�[�>/�ɻ�t�?sR�-����[�����vnE�=��/��?�q^������c�|���8�nj<�� +
;O>V��u����z�4��stuP�u�;�����
:f�5;ݺiW�)�������2�_�LA��^�D��D�n!R�y{;i���B��ko��e�ı�o\1`�����7�&``�/৶n�t +1�ᴙ��`����o��VD��v���/����+�ή�����ξ���*ɌFs�k~���v�ź?��ZMP�AR�W� ��/]Z|x���@5M7����݇Aig;Ag���~�����c����~��3��m葉`ߦf���KG��c�^?u���&���n�v�^=��w� +�e���0&��"*RAwP&!D�Vľ��*������g��(?�c"h�1�& +� �P�����ut�s�� #CI]"خ6e��Jx�f��Mh�2p\�{va�e +~�������=p�8>X>��tѽ������߇�k�������-XE����p1B��3� +j�f>j����87�sбxf��'��3g���X�u5L����~�q���c����15Mۍ` +�/������_�/�s?�d��qW2�����ld�Z��Z��~%I�������#��H��\���scg��©�~p��?���9�鑰ة�:C[���/5�i�O�|�����4���u}�v��t���O��]6|��Qs��\���ߵY�u������������ +Z Q<���R�T�n����?^k�]��Vf�I�w��TR +�D)�:�N9,�O�8!�|��� +�z�%�Y9�J�|�T���pjb��2�{���xЫ�P
J_^$�@�'mƝ�a���M�lVU�����u,�&����R֫����u �k���{1�RI����B��%
v�$Jជ��*1�>*�HX,�BF��
bsZ8U�"MS��y0���R1���)��o�w�~��q��� ++x_{�|$���,��~����P����R���^.T�E����;������� ��m����0x�͛�=sVaƳ��� e��h|4F��?�������Y[+�0�*�2�qF��`��ZR� )c�e��͏�eL��R0�}���R� �C�X��� �u��OQ_D���s�Q7��=�r2����#�b%�C�l���_.�U5�x�i$d$5����u��h +3�sDžW������������7�0�ʣg67�i(^�{�y@=�<D�J@��RB��*sa����@H�tr4� �5���lq��^^e@�
�.����x$��Gr� '-�2��W&��O[�:=S�9u�G��D�o�-(͍�e/=����U﹟�n���z_|���7���t�Yk�Ο��m������^^J��3fZ��i~�"q���5�/��z�9ua˰F +�2O]VMƔ��4�Ҩ�^�Q�7m�ʜ�j$)���6�ȥS/?x�`�ժ2 +Nӷ.v�����~3���n�<�sʅW]gN(o^�eF@66���s��N)-�M^N
��O�$�T��Z�f�:���f%���=������h�`�vf�h���w��}� +��bX��i�c2;��N��0*�o���D��.,�_
T^x#�ؖp6b�_b��P��ʒ��g�eTe���������۠sP�?ij�iR����.:ˏ��C�5I�lT��v0cRE �1���&�x�?�a% +����8-�o�/|�I4���O.����b��d"8]�q<�b� �9r]��g��
K�"+�J� �����8�>���i�H�q�'w�7�� ��*��]�l�&��V���*��#�_��d=d,Ӭl��X��bY��{��g*�]�
j>H��0�
+�� +��G��n�~�jۅ�Z�*��2)�CL��8],h�G�4�0I�p���ܩA\L�0��=� +���E��T� Bo|�!�����\&'5*���-Q�l���U�V9l�w�|�����Id\�?j�w}�����ܞ��B���U"��l��#�0i?� +�_Qgst�G ���s�)%9=��]���c�E�,rt�!�.�MS�ب�t
RQ��)\�$"G빒,#�<��R�i�@MQ�8dClc��z^)�(��U0���!R�U�K`�9u�H�������i�B,>,�&2�y�Ю_q�)ިG���8Q�؎�� +�
oo�(i����\,�z�O� �[��9�8)�IP`�60��)%m�q
"@<�XL$��"�K������*D�g�[�lw�8џX���EK%%R�a�� ���L�r�@1�5�!0v4��~-��=Ӏ>��LEa.�3^��T3�1��q+��p��ߗnp����\�d�"紡�G'9�vlx���~VY� <�a]Ö>� �+���0��������g!�:P�9l
R<�~Pm�x��YFs~�>Eɦ���R�`�Z����Œ�v��54��I����m�Φeb��o���
�s5�I|7%-�ςF���k���}v��O�����o�%@A,Ksb��+�=}ꅗdzAܸݿ�گ�_Xx�T�����<���i�g?6��mnJL�=D�l��U8���N�k��5��{6������ +|W�Q�����@|���g�ѓ`�B)�|�e��G�i���u���ܱ��Sq=�PT�'&kʀ�,�r*�K��r�ݒ �5���T�b�R߰�z��B�����q��k��dM�b�WZ�y�ܹ����?�ǘ5O+B&o�(&���%�EΊ`-Ąe����5�� M�I'��cr4�n>>B��XtA'��,�끑khПP��e� +���{6��б��i�Ì/E���ݤ����N���68�G3)�A�h� Q +fL��\� +#��䪰5c����V;�� ��=j�c&�������,�-��l=�~��o��: +� %F�G0vn���?�7�1��6iޮ�M�`gx��x0az���1�)r���Ϫ4��W�~I&yj���NkO����گY�m:�R}���ԩ��^o����ߐ�̾ +`��ULe�˴��� 9-S|"���3z��yz���1��Q��r�?�u�����%�c���HSW�C`,.����d��J;C�
#�j�1�e0֫�� +)�uԜB�_�BkNSѱ�W� +V���`� +R�J��.XM�N�.�Uy�����1UN��������M[ +")8�S +U%�.G&pO�@�߭��L����S#����N���5���U�{��xY"!�HOE�-�XNdcJ��0Ԕa�Җ؏����<����:���=���]t�@;��,D��d���rv��a���� ���Oاpe���0O�a� ���?�R'R���=��1�-R��~v<�*u�>�������c��(__����4���<^���'�/D��o�o������~ +˓IO`mN�q�ء5��P\�jw��־
�#�4���P�$x��zP�)��u<t��c�w^���kfW�J�_8��������������q���F& +"ș� ���_�� m�ST�Ċ��!g��dpĺ���>z��?0�g*s�t�;!1C�_d +��?�D`R��S��BgO�} +%e�ö1e���8�(�0bxͨ�MH�{b�̴�"����s�%��X �"A+i�)����O�G۽�;Q��d%��^;��� +vWPȔzs��x�6/7�! +04�,�K�@�1 +;�w������-�4�8�H�/��������D$�YP�ѓ4|�D�;�r6r2�Y�MF)@J��龟��e&�F�|�H�ʁ&Kl��wbR����aGS��kx���)��Hu:Kd +:B�:"��6v�GЀ��Ǥ"�iQӆ� +�oV�E���칱��; +X3ʹ�����]n4��Sf�Y�6��P��S� +�V+��V��\�ffH������]�;95��j$�Y����]�MYε�v��Q���4��0~��G���t.YRK+�"��%q$�Ly����l������:�b�~R+wn�'��y魺>-�Yd +%_��| ���5��YpbǶf,��/'� +,^�0�I����>ط�xP�z��=z,�i\���/*�}��1W�=��r�x&�J��*c\{���]���%������k� R��dQ]b��nׯ�Úo�5��KOq���ۭ̕'z�%ij�d�Q����T� ��!�d 4�>v��c +s���}�H�"�z����R��Ƥ�p^�컠��,Y�{��Y��C�wB��C�vHE@�%�pn��N���2���S��;JF'�]��Jk�
Q�m�&�`%0�aV��c�XΎF�t�E�4���9m�uS���ɃV�UTP2c�B�`�YM(���3R�!� +Q"I +\_�Q�~��H9%��ۋj�Q�ضwe��*�X�۾b��»�iw��%���u%,6EGS��bhHL���$ 0��=X�`%[�\v���qh9�����ԗNe�`�`,�,�>��)��f���Y|�u5U�h-�!���$[��1c>y����z1���v��b�.(�9����]UFY"�10�ʼ +�9��vA��u���$���nb.�e��}�Z\��k^ea�`)K�/��� 0m�]�;�g��N������w�g Zm�\��d,�g5�VG�,�̮�;���W�����8d�~�}�o��Q��(%��1��:$-��(ɭ�@D��9>�`�0Կ�7x��c���?&�������}��_�i<�~�������v���������N������4~�A�����*���y�2�ik��b�*�H +��:� s�ԭ
�_e�~�Q;���;pd݆��J�^��\�Y����^wk5�>���/-��Nt�}�R�_{���d
?r�6-�:��NyF�+;�<��Ze��}y�fm�G���^����U�T]�[�Q��;�{ǫ����Y؊�`kӝ>$S���e�Z���W��)��7@ +���xe���/��Ů/7��rj2�A�%^�^j�Xr噚϶)l�ՠ霮P� +S
�S���+��#�+BZ`��y'K}�M���Ro +7ȜR����H��q��,G�"�l�J�u;�f�Yle�q�\0 +�W�9��c0�h=�~Q/`?f/��ʏt�`�?�jG��n�jfZ�a�&���g0o����4����P8GO�{��D�;�7q��^��M=둩� +zFk��������x#m�zkT�7�Rm�.bq�@=^I�6���-RP�)�\dx�i�E��+О~'ҾK�:�N"�k����7��������>�X�s�+���e�A�2Zw�� +Ur��3�Ջ{��6����'��h��t ����@���'`V�d����H0:>,�]ƴAP����t=�f�Q2=~a��
PS �,�sb �_�^��r/ +$[hT���j}�Y���p�� +L=�ـ�=��� +�Co� +������ +}h�F���|�L���L#����a-�g�Z�!#|�BXI��7�Օ�<��1����W�wnu��~�ۘ�┳��Bg�'X��2k���I;�q�l�mvr~|)�s> +�~G�J�'p +sTH�msּ�z��0��r-\!c�ʽ�b�#
�W��x��1�y~�4M��!�V�*�F_�.�Zdz�"�~F +/H?�(<�@^1�]0�)� +Y���V䰈Ƅ�_P��` +;Ȍ_�?�d�MP�E��pkW�ne�f�8�l�f���?o)�Bu5: +t�H������{��e#��a��l@���`���#e�S�M�A�c#�E�2U�-@-��)�� sj4�4?�t���Y+x@��/7�P����VV�!�BTV~2�x5>�x�NCl%�%�OV�wjC�Q�I��3��@�����om
�>"H�B�F�`�ܔ�]�Oy�P
!?K�&��Q +'ɀ@C�/dc0�0c@�Y�H�<L�y���w���������u� �P�ʡ�.�����(��h3�G�>,����;�̑��k��V1g*�2������1[a&��I
� ZE� +�CL�>�i'�����$�r�o���ذP�Kҟ��,�T���x�/X��c� +ܢ$���Ao�5�n��52Z��52������l��7��u]��?����sԅ�S�Q+�V
�9��2F�7�T��p�y�;p ~p��NW
J-
���ę�8�� P�
�����H��9�^9$�4<̰.�<&e���/-�V���f��1� ���A�P-M�+��!БB�W^<HV�r5턋$wa���~6����F6��^gZ#�1�OT'����YI;���&A�q{(�X���K���>�Ph��P�r"IJ@��[��Zd#�Ã�6��:���S�}�O +�D�b������Wf���0[�J�Ȟ��'� +�
y�ɓT�d��{��ȃX]3�WsY�=��~P*�6PN����Q-��u�����-e��K�8���0h儡C(st�P]C��p��>:E��O8%nk�C9\�b�
�. u��@ +XH5'ձ�,K�"S�R^$&�9�B��@�7�W{f�&%_K-k4���h�?o�k�x�&����$����X���B6 z���bH��P�2C�2Mo��5�d� +�VbM\�`b�7�&U�ލ����ݞ?_tN�y�b��{��G[�
��K,�x.����K�%2�ՁI����d�1��EiLR���+����R�E�3�i̿�Hk5/"#Lj�Ԥ����q�@�,2[��Z���d�▎+��&���m; u|�ho����J�_Z`�,Þ�����b�"� +N��k٦-�)��߭2�S�SD8�t|�֕����������'#�C�,. )A@�y���dh)Aa`�ZT�$a��F�efa�3��ZAC��Õ�6+�h�Ե�I����.M��t�#��Ǡ�E����9�U�I`"��[��w��s��횈"�E�� +kc���r�5�������)��Ĕ�hd����s��熂gz'=+CX�J��=�� ဖ23)g�r�sXَ�E1�V��f��/��c1�%�,Ay|��l��AQ�ct����hP*#O���P2�J 0�ϕ�̤��f�XWB7�S�Woh� +�|�"���5����Y[`P07��4>=4v5��:�GE&�����\�����̸��&&,�Sv~"���J���0��J�AX�!�UA�ܛ�Ἃ^��P�V�u�z��ר_ +������������Ԝz�)熲J�I�lP�+�Z� �vX*���Z�TK��u&���1dӼI�U���>�q}F5z��רb�a&���yi��Q�e䒨���>�M���A�s�˽SIk����O�"B����Y~8x� +LHf�Qh�0��,p;jȟ��^`e��L�i��)'{F��B +�pcQƴ[��� +/�]���$%K]�ӈh���<
RWC9��b�OI*}=�kGՇa��$V�j��Ȍ�?����(IK*$��5���2.h�)l���ң"���z�<���BOg�o��V +ߟ#F%;����S��"�h��i�V{Pj {�r� U�:hq�5��&�HZ�%I�UZB�*�V,MR)�B��Xp���t�5\Q��C��a|�]ClgX=N �[ +��o��6���4v�-�#�xAN�Ty�o r|E�K�v!��<C,N��REt�F�G�BW�Z��Ri�XUeqK/�.�Nt��{�f|9LH(˃���$)�\�����,F�,���Ƶ�ߛu�4�Q1�}�Y��"Y2iO�x+�fP���P �D��@�i��.Y cT#�Y����j⾑~�e��1�k�����G��6Z����|.���RAr��#A����I\G�EW��&�NM��K��H� +[Bϊ������[I���B4���2�1��r($��d����na�{קn�;q>��=8-�ͫI-Y� +����jD{ذ��II��¶*+~?��<�y!0.%���X�\E�nis$
�Hw(��+���b9���]�)�<z~<L��VQ��s�� ����]#��$ў�6Q� G�IjK:����Z�d��(Jq�Ј��5�8�)"-z�R>��8֝��5J��#�H�k��ׁ�k�H'��!�E�귱9!��ņ�e�z�`^&�����|*�õaZ�Z�u��<[f!�`D����$8>u̴��M�
1杋��l�Ki#g�=Q�Q��ս�
�&�'�3�#Sb��潠0��P��r[67-�T#I�,��o���Q2�5���f���ց� �fܺYsn�C +�0�G�J�٪����B�3�� +��M֙qTWθ���3 +qy�%SlI�Nb�F2�#^\HN��<�2�gg·��
�pN#[��w"P��`�]�i�%9dp�ߏ�kl �o +[�/t̏i@��
�\'ٟoz�&��˰�[+�ޞ���7N���?�&:��P1�+�t&NGZ�r�����0gs�Vs<o��+�
��z�+�������;��0ܴ +��4-�/�s�!赈ʹ_j�3>�~��۽�i�H��*,��3?��m�q2 +&�z�S�-��"Yt����v��|��+��<q��>���l|n +���7Xe�M��>#�h���,%j62�1좦eǑ.*� ����v;�Q%�֎�d�.�%�:V�-, + O6̕�b��5}L�P�^h���r%����RUg�Ӆg��F� +*N +���m��*)lӈ�D8cqQg +�-�ń�}@�m�+y@1љ`,3�ť,�xL�w�)�,��uf�cz�-S��s\��s�����TFx�I�ZK%�����, �l9[8���P��pRb�)�C�&�������"�MV����߆��0�#̎V�X�qqb6��1Y�s1˺�ʮ���블v�ĩh̓<�2���L�x:���Y��~c�2��B���~Z�4�I ��k�C���ǐS�7��D 0�]:�����* ��ݩ�������� +R�w�` +F$K�Hl@Q�3�S2F4���{a���gfz�o�a�{bJy�Ӵl+{�h�VR[�1��u+ԯ��7��?�M�e�2&�}��WT�K<K�K{���(�t��"�L��Y�A�#v���]�ڼ�z�b\�Ϸq� �g�c8~���WUgK.���T�4��Ԭ��rb��4�Jl�8�5]"-���h�v{���k;�9��z�|���yp9m����%pf���;��!�(KFD�b���� +25���q�����A�W-(��1,Nj����~@(���k¯� �Ӗ��Y$[2�GN0-q`�T�#�S��{�.e�ǥxJ�`�c�?�q6���� ��ƌz�yyi�_��+����-c�I�X��e�&s�R�G7L(�.)��JS{��z���xXi�l��R��m + J"�e�ygTH���^��F3��o}S0G=�}�\��"P<�Ս(�ܰ` +�/�9*ھy�0ԣ�먐�Ϸ�ԶN�T���M"^>,��� ���?*�jL���4������]�_J@o�ꗖ�_�m;���j���e��k/��g_�~[|�aݢ�U_ud% +ȟƄ�_Ja���Nܰ����U���n 3.GJ��`6����8�'��P�3yD|)撮�0���R"���/j��������T�w�f)�8�sG`N,f�`�D������o2��4q�+� �<-�����Z-�-Y`���g�4ן�A\��d�:��UY�������<�VJ�CYcX�3`.3�� ��o?ߛ=�!��^n��l��"�� +�LX�ɩ��V���c�^U��.���!F�w�!a��� �H�T���n~��ǒ�/]*����{���zK�я6: (��x�A�'<��@��J0�\�rلd +��\s����|��0CR�xbU�]��/x���S�N/+�<q9���s̗̈́���뮻Ξ���|ӿ�+�D�[?�<��[*�������'QB��ړ&+��Ϋq-;g�l�$�"Q����o��\��K^�����ҹDk<�x�Ѡ�4<I�`"G�(o�Qflzz���v�����fU���U^]w�}�c5&��O���o��Ƚ_��W�|XL
�4���}��Z����N�v�b��)>�;i�iAߜ ��� +�9q��
lC�Ď�V)�_ȅ�SC@1������E���2m������̛Һ*��p��2*[��s�
S=x�����@��{�
�gd���*Qm������~�A��N�x�D�n�}�>�^�%�;�|��>Ɔz�+$G�?^b�4L;tM���ʻ�p��_y�%>����d�JJ�@6�"�o:h��ۧ���⺻��g˯V���`����|AD)UG��P�Rc@���e"i���S*��*z +���?]�&��M@@X�r�tޱ�d�.�c���s�a�P����e��^[
Ҽ�Sw�' ��~�,�#'`uU�� ��{e`�:Mp�r�RmǴ�Q�U �;�Y�� +���D���e��Fg��mh4t<UXNG�۾����OD��Ƥ�5 +Ye]U�4�W^$ws�;�Q������(^M�<�-F�b�2e0�V��i=�Xњ�xc.�g�֞�)���x|�j�y�T#�r� +�%2����!�ٯ�0�M0���Bt�&�/'�Ok-�1�9)�Z�7�Pu �p�~�Nu�#uD��#�k�'� 9?��)>�J#��T��ЫQJ ɦ��|ՄMV�q�ϓ��u�����9L/�1�����t~5"��
��TW �$���$M��;v���C��˃+?~��u���F?wP$Y[[9x���]*�����7�:E����zF�9�����۫�k�r��}���H�K�,!_�}rh��P=���F���I�r:����׃J�N�{��ƿ����Ǐ��\��Ȧ���\-�xŏ��o�Ζ:TFڴ�y�\��9��]�?�MIr�tE��ظU
{�}�U�ӱ��z�A�����ve mW������E���HU*�ɢ���=��WQu�����M����_���k�r�%t�&Z������9�pSUs���TQ��f�ԒG�i֗���p{�е�F�֭��{i��ϊҽ'G$�I�,����%`��I����U3L.����Qk5��,�C��iZ��0J��� �=S��Id
���y9���DJ�[����+g�� +Ne5�6uu�(���8@�]w�;��t�Y�I7�l!�~Mu'ġy���Z_�Uo�B'@�O5^��~�[�<��1r���R�� +R��t};���HO��L���&�>��z�*�LG�����S�1��1=e��
�c��vL!�ғ)>�G� ��LۢA`�
�R���1��������ٗ +E���8�J��}YU�b��jY����F�����,�`�R�77�!��m�a�<��,��c��|`'ʫ_T3���z�W�|=��~4 +4X:���C��q0�[��������\` +J@�+�^�t��z0��M�H͙T���E�0��s-�T�o倢ؖ��[u'��F�v��J�䆻Hv,��k�g&;��5���9��,��,�$r��}e�%L +ˑ�cI�Q�9�gX�K�����k�Cv��̘c[c��|��B���1�J���?0�K��|B��(ـ��,�;��H���ݪ�(�C*�.��{;vl\�������.���wk�0|�Á��V���������z�(���3���~�+9�O~�s������}��_��ç��7 +����k�$=�c�g]S�:Mi +����&�X��ڶ�=L49f"�ń�j��32eY�B�M�C`B�|˂}�U�+rF�iU�i`ta4�-���*���8>!9?̯�p��*�E�ZSLMts��4� +F�ւ�y0�ṽA�4M��1�_2�֚�O�gT�j�H��vT�a�1����T�*(N�?����T�ͺ�e1��<���w� �1ou2�,�Fy�CR�E���,�D��4�ǝi�~����@��}�g��b����{���Ϫsx�o��+�|�Գ�_���퍢7�t��(SZ��%rZ�����-��������
��$^fLXw�����gN*�2A93�YV
�_L�Bk�v�qv��{�?ƶ�ڑ�\��2�ϒJe���П�V%*�E�T-<L�#�@fp}@Ӛ��>P �T�#�,͘�k�\L� E�6Џ�0`�_)0����K#�VU������,��~fY8b[дQ�-��d3 +���D�A㜚b��S��D*NW�� +K��tq ��Z`&���q���0e�l��T$TJ]>�D�� �J��b�Ȣ�_ +4�g������'h�/_C��W��ah�l� +% �N�7Q��4��e�<�h���� +H<�~7�VA��`O��<���Ⱥ�?S|�,c=�@�UU�4�� +��a��wl0�J�����[�J�%�����w�{`_(veBٟ��$K�������
�Ѱ}M�1
g�m�����b���7��,nW +��c,6�&A�ʬǁ�H�"N��3t#��p^�2���Y�Y��������R�b�Q4 +��q�X���tDL!!dA�ͣ��_*�r�J�X�!5� WŊ��Hc�l�
*����&��~��g�����������u��Ĺ���y�����in�Iv�몘�s�����I%#8ؑ5Κ��Mk���$�Վ`��3V @���`��;R���6n^@z-�[�G>E`2�z(�D�T�PJ��D���3���Z�55呭�A��=:�s\�`��& +C'Z#I�`�¢��-7� ��9��}�k��P���q�$�hû�]�f�����'�wES4������_z�2�����G�}�
w�}Okg���<��������t�y{w �.�A�Lk�����n��O����X��R�\{���Q���6X�h�v8��W�m��ֽ:�*�~��Z�_]{�%.��*��M}'��؋@x��o
L�R���}�8]=�АUS���V�\�7@'G��L�ߪFc�G�k����p��+��x%���3+�0GWAZ��f���hLh��h�K�+pMi��e�*���q<�&[)�04��L��
WP� +��o�������<��ݘk�gl�ʏ
�s�\s�W�6�,��[�6�w��00 +g-ϫw��3+y
.�k�:c�Ù�'�������]?,����v5�Lٙ�(`E��5�~��Q����j�@4D���`ݛf +��X�ٓV<��c�\�jW�6<��0�J�z�x�L�a$�$,}���)��V���r<d�i�م����@!��(�!�]D�B��!��] +Q<�
N���`�hS�����f +;���f +��gr6�0�����N]k��(��0'F,r�4���;��h�k+e [K�z&$tc5���c4���xym�r�Z�UD�,�+���N�����y"�__a�^�?���H�:�ܑx +壺��Y��^@Q:5���t�Ä���j�����x��k���QZ�t3�P�/G,�45�y&�&�#�O�6i����IaTD$#���� [[���7D�����)�͢c쿹�o���%�vS��4�f�w���D��Q�0�&_�*D��,zp���Xd*V2&�{�u4�a�KJ�/$�~G�Oǟ�������v���b��o�^XJ�����'�γ�@��
+�?8�U�26��=eYC�N-<�����'�.��̜S��B��%�W�u*ێF�@sQ �����[�⻎ф�h�/�v<���|�/�/�Қ�Z{�r�>����,�W���?�� +=�Y)qg;`�B� �A� ����U�?����U�d%z_P�Å�lS-�4V�|X�^�_�m�j�����i���f~F�D����@[��b��w�fy�kJ3꣤�>���4�G��t�)P[Y�4�5&�f�"' +�y@�$H +,Ȥ�[_�a=qG�BUa'iz +����}i����d�'�T`f��@��#FT^Q2���@iuɕ���� +���v`�V��:�J4s��7K���_J�%�?�֢�3|��Zs|XX +��U�G(7�������{p{V@_�d�Yҷx@�t�T+�e�>*,]�Հ���MZ6�L}+ ����=T�%9��VጒУ���[ϟU�R--s�A�d^N��%��+��p6�YĂ@'xM��E�~� c\�Az��k�a�߿�b�i(��æ�a��t���-E��+��s�[����!��u
E��@�?��'?��������|��iG˯m���k*���
��8�G++CR��Ã��$�I +&0:*K�R��2(r���X +X�a>�&�����J�h���- +Ž��Hk����"���B��ۛek��x�&���Ewֺ��)��z�����aBl�T��$bE�m�@#>�r�|0r{����|���gV�]=p��<��1���'�Y��?��[U�-9���O���@�+k�����tSP�k4�F�OD�c��9���7}��.j��͖@ֽt�~_���o��7��+G`T�E�P������4Y�S⣶����,�dP&��K+?������?������,Z:�Q��#����)�T���6w$ɤ���TG�&=��ʮ��,�_�*h�� +���|��7s<�P�G�
��ؙ��Nu�h�h��|F�V��&N����
G`s4��m�9u��}���"��$%k&�ԵU�.x��o��S�LK?(�M��_x�
�[ͅ��%-�}<����v��H�s�"�Ȥ旸a�t�%M�Y�[w[�j�!�����a��iU�/5�o�K�Oq�G��< +zv$i��Y�J�&�){�Iu�B�U��:��t� +-C�K�;HƲ�t#������Ե,������xc@=��x|���B�)$�@�ͷ�Khg�֣p>f�L6�` +O�m=F��rFkt*w�IRz�:2�FV�����ރwι� +SC���9�������#�DNP%�x�;�}u�o5�z)U���F +-���3�as�U잚�����ǫW��C��=�� +�bOwuu�{����O�fE��$= ��pM����/���.嫧�G��� +��35�]�J +@��ga��H��S����7�:�ꔃ?�.�j-��`��W���̓��-K +�� �v^�
+�{1?Ҥjd���G�BR�G�d��|��?�q}�X-#�w{eŲp��Ɯ]�I��i���®�w�!=�Z1�)ޱ~��
��&y���j�B�qܡ�(X�h��I�j��#Ru7����q�w +� ��6>��ʅ|Y)��M���}|L%���8���c]t9\}B�
��r��Q��M�Y��o�ْ@�:< �B\��n~NM�9k
�E�"m�Y#Sa�\4>R�� +Z/�7�a�Ԩ�qV��M������_TO`VF\��J�2� +��вf�d7u�������2ɨj�c@�{n��FT$|��kB|d�������]x��~ٶ���>�yL|��c���_���_��jW(�b&���֩���/�ʺ��$�ϪQ�m��t,�o�WovA�m�C���{K��l����[}�bv��)���C� j�~yV�wCLG��M#�D��M�3e8�㸊)�2��o��DZ|v�'����+U���x�53in�:����
��H�V� + +N��b�vɥЗ +�qc�K�Zz��V�Qat� +b��c�� �B�\A�@|A.@x��fvP���(��0l +�Œ��踬�Ub�I�F=ٕT��R{�05B7�f�?�WLY�?�=��|v���_t9�- +��!����!i6����_]���<vv������?�+�R��trz���LA����������kR �����O�����͒`� o.�
i�b��:�Te�� lj���� +r�pʬ)�N2)d�W�ro5k��^�|�� >4x�g|��#�_�b:P����+�"A?��� +�a<���Ա�Ou���@�:����������+2c�Qɏkc��|x'�� +-���Z����"q�7>.!��j1�/�p����c5}�� �w�^��]��P�;8����v���ߩ�PUH�VΟ:y"���bJC�e��,��QlY��,Y�z{�T��/���l
�$\��y������n�93��e+
Ň��5���A2��f�*�����@p7K�$�K��p0�+R@�>���Yv7{F�����ܺ�W���g;o�âC\<�1��[�CZ�xG][b�_Yy:�wc�Z9I
)G�i$g����!��*�+��_��/�^1g��3{�P���6�^��ar���̴�8��XD��|yw�SB�v�|�?�����=�.`?�'_y�q:��5���g?�"����M>���_��7.�<�%�v�W��SV;wo������b]�Q�s�x�/#��"g/6��r��Sx�*Y�"�Y�;XB�6Y*�L�<�9���bK��!DN�db�l[��דk�}�]�kzۤt,�\��ͺ��+{�Go+�l!\�n���F�В��ݢ{��1��ѕ����gp�㍵V�>.�����C?��z="�7w��?��+���z�9_o�a���=)��qP+8P��sT�̍k� )�_��P�( +L�Cݿ�����=���q�Q٘���J�r��)J���U��-�\^M�* 6�G�2�ah�XW��{�7�ۯ��z����9��%��k7$x5�z�{��}F>�,�*#�E��|��(�,�ȋ3f�l7�=v+����,��q�G��p��$��2F!�
V����"�� G���s�Z>�p�I��<)�{��).�h/�8���+�~P{W��w�P��!NԲ���U���k��KgΞ�zy� �ϯ_���0�O������N���
t0,��T������/J�h�7�9�U���G +�[���ZA��8���Yq{SC��x��X���l��T��,T(�A�m7�ی�p�ﮧq +2���9��\���c*�/�b��E�`��3@��Q���������:?,���-M[�x +VE<��`���?E��>�);5��Sj�����hn;�ҝnb �sd ��i��`a�t.@+]ˬ{�]l�������һ,s������Ɔ��N����PU�b��T���m���������c�,���s�I�=����$��z/ݳ\?���`V�b4h-I��g��N?���4�[\�#w��ҐnR�t +�~������y�NZ���<t:\�8Ow[�������#`��:������}
����K�2b.�u[�����t��"$���u�������Fg�������]����;u�^��|E���6lgbݯ{���
�J[�w�2��o�1��^�\خpX�^q8٦N.�m2^`�?�r��%�'�tE<���� +7��?��o|��|���}�s�����,�\ +g��z��Ҕ���k�]��J��1}�x��X�X��|���������W���c�v�T�f���D�];8C�Pΰ*���z�L����Y�� +�cO�,�����<�>WAA M��B]X�û}%��p`ii���68�r����N�;ob�1�{m�
+��`��T,�=�8�����Xp;}Z7#���{����_�����(&�I����8>���d +���R" �;� +�����n{l,S����|��U��z��ԅ��>�)���Y���˃�_fb�����D��wd� +'��&pW'�tc
�D����z�e,�7$q�m$�Ԯ�`jq�T�A|�h�%�FA/�3�g&L�$�V�q�J��܄b�[��D����lx��#HDdO�Y� �&HZ����qo��>��H�,�z�fsx��'Oun\u�6`[}�*(��Z}$��>@�Ƶ�
Q�l���^��n�;��J�L#�b�)�0EN,Me��G<�U��fkI�R��� +v�L�}�>�Kr2�����)���A�o\OG��)w� +I�^&��\ދt�����:o_���/�qn�!r觃*'�(C�)����Q�1�4�Rk*}6ֺ[����x0-��{a�68������������~CL�b��{��7��_t\'��T�d�>���q����C� +�����i�fZUfu������"8(�LF��:��:�;�U�_��N���"w�0d3EA=��l% +>�ᶧ ����+/z��{u�b����aϔ�뱵�-�V� �UϬ�w�~?�o8
���EП�DDe�Ɓ\n���A+�@���4g8o�:�u�� +_�v``m��@�1{����1�:Ca�vj/)�P<�M��5�b����� + ��k������X��\�\p�D�DCA��Y>�aJ��<l�=0Le�� +�>�5�m +�9FI����aj~n�S��q9fݟ� +���������\k�����bmW�BJq(�L��{��ECp��0�� %�]�<� �3裍O��(��atRR�� +c�n��yA3�L>�tÍ��9 +�2֪���cĩVC����z!V�K��ER��x��/�����ܙS, +���U/qM��������?�w5�L�����浢������I��g�o��9w�y�z�͉�'�o �u� �/vl�#�X +m.��@��a�� +� +L$M3�r�H6���
(���/���Z���Ϟx�\����n<+O�)l �
����d�rc��
��YT�����8��a�0�t��xs{\�����+B� -I��bCf�l��1�2�匲������Q�<x���_}���{TX�������,�Y��X�v���G�vݱk�ҙ�<Ce��߬���"�S�L>�lQ*�ó��=��+�0+�m��ɬ�5qr!�� +p�+�]�y �����2�����Ϛ��k�][ȸB�6��s�?���=��{�������&9�]#�}"0O�9���g��z� +��1<7c���nh����9i5��ݠ�EB�~ϯ��0�]n~�na6|ͪ#!�̩Bi�nƭ9e~��M +&��JJ�]uή��<����R��P�r~H��b��R�ݷ�៸��!�L��던��QJI5V��z�"���
��Z����>`����oi��u�¨�1R����.��>��
J��-a[����C?�� ����@���-DJ^6$��!P�̖?����ЮǴT[D���%��{�����_T�IpQ\|�o>b��ٓ7.O����2�1�X�M��C��$S*?�N����*�C��G�����1u��y�� +���M�("�V(3:�����$QL8��������#e����3���OsO�>�7�A��wǙF1���H�vB��9�,�h��~�XG��I>+�a]�'>�����|�'��@����h�"��Uދ�{�쉸tr�Y3�(��T�8D�W�� +q�_����3�+����-��<�`=d�����_�S��7�қ�`'��k��>~�R?+EK�~W���w7���H�����<_����\���D>�N���3�5�e��n�j�a��ٓ�A����[�=b�o���11�\(��+��< �����)�X�H��D��A����� +-3]h��Tm��'E�h�J +ʚSB��ٓ��3D�����r��yJ$\�p��
�����t����8g�v��DD0��G�S���8!�I��w����Ϟ1@T�;u���}St,��ܻ�>�4L`ϕX���8}��}�9��g�͡�o�/|�V{��~�z:&���,�|���}�0�� �7:���Yy��
ҩ�ڧU����Gt%�����C���Q +XY�?p(�g�_� +��g +bBu�*]���xor����UB�
5_�|\J�s�����eo�ƒ]�~� +���G��
g�&E�P�cNs,�L��L��X�x�d��,���8�1���;�����1AQy� +���TYC�E +#�� +�E���[e�`��;�����L��A��=lR/�A���J�9�x��0 +�td�*6Ia���������ӽ�%�`�����E�VTaͽ��/0����JQ�+∲+ƈ��d%<%hTgf��"!�ͮ+���+$�v +��;�0��*�������\�x9�? +�8� +@4��Y_�70�xffd;�u�
[4S�ߓ3��A��?l`pn�*�J�d�#('7w�
�x��h(�.��q���������w����UA]��z- +w�:ugf��O�N��[�A����=��wO����)/8�9KV2���{g�xON���la�q��K|�|���
���_~����O˹�.�{�;9��-�ϝwl'$��R-C#��G��ߝ/ϐ�x�<9:�fZ]�(�v�q<���zOe� c�Bh����S$Y��fx�u�S�Nyb�6��r�lq��U�R`ǭ�Ww�V����3'��F��I�Kwz��"��5�#��� �����@��};�rLv坝�����y�i�U.��è�T��s�H�pB&��!�-��I�:�e
ه��G�V&�t�1��:K^�Rb�Q�J�����F�n��q��Ðۣ�2������.%�LDJ&-����o�Vs �
#���/�1��-Jx�w� +L�^�'J����(F*�:%�z2��y�^w�ۢ�u��{�V�'-��� J��QZ��l71`�OƂ�U�I@��t��Lf
ۜ� ���2rP��vl�����ҸFT}Y�|��<�k',�d�pm����c�j��Yr^��"H�5�nL��2L�qb;I������p��_��x]����K��b�}���~�C���{�َ$wE5*<zs�J��������u.oy�[����n��I�)�t�������ȄW��8�8.���F�.þs��V���] �6\;#��̝Ct��F[է.uvŶgB}՞�� �t���4P�L���`�x����pbrq�,��II_#��0l!u`������f��p �D�8^"P�Sp\����g�j��������c�O ğ:q�䉳�G +��H��>J�6eX$;~�����+X-�`�_ +��� +*�{�}�l������DH�p̅��C +��N���&3'��?%�i|װ�����������W��KI��zx���_[�W^�G��Dl��U�&ryR![� +e>9�%�#�uK�o,>p������B���ɐu2{oN�;�)���a�FfE�Ҙx>��/nPVtpE�{���vl�4�4�w����s�<��Y�w��gԋ�\��A�'�7�1��fa�_.�pw�QY�>mC��Q�o� +H� aW��ܮkCV��� +��Y���Qr�Xܰ�����P�PA�C��c$��� +/|�l�'�i��2�8�u�$�Ʃ�̔�i5��B? +�w8�9*>x`om��M��T��pm�i(���"(� ��e�~W��E?,�-��w�NNX�E����7� X���� +Zg��7�n�jR3^��p۷+�e�L�X�P{��\כ+KW��\�t�o�$��xd� ���m�J��[�F��ro��V�9"l���I V��`�-�(�c�=����m�ڕ�M���KҨ$le�1 +�y� +L����=��������8/FA� +Dԝ���[��3����d +G��2]H�UU��ȢLĀr�7 ���oƝ*��l�h5�y=���zY +����:���������o���}�ZR:zG'Q����q��}�Q +�p&5啥�l��� �k�'=M�\�5dJ%����2���ݐ�|T
,4-��;�4�Iw�ٳ���2 + 4R�#3�.�U5�O����Ј�������D��</��z���`)o��=�y`�
��c�^簡:� +#��X`��L�Kh�e=����64� �+��s��e=����� +,\�>{�1��uq��Q�[f�Q%۶�۶�� +N�I�|Q�2���mz�� ���'oo�3iwڀ=J?�̩���MNe*&�v�]���V��( +3�ٞ<�w�'/���a=9���`s���?}b��蔹����{�D3}��!�u�*W��! (�Aqr���� +p���66���ON�|�o;��e�DqMrG��/w� +����c�����]S�џ�@Ln�jЈ��%k`8�����T�&� +�t]����;����.����$^ f�ON����Yd�-��;�tw� +����?�o���x�W.���/|e���:5��Y�w]�`���� �1���p���]D��ښ�2������@��Y��F����邅���?lm�K�Qr��� +���������5�3�}��VB&#eT��R.c�5U&���sa��;�;ѲD45�0��I�3(������X������fsr�+R-)Of�˻~�m�07."�e5���m�Zb���GT��� +���n`cbVx��V8v��c|�d�S/a��u�@�C�=b:�� +""�
g�h�Z����,Xb�t��̄sہk�@c�ه���&�恢>�i#�
f���m�a#^�ĸ��ǘYˆK�4S�)�5_�D�M
���#��k7P<:���鿟{x~q�;�|����G�O�:+� ��U8�W�a���W~���&��vba�H�g�Q��fc6�z�-���w��jɪ4�gYuR�m�y
#�ZAq:Mд�U-�d +E�c6m�56�rn(��t�'t��b�i�f�a�R֬]�'��ʲ��(���ܹw~p������{8~�_}�p��o}s/���������e��M{`ɕ�/���<~P_]v*U�u脀���Zww:%K<v�����R�LR���SSCd�����$��Q�m������`�mm�X� +���B�D`�m@��EJ���I�@o�R�s*|}Bӝ�Z6��qE�GI�I�4D%v���>� +�S��9��n7��C{���],>��X|��� $�S{���� �O�z��d +�P��9I�d��N>!��ɢ��O��k\oF +=���j��
@����W}*�-M���C���G�g�X�����%O/�"�����Л���^�P���/㏥��:@����p���\y���J��ڿ��y d�"-|�r�{���Иg�/Jq��|��cUB�7q.y��e�<͡Q�(�� +����=dT�\)���V�s3�Y���@�>�\��/2%���+>�8�k���%+�� +����~j����n��T�+G> ��]�-M�#ҙ�O?�������o�ʿ�����~Ǵ̩ɩ#��� +V����Y��R�1d=�Dm�n{�W��I���7akT�ӧ�>8�Qb��iUj��C��NЏKҪ��]���b '�=�i���G�4
+A�F��<W48i,a���$IwE��nfIʾ3�% +��s�`�K�v�����ΝzY\�a�j�y͋��W��5�>�}�_;a��q�}X��-p��I)@�����,�k���Th������z���{G8X +������e���w+fDf�nT[ߜ}_wqLk���Ã��I9���
�u�J��>f�IJ��1���F1ZB��Nv�GQ��R�S
^ +��t��(g�QT����a�7����o<���I-�G�mjkͫ�1�����֍
���R�\1�0)�C�s�;�`�i^���Jk�PѐY0`pv +\�_��<.�e?�$ +7Z�1M���A�+�Q�W�* +��tx����_���^�SIM�~���� +��r�V�a����B���MK�(�&���i�]�~QKl�+�����|tH�O�%[u*�"�u�#[�{>�O��^PG%6�A���i~�"<7�0��`��0��hϙ�+k��O'��,~zq孕��������3K�]��z��T��� +��q�;���) +@����/�/x������� +�k�2`��|�4��������9�K +���sP��a�'���d�9^�m'�h:���
���;�P���~�.����N���Xā�r���R���桘���<�2cj�u��j�|���ά���GH�ј�/�VU��s����w^x�)����N��6���|�d�.���u�Q/��D���h��4�ݕʓ��K������(�-����l=m���XS
��N����&6恌�#�jO�j�~6����0�嬂L�`�Q��Nl.\^+��n���<Ubc�GV)2���Xx�f����ȫyL�i�������< �����J�=X�����@�9ۛLGa;��'")��qg掃ܱw��?R��nJ'+_��^�G5מ����`��Cc˩�L�!<��:[��:U�M֯n8�+�zզ_��/?��41�#�����"�����<0�?�q���_���o�6���g��lW��Ba�-�#�b�q������șL߃_��Qk����d�}b�_ϫ:�:�0mWpAS�����D2 +��P�6��
mJd��*����2��v�酷�B��;��w +&*��Yߜ�����ɽ��))&zC�<#HE5@v�+b�4&���/(��� +�[(s���S�ea�*I�tr�+A�W3�'2 �����a��?�U +� +Q�a��<�(��#( +�_�|6DX��b�O:���{q�<�
�}�~� +�hDZ#x��g����+p=������cQ�VfY�&�uw�b��=����5�:�^�{��b�(<���/2��ٸw���ث�/�I��,�K������ӛ$��l��I�NF�f�e�R�b�C�Xӑ(� S�9�s�Gb[/�n����B����>��\aԣ��4i�!u����F��)�> 3C��o��s�*��q�OS5wNj� +1������UkW���.>5��N
d�\x���S��N�$��-�f���mʽ2�'RH�|�����y�9����������-g��9x)�ےeU@�����w5�F�!�Vh�>����
|DyJ�mܴˇL.:˶���}9��U�������*�&}�F�C�f%��X���'�^�6�n�����,ۓ�r��o��J{>N,�Y�ɺ\�ΰǧ'Q(Ч�%XY3��#J��# +�V�}����(߳G����V��t� +p�Px���Om�e���L$qA6�i��:( ~�* +���=�u�1�`C(�2Eb2=�8�ӓ���6q�{�b�42�i3"����a�{N�#��g/L��1�J�"�S$�ΰ�
�x�l4PJ�Ȳc�Lo?����~rK�=K1?��¨��]0n���N�Ak�>�I2|ËB�FN�YMg�pv��CI�=v%���f�I�E�=�u�EnF�'��˘�=���kɂ�Mt���, +2`��]^�:�������D��h�v@2�?G5]���~���<a66m/�����
'�}Vׅn4q� kKɫ��X���K���Ur�'� ��Pi����i۷:�ي�;�ӧN��p��j-~j��A}�;��v��T�aP���t�^dܴ���h����pKv ع'J6����<KD�%%�2����)�pp���vv�`�H��3Nk�)�������OS�ؿ,�d +b�0ܧ���$J�W�<��j��V�:#豫Q"�OĀ�������~,���@��DK��� +���S��ϩz����j�<u��2 +W�!�K��ɱUC��Ed�����ql�P��Xb��e���izR��w1�^�)�J�|���.�]'�Y��B��,���z��Q�&�^�dQ����Yf��O���I�( +D +֢�����9�9W���q���g�۷P��v�q5��{���C��㲖��8<7[-��fmoPW�}�;:&��CG��R܊�Pd܇mQ/&����|4�b+�W�_���F��NGtEg�?��<'GH\-a����P�?'�Y"��W��~��|����М�G>�OM�4
��ZV.Ξx�/5����Ttva���,R���!c���C��G�b�7�*4��ZE�F��k�]�Ca�T#+��ǧ`�w"-���DU˯���kRc�����e�>�����[��������G��_[]|j^��+˧O��I}ۗ�uMou��Qsc]o��1iT���Æ��:R���&���#�nlݘ��ol�������Rkb��|��K|�"���?�@ +�V�K�3ܛ�� XI�'Ţ�Ԙg8���Y5I�g5=12<CDg��M�.S@U"д�P�&� +z!T%�����Z}}a_�r�����1ݜ�vXȃ +.����F�����(�j��o�薄�&K��M��Z���U�jBu��C�> +�ٍ�͋$���\|���ҹ�E�qc�Rs�T�F�� |/�MR�K���a��9D��ʕ�?���k��.�V�+�U<�eݸ +�HF^R��f���E!8<�GJ�,�1�W�b |�T�N`e�T.}���ޕ����>~�� +2�y�t�A�{�`�I�;��
+��/���IRLK� +)����8yr��X��)_�z��G��?ydb� �`���k�7@ +�ʰ����}2���{< +� ���+O�9���ac��v?.�_��^:��������̵�v�V��?��| F��'9�q����K�9Q1.^\v(��Y�߲��m{恪u� +�7�d����ly
�?~(�L��`F�h ��S������"]�r�!�*�P +
ב�<9���Խ}��y'���to��N���`�j�Y�� +s�8�}�?��1h 4a�$֢�Xa p��fл�n�l��vO������Y,%%%/�������|?���믭���3W������"<Y���8O�i/�B��13��R�@�D�cl#��K& 4_@��:�h�$�/V������o�x��`n��;�+a�FU0E�5)��� +�����uK풼��9��Ӱ�,�����TTEtt��$H'��r��E����~�7�"FL��rd��/�������>!:9����=�`uq_L��t���<����*
�|��:�&�l�h�J�2M����w>��
/G�Q�q��v)��/+�4��CS4��{K��UkF돹�G@��H5B�x7C��U3�� +n���!0+/�M��� +l=��^�z�����g����w^�x�hM� ݴn�0-�'�W +�KL�υ��Bei�#�,s�Tt@m�R#c��t�n�¾Ӷ�u�iMY=ϯ�*nׇ�,��p��x��M �����c���n��3�5�U�Z�}y�ݲ�9Z`���˯�@k 5e����A�da�}��Ì��c�,�Y܁v��D�B|X��|d�'? +|Jp.�C곊(~�=�<�X�A}����ZA�9�N�M�IH�O��Tg���7���G���B����F��ߺ���a�>K�'�F��>Pl���*P� +Ao���z���:���R�(QpW�v�(k�"���_ +DK�T�C�v3��Ke�ڻ�*�JԘL��da��a +B^��;�t��Y�S�/�x� �xHp~R�@���^�0 +4�}�<�*��?�A��˗��'%9���K�c$BJt�н�2N}8�Y&�c�7,��&@�w��Z}���;��@�Q���s�s�Ytb?�P�81!�5 +>KW�7���L�B������h�7��bpۙ������"���$������)��H1�Iy!�f�@h�d�j(�4 +��#M�:���ċ7�P�w7��x�,�K @G>93��������������ُ%��>#^}[���'�ĴY�{{>q����!���%��%��Ĥ*�Q�V�I�r����)��z���4s��!c�.��),���b|��J�r�=�Lb���[�B@�->�`E9&�`74'���s9%���,2�2���D����O���Fs�6s������}�@ᡕ�o�[�4�d�3P��O|l�I��`�;��z�M�~��A�Dpsq��h�������2#��]�X�C@��{>�d�UG�DZ��\}B:y��Y�~HEƉN>�Ɣ�<}1B�KMF�GR� �iϾB&�Y�����R� +r?�τ���s��8F1�eL:`o�f����C��= +Eܸ'��<�*'s�bP P~pI�u + +(�� +�es\el|&���b!�}�PV��%((]���ƅ�>~� ��(���k��c������{(�"=�ǘS����=!�Ҿ*�]ӹh��t?�����=�������Q��Cf�+�>���k�7ݞY,�Χ�Q�e +�N�0�e_8��q�en�D*Ȣ�]<Hق]�����E5cp Ȋ�Dx}~�VW�v�r��r����ff�G����c��+c�����e*��hw�n�Xˡ�`z1���6YE�`e3E�yN�W +�x�)Ҥ��@(R+�i#�4���Ė't�:��)��O��xuO�1(��\�F�2�m�x +f�O�uh��B@r{)��7�Q��A� +�=�#+�j`��\(��D�Lr����2��T��V?�h}�1L���d�rI�U7���`����[0�!
�݁u�6��FR���ߎ�I�� �F�_`���-z����v"�dh��x��c�P��{�]z�Gr����e���*���-�(�'k��=�N�`��R�a��҆�<��G���ӱp1��
]5�Q�Z1e;=�N� +X�9z8��X�^ BV}R�h�8d�~�j�߲�w.=wA/)^���fo�#��! +E,�L�ILE�ځ��}0�$��{1���(�#��OՃ8���V2��l�� +d�A�u���*��ɒ�1��R2���[)62��AȭE�_����� M�;�᧲�2����&8H����S����\���v��k7�_pZ-��Zz�'���͉�S�ۺ�u�Փs���'?��ײ���K`y�� ��� +��xJ�jk}R�L����Uj��R��م��Ȉ��l��^�����'fW���ÿ����w`�R3�yks��չp��Y��t}�����:[9��w��ܥ���@7�2[h����d�ч!������ڲ�u.����\y;��z.U��.�a
&�8�ۆy��2+��X���Icu�u +�U���X�(h�hG�5��ÀHF��lR��M��Y;Yc`� +R��!�Qf�$Ֆ�8��Ը�w#iLrh�,���3�Y����� +�R���n����峯���F��jIR���, +>�
+���Ą|I����}2�'�(���: +��� �,;����iF�n����]��p'gN� ��=ۡ�=����u9�C=Rơ䎁�� + +�该�����t,�A���V?Y�d,��2�ێr��):��ʮа��d�ʾ*^���U��$
)��|!���t@8���86�y��4�f������y�Jմ[��
�c�S���NJn����zd�@q�HB�t��#rEY�4�ߛd�G�O_d��9�Cm�l�/̏(� +�v�j�y��w�����1��: ��9���O�d��9����3���)|���r��}���� �[���b��s:�Uv���a��z��.�U_Xt�lw�^�����]��?y���f0S_:4�5�b�z�]��S���e���Z������ݼv�io8��ڛx�ΫI���n��ӸH +�0��,���+� ��L���D����\����m�=�l�49Ow>X��V?� +s3�|)O��B�E��>�b�c�>��"�P�[ma���b��ȼ��e;��=�Qx�3g� �a�#s.��_����?�O�����ES]/��0p�~�E� ăn�hj�����h\���t9)�|�=b�Q~��?�����Sbl����J���3�B�
$-l�<nܾ�t������h��O.4�6�������>?u$�24O��x�wރ}��,_��-�X]y�$��n +��!���"�� ��?Oq����+8pdZ�x + 9aX`� P-t +/G�R������{�4A �wb,�S�[P�.ߊ�ǐᒿ�ڪٴ;M�"�Nط��ʸM,���ۑC<14�&� �c9(�jE�Z%� +�U�S�r4��i3��Me��%F1����[b���`�>UA��#� +c��`���*!Դ[/<��7��c��R>6���K�� |�iT +� "-]�rj��T8-���nd#D4?� Jq2�����,�l��8�%�����wQ��K���t��F�}� +� +@M낸��\L�1�B��r�2�'j +ؙ�����-���|��aEV E�^H�>�|-Z�dy)���o�>�K���Q/��~`��GT��Ya���;�>!ki�8�]g��2Շ�2+�n��_��r��ZbZ��T��|�X��v�v + +n��R��ƽs(i��;2�3~\� +�^��)���})a�[��X&ࣰ�2�c7�2)��,��1.�����#gP���Zo�T7����r��DV�Xg vY.ɲ�uYֆ�R9Q�'�DR7��ƠJ�M��\�X��B���e�'��t�}Щ]V�Q���iK�V�V�ӊ����E�E8�!�!�hw�U���#��J�Qa� +�F��A�\� +�nOԀ���q�'��4*&q!]���+�r߅�Tp9I��[�N����� a�I%f��W8�O��3� + +���A`u�[�*�,���\$Q�65��+dT`up�d=�]N�$5�t$�J��C"��I�ԉK�.�H�y@�SO��xi�I��Ҋ b��I�eE�^(�o�L� +Ky��Z�m�d��p��)��C���_o��� +��\�884�/�2S�0���(��7fO��~�0��j������&w�.��r$բ�<��nǗ�4� ��b��C��v������?�����'/ +����b�_ <�H��{� +%����Y��Dv� ݧ��������q��i!U�0D�����J^�9�hYCy��c�u�*�P*z���u��L��� y*���us#l�J�N�'�}���tlA + +��Z��P��&�|�ߐ�%��_�>��"��q7֊�vߌ���d +�,���n����@�� +�@Q&3 +J� +�uD��ڢ4x��q�v�d��[[�5{ +'�;o/�v�s�[��8��i��v�)ͺ�~��gδ��������2<��������r��Qf'Jk\z!��!َ7��ɶ��ƶ�q�]P��eL*Y�5̵x/)���0KWHO��L�KI�X�FS$g�-�y����1ڶ�/�f�:��?�:b�5;va}�==}�h���HR�Z��8�e�����o�|�Q>jN��$���݆����^�]�5������o�ιO=U=w����_��/��������e�d�|��z��7ŧ.�^��g���<�47;��uQ���������O��'�ZU�n;�>�0}�jm5��������}��=���R��1TݨO��שR�}���զ2w����xE�wɠ#�N<�KbG�k.,��=����~�*N�GZ��tp�=FQ\�+�������ǒ�����4�k�P-�n�V��P�$K�|�̾��7���?�xf�@��:>=@Tabp����mW�x����j�0��b4��$�G�e��T7-X��]���?�n���d��^MIw����e���{f�B�o*���%���P'�ao$�iy$U��.A t���Xp+��8;�_����w�w>ޓt�`(����>�=��j@d&�$�p>IH� ot�ș�&6T��r�d�gӸ$��c�=���5� w�_L�3&�H$�#$אd4�J�Q���x��Bh�*��tY�Ѹ�ץ����#�Yl��cC�h~ЮOj@�lm� G�_�M��������@�$�z{��K����Ջ_���HR��x����S{� +ż@#F���3�5!�\�@��r4�QE?n���F�F�YT�3�X��H� +�`��an���e��K0��JF�G�6[��mDiы\��z�8H�d9DV�c(�����Db~��|�9\���j�̧���_y��D��s�^����p���}�滍��\x�̵﮳x��
ur�5-5z�����?�l��H@�svL�n +{C7V�z�v�f���+���Y +�N1}�H2�"��'�����w�q��ғΆV3A�����o���U@
T�>�q���5 +��>�&� +�:|l�f�^X��.7���>Qo3ң�����x�(F[�<d�����f�2L���=n�d���u�,Z�Jb0�<�cL���\�tu�~�e��,�s�ɘ�q��VԜM7�X�#�?��
�b�[Ga���"n� u��%^g{�mG�4����˽�&�t� 5�J��M�q�+ � +���cc�4���4�!@G�q��O����J���߾������ko�\{��"�ׯ�8��U��X�;y�v��1�w������2�וn�ԏa���l�t�BC�a´������%7h-=�������_?u�w�@�Z:5q�A?Yl'f+���<�̫�=�����F�n�z�{g��w�ӓ�ΑB�e[�uk�/F������� +K�oFi�iHE��
{�?�<��7���zT��Y�S��#'20�(L��A
�X��24�/�G!�͜n�j6nS����r*9�Ag?�����S3?����n���q�/K��m�?�,��{6�'�D<^.Ob�$��0�Q^�z>��+��V�� +5�y�?�/�(���V)�g��k����F�*���7_�|��V���r�'Z�-�g��Š�_�p���@���@�.W��r�m��E��"hn��&�3ҸT5{�z��2�a[����j���B@��{��1��m�f�a��}�Y�v��؈
3�vϷ&�Z�Yͦ��slf��s����/�{9:C�����Myoc�b�n�b�w��^x�J����{ +������{���m:����>
�i�YG"� +��ttͩd
�z����Se����+d����g[]Ƿ���!��:@P- �7��-��}*��� +\Ś�4-�u����~{z�J����&�����#� �d;�=u�R ��@��( f� h��: �����a�����n/��m/� ̱���;�fn��ƛ5=������54R +���:T��.^���Z�p �)1��W�h,QQ�5�L�L���B����TM%���Fu��a��6�r�[�HʸQ?���nh3�1#������Z�O+�D��fr���$X�W�u��s� #����"~Y( ��?g�];�H.����6�W�( ++��M����h������ǿ����>���؛�D�?�Aܹ��p������J� +��+pv�A|��Ƽ��v��P +�g�`��+/�;?�����n���ϯ��:�����s��O5���4}�������I*���Z2*����~��٤��%L�#�&�A���u�|�1D8~�R +�v^�3� �/�t*����H-,�TGE�q9�: +��7q�_R�6�� +���s�V�Y)����m��N�7or��uq6�,|d�j�<�� Z� �i��B�� +�Y9��f��ʺ7�63����g/d��'�)�}� +j4���A�;����R(Ck�Ƶ_���Z>����l�%Vw;ę~ʩ� h��٠~J
�Ь1���( ��T�%7n�k��*y37����
Ә=�x�-Ō�fu����}�6���3s� ��[���z��㉨��g�-�X�ъ��ީzL�F�5��T�@�/,V��[ߺ{����*U����ҹ�A�N�U�"������~X���Z��dB�ɏI�Y2�.�0�&!��c�fS5uss��V��>H2q�b[*��hJou���Q�u��^�*R�I���`�)�k�O}yT�� +a�aǾA�㺺�=Q�[( +���ų�2&��������Vd��YOԛ��,+��-�&䠅�[�d=�p`�_�y����ﻪ������7� +L])�H��J/(���#2^ �2èJA-���V��$4�~G��x�*B[�c �*7�[�i�E��yc���Ζ�O� ����P("w�4�?H;8p���2s���X��ջ�a��Z�݄�JV���h�TfBB������cÿ�99��|t�@����kI�����]�>�s�~��O��<i�����w{;�zd�����Ry��� +�$����o���$&"��T3&(��3�,|�:������Ó9�r���1�4�2��[�� w�g�;�w� �<͈�s�#r���uǯ��3��]>`�����d"̇�������u���uS� !L/���� $gȜ���:
��1A�Dǹ� +,ENc֎�山ѱ?hp4A�1H�H�?� +����J*�"�n����%�{� +���f�ΈťI<� ���ߧD����x "N�Q�}@6dܨ~�h\�#I�k1K�B��@�#E>L��7c���`42��..� +,/
��`ҿ"�9t�E�x�cUث*(�M#84=�=���`��.�^y��l�V9>K���9U��Tu�b�(���R{��UKQ��_�v��|}�(��g���ُa�v0�.���Z����ĭ�fD��zh*ɜP�� چ%����.[�)�c�=�4�{� +5X]]�T� ���\��'��q}���4N�)� ���s�. ��P�MWͱ�^2� +0T������2���i��v�BL�ء9�2���k��B!@ƪ~��~�*�Ip��'I=�+�6�l�������� +ܽ�Axw}�y{c�G���]?G� �'�4�Ğ +�=4PF� +R���$�gF�� �sM��Kq��rv$�y�-�C K�$w+�0��D�!Jߍ�S97.ȇ���6�����\� �NA�r��B +AS�����&�Gm�H�l/0�sK|���S��2Y���}��`��&�4CF˯$LU�r]z�EP +9IR�#����E>�\Y��(|��$�Ǟ��~u����f7�X�wX�(NJ(�`�&_K�X߂�H��u���A3ӣ\�b�2�l�a�𗲡q���'�H�=�����6����g���~�&+� +���u�qK� +l,�����~3E#�O�>��P�L�]L#��}ݾ�ܪz��T�6U��DB��/H���o�-+��� $ �!�L�U�B�� �Po��j`����Q��
������i���'�]�����G�ոl < +KP]j�d��jaE����Wb/�'���0�����0��1�_3�5�%��
-Z!��@�XD'@�|���]WG�!��������!���P��
�0�����C���$���WԋuM0���}X�c�D�^����!��8�lv�����I$���_�z�;���_��o�c��;Éǭ����+��Ͽq-�n������?>�����?b<w���Ͽ����0����e: -�j�x5h�����h6
�9OO��!��x��еI5���� +sͪRZE��F"P'R; ~�3��jO�8̃PL��$���� �]� +8��`;9U��C���4ZQ��I�pa��� +�4>���`Bv�� +�#��&aA�=�Þ�(*��^�!�,!�������k��Gy����_�'���?H�s�D�
����|�/|����k<p�z������ї��/g���7�,�����uf��I!F��b5�F�0�YN���{�]/`n��-���Q�����~��ʎ�7eo#��� ~U,�Xͮ�j��\�ʒ�n�mMk�Q�X7�6��:3�\68 � �,�=d�K��,��;�9w�@���\2�L��̜w5�ȑ��G{�nK#��V��Eu�TU��&�U��|d�4�G�T?���{���� +w���o�-8I�B�k#��Ҧ��:�2����UY +��U��۰��|��va�#�1V.�t6�|wC/3IX�2� ?{�����@�G�u��c�D�`��1{��k�s��L�G�ĥ�9�H�$P��>32�t�� ��`����r��S����X��$
��X#*MI���#%v<���������B�A��Pr�E���`�#���g�<6��a=\A�{i� +�>���n?�E���P�\�F"��L+���'������{�d��%0��~����w0��yn�zD���x���f�r0���P?,�����Xy��by$BV�H��p���F +V> +.��3�G +��D�y�� ��Lu��u���s�����l
���+k ����~�� +v��(Cc��*�(��G@+�Q7A`�Ԯ�j�JM�I�l�ұuv78H����D�8�h<�ss�N�K�t�sl�����E�O�4ۍr��CUSg`T��r��g�j��u�k��N�{�X��l��|p�{�0���(��Q���8N��C�a��A��L��*&�����m���W�9����wH�~}��)to��_�v��A|�Ջ�1۵�_y��7������[�p@�,>�
Q7�I�j���b��2B��[~�O���̺~$��0k���B�����l�F�cN+,���7b-��\�O�@�O���y5� M.��'�I� +0���������r�I�#
j -~�2�<�-���e�U�rϴ�;�.J��`Tغc�`%����ڑ�䡼���%i�� ����@I,���@�B��q��Σ�9s%�՟�����$5P������R�n��i���=7B���<A��0P�.�S�Yb���y�c���o� ��Owҟ�'5�+��O��l�x;>�~~e����#��dA�&��[O��ߕ٢�0�ȑ�Q4��#��`�!z�з��ԨQ�A��]�+��q�'(?'��^�O`Q1� +AI��P���$��&���lܽ�ے�5�"T��O�:wm� +��M�fg��$�=��N��ӭ�NRY\O��r�z=�u +�+�W����WVApH��qʪ�Pܟ)�ed_c9Hر�
�L^�bAؐǍ~x��d����O=�/~~w�_�qG�I�~086T��9F�0jG�f���ԃ�{�Tf�W
o`/��M�{�(���C�x�b�U��~ns��4� +�|Ǭ�vGa7jۋr�K7B�X��е��i�tɝ��@LQ�yЕ��0�E��y�*_t�$�'M�0�Gޤn'�-��RD�#U��*e
�tG"'ܭ<��x�Z*G1� L9��4�>w�� �r) $�p8ĺ܂��k�^뱔"8�h=��C����h5�"WM���V��Sjd=�-ݵ���-�8-(���+gm�;T�t��Qa\��r�k���.��*�=�������@4�7Z��Y���������q��a>�V_�IωY0S���G�zC��"�H�2��i�վ�u���z�j��7z�U +� �dU-�W���Z�{zIQ�w7�і��0�㜈�}�:C�JE��zzѐ�� +>��C��q>�YmןDM��?�nn�4$�+�c�dU�VN���d'`7��`g2�<�t]�&������I��z�ژ���)1Ɂ(��iB'cnO�F
��[���fգX����7'=��X����_�����+ɂ��w:݅g����sϣӱ�7�ൿz��38m�ժd�q��dZ���)?�����Hƣ(y�n�?���O����߽�z������2��͇���ސg����t�W�nW +>����a`��({ +�ҼZҼ��j ��Qx�#�:�_��IO����B�{��OM�B�@�*�x�0ES}��5��p; +�6�\~�
���>�b�yf����'��$�%�� -�'�Ll���5�0�t<*�`Pd�������ӧ�?����>m�z�j頒㨤�� +��W�Fɀ7h����oGN�1?�oF^��d��kzb"�2g���m�`B��J��� @�J��e +�f�t�]��o���A`o�T�&� +��6����c�L�,�DQO!�����z����M��� �@ԱL�;�U�������@�I�\w�A�3��V���;��9ya�!��U�q���� $Tu� w�L�욦��T+-_]�����ȇ����2��S<n����z���د�~���>6���;6H�����/��Vk.,LfZ�7���^T���4�J�)ʮi�L��6@��K���%%�`�F'� +�n6hP�7H?i�� �z�b�:+F��v����i�;�Օ+�'e�;�� �� +�a��> ���A4
G�B��b��/�Y���3<���o�����:������Zѫ���+ Tx4�v\���!U-�MIn9��s�J}$�h�qo<���7�7�ݪU���]l�B �k촻� +�Ej.��k�i� "�A��!G�!%�>�?��꽇����=�Mܵl�v!?�NКm�& U�Æ�j1u����NB����-1�������Oe�.�[���z�35��|�4�E���#���������K������v$ӗK���ۥi=D��w�BcJ�� +D�~^�i��el���T* +W��1�l��\a��"��?<Ģ�Ñ�Ye�������A�H-�"�� +�Ap�+�Y����h�<R�Ӈ�`c�0�y~f�6�z�S�L�4����c�P��r���tbJ@�U���7��[i�j�R#���9����;��?P1i�c�?ޔ>�c#���T�-RS���b��t�cH&x�U�������ڛ��:��μy�L�>��<A���`X�Xř�V�W`p;N�(�z���넹�Q�������s���
���jU�����NY��j҈4m���,�)�35&��B����K��-�+I�}l��M�p +����.*YM��S�|Cn= �W2��҉�����)QR���0�k����Xݏx +�!d�Td+8B*]:∣����q�F� +V�ē�c��C!��ಁ�' a�.���S|Ve�� +8>G���DrA���Bk�u@� +��l���P�1�"-NfHqH� �����w�T0�������,,����i���`�<w��V"R�_�R4�_�N@p(�����~8���#s�*��R!��'�>>���|X��AX��9>��g�����
�6=�Î�ʴt0�#�$MJ0buu��E����p��̬� +rI�_��+���
��T n>X��ɗ�#�(��n:QDP�� �)����#UP0�� +%4� �aR*� v.)g�Ze3�c�m�p�� +�;6Ўc6��Qx�V�ބ[��N�QiN��N�F�Z�LU�֊ +A��ȫ���Y-]��ͦ �T�G�r�|�R� ��IK�^ڠܝy���S�b^)Ok�61�/ +ET��7+eBφ�R*yd��@�T��a�_^�\�q�n��c�����$�H2ݗ��N��.�!}��`��8q��Ȫ�"F���n��_Zje��_���{�[߭���bq��o��?���+XPx��1�ƥ~���s]?1��_¢�{�&��������ӻ�.~|>诵>y>JNo2�\?`�Lx�(�s���PHqc�A�^|�QT��ڞ�3�&��0�%��Xİ�=����*#Ϙ�-�h��y~Q/`hZ��<�e��P�'z��<�̃�&��2�rl�D�Z�o��TW�Vy4��f1�/�1=$K� +���G�k���;p�o��|���K���ͦ��F���\s�=iVw6���r-[��VJ}��e?[@��T +��E�E��x[ZB�e��qk8u��Zh�E\g��1#�(�p�����V�2{ +��� �@M +ª�L��ҷQ���{�"b�9�s?��#xp$rI��,��$7�x�<�Ө&>�a>uRh�R�]�X���,X^΄�������?��J&��B�!�yx���}�Fe��Z�炠GNO�qc�6A��p��R11q�ҏ�M��@���� +2�&q��7a{�����,"��L��1w�2�e +���x+8(�e�4�"� ���$���Uֳ��?�j��%���MؚRMp�$8��/�B-S4WA�m�t*pd +)B�3K��OR�,�Ej��ȫ\�GL����k=���j�ètp�%n ���/�f}��&2��������������ş"��@8��}���:��^?'�m2��P2y2�Z��� +,kP +,1s���aޘ��!%&O�� r�j2R�@��e���iFW�a
�$�LB� �?x +���轂��\���GS&����H�(9?��$Kx �����-�xd��� �\(A2�� +q��� (P��:�W9$��HI�
�ҧ�2��Q+�r ''�z-����}��~X\Z}`VW8$��0�\$D�<xs���]vb��@��#��n�i��V�� +X06���-�[��! *��_^kL���Q;@�����pǃ=��i�p +ڰ����`�;��Q�|�ը9[�M�q֊�\ׄ}��h���Jcf�J8�{�jG"�
�� +*[�p3�T�>�ad��\��� ��c�z��5����H��P��1�"�X���$`�>��U_W�x���E�o%ߝ�2�`&qlBȹ���'�Y��`�U)a�Ⱦ��� څl]7��p�7x+�]K34~�?�<�>7�\v�i5\1��~ +~DH�GM�yD5�eݚ1,ba�Ї�L�������G�([���b���k�W�"c���������+��'+y���s����^�����nc��&�Z*��A + +�a�2����w���9��|��vE��E�nۖi8��t������ + +'S�ޘ9� 3pX9��ul;��f����p����8>�~��pgg�l��/R�� +� +�JPX��?���j +D�1�L`+��"�=#�?o�0�Z�!3p��S�*�8�3Q +(F�.�ɠ +�+��BƤ{��Q q��B�w�2 +ܒ�����ö���+��ҟ + + ʹ�-�K�]xwnwI�\L���'P�{q�6�&�p`����-��3�!�#x����̌4/��Y�����o���vuM���Qk�n�:3S�����Z�d'@#��kOT��gܭ~��=����?��g_m�p����y�y�u@v��! ����j����!���u�N��?��E4�2�rm���gM���B&�q�"v����J���Ϊ�:!����C�4 ��.#���Y�EEɁ��qC�1�M�&cŅI����<� +H]�b�w"밮�Ѹ�ia�ݗ�؉D�&�V���=谚E�Уq�_�M�.�1������q�(H��?�� ��e��S�Ę��$�u�#��ԡJp�m6gcC +\�c0�Q�ϴd�?�9Ӑ|�0��J�g��n��D�����[��:�������_����ͯ���Vnw�ݢd�e��=O/�:9�I���M� Z{8�4�820,8 +DZR�sN')�GaZ9��fɾ���G�������/,����#
ܩMW+��q��ˈ���9��>�Px,�8�լ�s�^۲�Ҕ�Af-xT�Y�hX�39�̌�'�0J��עo;�6�^������������N���JŅ���pKa��
�aI������N1Q��K�1l�\�2�a�
��8+�LU���� +*�4�9�u���$�5"t��ҫ�t�I���X�I�k�a�b�u�����{`C���E +7c�jއ����D/?�#+�7�;q���K�����a-�<��� ]q ��R>E�{��ϱ���|�,�fC��V +B?�ԇ{Qh�69�#��WbL�NF+�E^�2%�O��BK$�S�q�^d}��C�?(��κ�$���u$2@�o����� �2�,�O>3'/��\�Z�:i'��֬Y��n~d�\�j�f��]*�*���� +�uĘ�|��XVH؊"���U�QHF7�)��+�:+klWa��pm퀚��:B��Ҟ�Y��L���p;J�Y����ZH�T+I3�ɧZ���.5�7+fe��V_<�˶��/�Y}���Ι��\��م���r�b�ze��v��F��ڢ��������O��qC%�ϝ��=�`���^?y�$��^σ=�ʻˋ/,��7�t����E��ٰ/�r�M%mK� +�}P +����* +���&Xi�leue��E�/S���߹v���sun�17�qgmcn�25`�-�k�i,!A�Âg +
���=�`]�N�T���[n&�h��:! ���D�8N��~�ٲ��G�e2�҄f��
�r�6���o,�U�aJIH^M!|���z��bA'-]��K�c�>�Tޮ'y������C4��P.��)9Y�@�lH +�}a�g]gC5L�("��.��c�X�$r��@�����~����͛k`��K2x��k3F{}O��i�S�k� +�2!� +�3r��'�0�\ӍU\�w0��,w���u�O��Ko~���=w���O4W(Þ���_�D�����l��?��\KP�j�Z��\� 5��l(��$��e�N�� F{3�۠���Ú։ u�˾ +,�ŪP��Y����TA�ɨ�i��D���'�� ��L !� ��nժ��ߓ<8�$�����̈�9,�y�z!�}�-~��l�kcޡ,�8�}NÀb�(���P�6���t��Sa���w�
^��b���v1F�����u
<���EHV��ȴ2pt�?`Ac����`��74�O�y���8m��,H�&�C���Ȉ~>��R���]u_i��?��*� +��j����-��B�n��A��^�n��:*�(�i�{����c�K���3����.����YD4"�>8��Dㄖa<mZl{�N%�
%�^�ڷ��ƥ7�w���|ɜ���^���U�QV�����^=� +S��ڛ.V�$r +���L���n��=���1:��Z�H� +ܝQ*!G�T���}�foNj��<�E��3�Vc�v`(�8]������RI?4mVs�(�Uз%%������<\G�Ƙlύ��"�+���T!'�].�ӗpR�jE���OU��]י���*q�Q���J�UU��H��u�E���+�N\�0����!�SUr�uU��Kŭ��-�����6�jn��):5(\ń�Tê�@V���?��J6#�(��{ЫU+��?�~����������:�rU�MS��:���c����+���$0y��!�qL,�T_#�ڍ�j����;��Ӑ7��0��C�������[��P�)V�n��XJd�]*��o�T��P�]o���ݙ#&&4U�~#�-)�R$ +֕DF�gz�| +$S�7l� +*j� �zt���+���ňu^L�efeZ
�(�2:L�߱���?mT����Q�����:{��aal��'��dc����
K�����w>��5�A� B�E��6g/<���8���
ԃ,��#5���S��RS�i�� +Hp�g(
"y'7s��7m2�H8�����)2 +�6��sH)�8Jj'�!�����Q������� 6�ʝ +\����2�C�iP�s<����'�Iڌ�*3=y�sL«|h�hsv6������s�a�'�:�Iʦ)r2>��&^��'������1�i%�h��+5����֥��W�����ҵ)m�����?-�}�ɢ��c92d�ʂ�4$?���&��V��e�>�6�F��S��p�K��i�Z^Y9���Ndv���1�f���x��ۛ!���Q +{E��1a�^W]+��am�gZ�*�M� +�q��L,�9K~s�f�7�� +������T"[�?x +�lP�G�hL�}��l��瓔n�)�x��_� +�R�]�Nؠ��(��!A� +s�~�n� +�+�n�N;g��G����Q"\��Q�=�Tb�����@��^�Q�t� +��#z�To�VB�%��7;�����S�w�MN�ű��q��UQ�"|�B���m���.��+�<���Ї%Kx�J�H!�x�d�&��c�1ar'س�WT�j�*�玱;]a��0 +sh�{~��`*y�����!�U9�D������g\��?DcL�����\`>�M� lT��@��R�����x\*楻C��*��A��r��:���%���v�f6ZA�\fJiZq\糟����W���?}�������o�J�W?��5��� V��V�\*��1<7�Ύy>VB�uFU�B�A�+b�k��zج�M����ߦ�
R�4�sI,� 0_7��8C�^��I4l(�d�MA��CP�6��}�녒煺n�yըU'ٴ1&@0�6"�&�'H�dm���W���ʫR�?�#����̿��MR +耹8��bl����L�;��!�%��
"�����ۻ?�_�����]�\�CL��ܤ@m�d]/�V�^x� t�t@l�G((՚!(A��4�4E
����kO� +�G���2unXc��0�8cr3>����
N +$�ZG,�:LT71�G��� Jd��V��4�aDJ:m)���d�@��|��jL�el�L-z�9� ��|[RDK�zn ���{��� CK��)jG]uF�
��r*�ӭR1VW�A`Wi�i�n�<"�㏞ˈp�����^�$��[ɒ$,�ɍh�$��t�[��M�+G�)�e��U +�L�u5gJ��l)�ɞm�;WLp +��;Z�Ƭ��)� �i0����a�O����
���n�ӧU�ᕳ/��~�b�H��~�k������x��)���$�kp�Z�xK���da�ЗOO�Bwݵ�F�G0�� A��'e��0JRܨ�M3(X��A!��X&C�����T� +X���6@�k庖�1E�}g������G��o����|� +z���%�a}V��#87oo���{�|�5�h#��CB 7��`Ǔ��t,�7�2z�|8߹�D��
�{}V +Y� +�R[��,#�J����GQ.^�:@��0g[��+�'���Š����=s�}��K�8��1�ʢ� +@���`���`�Ť�>�л�(������?Bo�$��=.@"����|�4�m~����3�Z��}��J8��4�/7�
���Gko7�9%!���>^��y�U��j�RZ��r���O�W���x��<,���I��^��.rX�Hiu+f�����w7@� +��L����������_�!��R(��_�3��S���H/?9s�Qe�]?�͂Ԁ@3����xq3,�~��78ޔ��.��4���3��$��s�4A�G��C�2ˉ��p�"K�@�JuY��t�E],9N`֞z��,���f�Pt��v�����o~w��/���������f�ᚗ�[h�om���u1�n��f�� +̔�{k+���@SEQ.e>�O������^�b����k^�
�@ �Qs酫g>u��q�h��ꯧ�G�!�͍��/� +�� �g��o��nm�W���p��-?�2U36o�35=��l���3>�CPɣv�h[+���y��-&Љ{!x�p��r=�gr�#lg
ר�ھE�n�Dܾ�|�_�����SA��m�;Q0Z��,�[9��U�b6�ְ�>w��Bu�Q�j��@�n��pR"���^AH�( +��6�&�a���Μ���{�MF��C�D��&4�����X(�dB!�8 +���/��>8U0 K�Ҵ������s�E$�O#�<Lo7�@@E/88��顢�L�����rr֞jd�K�?�r�o�\��.T � +f8��G�)C^�!q�` �h +�b����ϝ�.����T�f���((p�`?�=u{֪��F�WĢ�wg&Z@��I�$�&����I�d
�E�� l�o�Ϝ�G��Ȉ2 +)xL. +"�3Wx�����C
��v�7g����K�^�[@��r�� \��o���R�ʪq�6Z�{���+_�4h����̜�Y�j;�-�T���E���=��u`ə��y�|�E�:;�}a�J�j��0_�2��a�-��[�O�y�q�|Ǩ/W�+{۷�P0>1����]����v�p�^<c��g���� j�Mv���*耵����7o�� +AA��*Ҏ�Rtv��:##0)6�'����g��c�G�ݴ� + j`F#M�x�����i�a��4i��v\p4�n�������k�����?�KE�{@��:3��j|GK��>�l�@{�>���Kzg��?���� ڔ��`�\_T�� ����>���B�j�:��CP�@��2VȬ��Y����17���s�M +ļ�'�@!y�u��!31�g�=Q +(G �.��A���1'#�UXڰ��gmP +��QAk^��jt���.�>w3�c�l���� +����noQ +5.��J���5ưK��@��M�ҤaU��n +��o�@�h�����9��!%�P�+�A�/ +�����Q��A�= +d`�%�&ac�xBRp���5 +xs�#b�a���/�ʹ��İP�9��G�~��ԓ�0�-S� "v�},(V�W������?G���Jh�G�2���)���cq(�a��>!+@"��f1ؠ�D՜n3�����J�*E�Q��T�0�6wi*bn~.m��$s@Qg1Qp�<b<)P��7[t�k��ا˛?ي�Bu�%�yg����_|�ј�u�!���E�[MG7�� +cq�6fxH�� r_F +��8, 6B�������PF W��e�r̕(e5T�G�em�aT�B~�PS䃫H��W�O��R���� �q�Z̔rQ )�G�dž{��a � +�AFC��c�z(�� +��y���t�T����^~����q +ބ���}�/ceY�s�@�h��D +�����E��UC7�eŴK�W'��0��2A?I�<Dr�<9���gH�bq���L���B��iJ��XZ��)����e��l�j��>��b�
�T�5&�n�{����]���~��`}D!&�~�S. Hk�4��N]cg{���ը����3�*f�ռ]&��n/�N�l�R-��z����\���<�ރmV +fJ���Q���hEq<N�� �J*35Mש�?���h�7��}�s.'Ma�{r��n�ir� O��g���zY��0�����ju��mMxq�*F�Ϫ�,ƚ���"{*��F�8]�|�^�ސQ�L��7U-���4�%��̧0�`��j~p�!.�X{���E��?ܑ��}�47n�0[���lU�[� +�������'���u�͢<�"0 s��kƅO +߳NɲI n@��V���M�����W�6_{�+�u�E�"�8�^��䥎�������q�%y��U�>u�|<�KKP�����"�?8���El�X�1�Wd�`�3��S6�N�Yx��:Vm�������ׅ��ͷn٧
���:���#vM�'m��#5vY�?8[� +r61��%����2,��|��o���Ź�qv����/�����c�3`jf����J� ��7Q���ʒC�d&)d���,�[���~ jKߍ*�� +��B�BH�">�9��-�Va�����?a)c�F�$� +�# +&&���H��Y?�|��Nrnjiv{c�4������"|<3��Z�Fe'X[��E����1�+�9T4�Be�z�f{X�ק� M'"6%1`ڙf�k���э0 8l��q�/>�
^է�K/_��oP��\Q����D���{^� IFR�1U"d��F<�+�y +.��������Z}�����E�$�6fE ܠ�8eL��<LJ�j`T�Z��s@i/Mײ>����&O�Hx� ��@�ƎT`���w�lC�{k�IT$^c��IJt#�D�}��Q�Vz�:7�|/��ԣ[�2�C8����";p� �@��p
�22m����lq���[��^��s-�n� I��"8D�����B�G|nhj�G�!�%R�":n�� +0�Aϑ�=�X��P�8�""GūM�6�I�,ôey6^Q���<�����i�P��9$;�j�[?k3�{�~�2�#�3M9sƼs�XX{�v�n���}�����ӧ��]�Pr��|Y��K��@Zt�=��ۥ�57�sY0(��x�����n{���P�/U*�*�� +�d�ϐ�/�D*�PE1* ��rüe�˔�RƋ~��F��
K�h�|�P>����$��
/V�j�[7!��`�0�N�Q1�V� ���ꃸ��9饩k_�����}/AB|��K����H6)T�{�����.Q�!�F,.��a��NG�^ +D��Mr���!I�T��C/
�)� 8��1�9 2�gӋ�HPժ���1Z�.�gV� �P5Z� � ���� �fDrح�����㉮�&)�^/�l9�(�8L�\ +g[��j|��ޮL��19�$O���n\��|_����, �X��OW�G)��u�p�=�2�O�S����4�4��]�!���ʵ��n���G{EA�����ײNZR��p��u��,E-/,x��6@lR�8���z�ս��7w�l���������?~��K��Hz�g[84�
�.�����Z?�Y��xxW'�em���@%�yeRS��qo�j�-:X3�����m�3�U��۫�T̒�%pt}Ǫ�ԡ�p��븛FI��w�گ]u����c���I1�� 'h�0DBsʶ�(���a����3Dt,&��hX�����Ȓa�Ĝt�빴���;rܓ�~���h��@.�Z8;{�N���[L��t0ǝ`���Qtt��ݼ���"{̕ϯ��`����QW�<�8���[��.��m�!���3��o�k��V�L�( ��6&��vD92�n���sD7?hYv��E�Z�X?�Y��T\�r��F��8�J�����> 2�c�s��N�&.�þ��:;'��Rd +pj +�>b`>���#�J���� ��Ea#�҇)�y�FK�Ox�@|���o}��o���_�b�劜��2� ��S���,J���'9�m�ViS3��p���-}�w�����+g�G�a?�A�D��=����ޑ�r3���l�GX��Me_r��> ��s�ƅ#0�V]V�7�]mP�U��6�.��5�:�۩�I�Ԙ��7N�'4��c�i�n��E��f�|c������60�u�?Ii����GD�ҋ��b���|� +�A��.H���?�)�RMM���#)�Z]�
� + +z��ݢ"���Ƈ�M� +�]����O�Ưk�C�Iy����U��ޑ%l�EE5��}Y�:�n��.�Ɯ���W?��������;'�;?z���;_��>� {��� +(�!�� +��9 +�0����<�x�������nVY��Qk�:��uB�54����h�9Y�� 8p�x�v��
�Ӻ~5�I��t뇛�sx�[o�]~y����Vk�SKp�RkV�Cl"䘪����eV
�oT/b\g
��1���%w�[�T�)!Q�TQ/�@��ֵ�eGF�;���#�1���p�0]��0G��7����l����^t���@f��:�8Ȣ�Y�_`-�j<A_�� +��;���4�&u]F%�0������MS�9���#q������<�.��^5�7o���uV�kW��Y����?Dÿvzf��+�kUӸ}��u=���}|b��Q�0�@᠂7������Bo��81���od@�i�װZ)�����W�l�� � +<�A\*�:A����R^a"+�&� +S�g��`���6�Z���^��:b�?;NR�MC�3��t�}��$1'0q����Ŏ~�i ��}�a"#جFE3Y�-FU=# 0��ަ!P� ��tw���������p�MXJ�A���5�����CXH���>��/Ծ�|�>?w�sW~p���I�Z��ێQMS���P�/�J2��zW������ݭ3g����'��>��S���+��V�u;~�ӵf���t�ij���xsc�B�b�6g�������Ɋ.t��_1����27Y'*�#_/����q{�T�s�g�L�z�+F����"���.ҩvF/��a���E"�eMQJ +�c�R]����F��a��^^�m�n?��<:���o\�z�?�}\�a�wU�fL��� z�sh|� Ԩ�#Z F8cLWỔ��2�>�Ð��a~{��� `�EE#l��� �N +��H�GI�J3%�V-y'^81A=&�q�)H�rI�_�T�>FE +�u�l�6���f�4��4�
'H*��ֽ���i�t
Ȣ��PJ�n?ݰ*ҋ��{TZ�0���4�P
<�����f)u���`�H'�K��y�+H������c��sz �� U>��Dan� ��ٙH�.�~!-�JC�|�'P`ߖ�yw�D�~߹��p*���-�`�"eF�s�P +��ߏ�Xe����v��Q4��6*���eP +�D�IQ�K�2�:��E@E��\O/㵦�T�����rNp��A#tRʄ�wa�g�ȁ��Aȅ� ����>�YFu�ݷ������H5�H�M
SS�0nՠ���s��� +c��ە 'P�qiP�o�u
S�� +mRյ\)��t���E¸GC@,��`���������"R +P +�H�ma��q��qv{w?@����V�������2�� " �>���*��tPKiM�O��S:I�e�I4
[ϕ^���`�%Z�ك���͜*/^jTO�Y��O���p\y~i�
�D�������u���U��mm�4+�5��®Z,3D>��A��[(��]�$wn����)U)��g�0��T +��c潕�ʪ�8N�4|8�l�HD(�}x'H���kc����a�~X0�K�>6�A�kzA�(D9�Jٹ��%�/K���}�1�����嬜nd8$Ν�cB��Xl5��O�"� +;L8.� E�b8�<Q��I!��8�x�����P@wV3? +��]Y�Z���l+jq�ݪL���a������w��~����n�E(�Y��ۖ>\ai�[� +ł�e�3�,/�R�V�^*(0�V�r°(� � +$ +#L�UX䎄�# ~]��KB?��Fs +vXHlA�%#� +bZa����P2�]��l7�V��9�s<@�A=����/^��|vx�ʋ+ �q�� ��NY&-��\۳}��w�ns�,%�]���:{.��>ݸ����t���;�f@d~`�e�{h�"�6A�P����4�"�=��'{Vyk,��q�$~���>��/L��O����8J�3�����wX�]H��V۩������
��A]@
��pm�+�V'�q�yz�π���`\A�����!�kE�a��~L <"���aR*�3�(�+%�b�1� +�˴�Rt؏Ctv �3�aFs��q��b�!aR�'m����@d�V���Đ<X�L$�:9F�O��A���U�B��P�9 +:p�g,Dw��pq�f�ӥb���0~���n���?�T�B�ß��ö +��������y��� ���M������� �}QdP<���oO���h���{��3?=�axp(��b�q�i��9�?�c��H� +zJ��/�=�X�����qP� p��d���)�6��Jy��`8i$j�]���ݰ���D��ΕA��[�U���ި�E���٭�`8��u�� �9r��<'����S3��<<��s�>g�=m�����\����������@�nQtN(�W +`�����{����~���W89�{��(,Ԃ�yfp�߮ZE���/�`��d5�X�e2�J��9-�I��{�o���{ ��V6�`��1e�D@QW +NX+�)��Ju)x�iL����tiY��K~+bX���������4�\a����Khq��D9^_�M�x?a�ӑ�E嚺�N_�ł9��[P����cѓ��lc۟7MU���8�S���g�`Ȼ{Ryt�g��� +����P{ +��z +�@Փ��u���c�ʾI
��_GNK6�A
�o`p��=�C0�[�E�^k������+���1v�����O��U#�CC�n�e�= +�S�ݨJ0@�LVPa��y�Xl�%Ԑ�S�lXӦ�u��6' +e
bUյ����n�x'�@�Ix"` +�S\1�i�4���V�(���*�~��أ�%ê֞i�Ms@����NZ�{�^A_��F�GAOE>wg�5_?���w:�~�4�o�<]�}�P��F��O����_r�����!w��v|�ggq�F���(j\���A�����K�]������k��y�LT?S�{�8 ��4�2���@�n������� �`[dQ�C: ���|��༅��xB��Gv�235�urä�@@H��ϪdL]���Qe �X^�D�B=�1Y7 +5��!v�k���c���#\"֖a>@v���C��vlo9� +�o���x����6��s��(��*2����5k��%8Mq,���SV��Y��d`2~?��$Q��-�D!F� ���� +�f���� +����p�����H��%�V{>�,Lƈ��o\J�Uj7��0�r�HI@�um�8�w�n���W�}SA�5��>���&��C���S��8ҐDPLz$:��$��j�ᑃ�K�W���{�@iA�]�
��!(r,f�J��(L�C��D���u#X�p�R~�P2j.3���hR�\9��\f +��>�0�m��b�=}����}���_�L����\��������WZ���'�ٗ���
Vt�.�']����V+E��1���拿�&K��z��f�,x|a����#cH;ȭi���r��ޏd��<���L�Ü0��W�)f:9�4�n�]�`����wyyɴ�v�B�mof��p_��Gp,@������:� + +�Vg�-�Q�U��1ͧ�9�+��< +��{`y����j���a�I�ګ�H�u��:�<��7��M�: pl��5����#�A�e��)�q��;;=�d]�.H��S��M�� +�k��|�^�)q�m�d�C��5߾!1� ��3KK�>��������G ��I.#�_������;��Ο|��+�}����]��b{�,�&�u�C����F&��hO��Sĉ7�0��R2�� +�1��dH@u{�]�
�=1��%���:�N=���N�d����=*��\�\)���m��b=8�Ί��4�z�̜�}NOaQE� 0u2>P��LF�C��ᤫ��:�o|����>�#9�niE=��ؖ���+���Mx4�����ucR��n�OCi�Q�v<7���j8�7&�zl�8�-bep\�)͠3s5���ṳ��T��?U��^yq�~�\��Q +��������������w�����[7�
+Wh|��n����1|W��~�"D���/��cLQq�抢|����}�֝G�C��sf��F�,����X"n�}���4��+���ɂm�I�)E�h3j�0�=Ct0L+�\�
��6y�����li��ϔ����a^T,�N�s�����5?<�t{��U�Y��#���Hڹ7n���K� +@ ���UEټ�v�i�D����8���I����ɫK/`;���]�s^�A��Gt�a�)M#9��%����0:Q)c����$�b��t
&��9)A
,.ΉO�*�����@+�X�5�B��8�A݊���r&����q=Cv�(Xղ���o��8f�Oܞ�7���q�"�^�@ +���F��-u�&��mˬ�1m�����77@
�[l��.�8�G����Xn?b��� ����#���X�˓6{x'�����h�הR� �U�檫� B:)L���i��k��y0 �|
��@5�k�e|���"�Q��ө�]�Y��ۮ"�3�s[[�{[ۺR�j�39��l�nm��bY���+�]�&3Ϧ!��q��=c#gFV}��D���1)���w\����P*���eX�o�P0�>V�LqUz�Oٳ�zv�f2L#Y�[ +H��"����M�N��X�Q�� +�t쇩"��I{Z��$� +L�|~yn���U�J��E��?�F���zԠ +v9��]Ą Յ +&!�i�U����S`�\��G��߹���dH�3l��[(�����< +�y�k�3�N�G�#H�����C��Ft��j�d)���J�:�1�d</z�D��A�]�b�x��`�# +�@ϵ�D &� + +8�d�_�d����`����,k�?M
����/ai +�+���0^30J:���Ĕ��v�l��'�`�J�Q=^����zԋ8�C�!d�QA��,$0�#�$��6�իYǀT�yur��;�ܜ�k�U�������Z��Z�Fi��W�� + �]�,��B���K�\r��������nG�K�;耵���?H��:_���A�_���?�_�kA@�����
��; �A���4(����>16F�OV���8Ԣ8���/��G�ۤ�E�3�|A���I +XTqf��h�A8ҵ��O_#���abhd0��{~�y����jD���(��O� �%
̋�@A~���&x��f����a��՞[�#�h������+/�����9B\���o���U +�������^㷝���0�S���P`\��~�v��p�m�ֽ��W���m�j}���w�>���&)�A5� ��Λ�DS +L�ȥ;~Їg8*$��aǓ:Eu{�/go�u� >vu�X�b�4��)��3��H#�9�2�X��Il�N����Y�p� @��H`��E���%6֛ݽ�ƛ]{����D�#y��b$Q�8�Qk(���dO��XŪ�����.�#opO�R
�ݬ~���������{d�%�J�
�9 ��Jיu�����:�$0`c��4����h:XfN�ݡiV;�Q���
�_?B����BQӡlT�P��$��U�Q���UǪVULo�i��͂Y`��#�C��n\��oo�L�1 p��(�Q4�β��6 �މ��G/��Z�}�t,�>i8 +��j�f�Z6e��Q'���GDRF��lyUG B�3���ō[���am��� �(96�F.�#���@�;�;H)��{��Ґ���z����)�`;��J ��ƺ1|���<�A����1�sl^8�h����x?)VD� $�e�B8b�;�@dK_pɉs�R?s�i�^�3,��}��_���Ѭgȫ�f�o>s�I�&j���:�5�Ie�yn��E`�w6���{yz�����\E6�Z�����~GV��Hd��&�aց�i�Kٓ9w�);�����4?��X��A�1 +u}ʨ���(���SCv�!�� �,0x�D��]E(S0!B!�\��Z2��p/��7�l�?��1���v�DZ +�A_|q���G���@�o����v� +6!�=y���AT�K/����J���şφ�@��u��K�|�|��R�z��W�[�>�Ce�N���-w�@�5"T�N��]7�vӃ��k�7=�yA>jV�^/�$0x�{�sL�pA�z +��(J�[i���cO\�G�����yc�� +��(��A_uZ8g�&��F���`��k@
��d:H%��ך�{L + +: �en���������/�O6@
`����^�3�C(�7�y`����q�8��/�*?���!�1d1�$'�#����a;0Q�Ŝ�� +��D��iUk%��g����n���4@
�U��#�j�{w��;+�@����}Y Zꔮf�0�_�/X.{.z��Q9� +gk�t3x��@��1����)��gA���Q�mGX.9YR'T�* +mi���5��RE��)-P����a���
�� R@��EKKg������q��� J���b���g��u���zY���W��u4�K�fl��S� p;�h0n�J}p��Ҩ��2e?��<���-���$d&�vož.������D�d�oRg��Sz#������_=���L;۷�����QH��(�q�!̯�(��M���MZ�SH�r��2����(��|�`l馂�4i�V��U.)�v���Z�̈"�T���N�E�0��!�x����h�^�gӹ����~������ƭF1�x@E����oȞ1U��$H��{���"�HS�^�A�+Ő�氯�;n��֥�-����x�;n��s6H���#g�R��1�/�'K�-L��&}�(�����Q�nw4?k4����yQ����p'�ͦ�CfyxR��������돍ЈL�>��X�@@i0�RL`+[)��d5�b��v���@P��I�8=�/�\� z�tR�ʍ�3��U_f�MX-C��4�MAXM�(�]��C4� �5nD����Fq�|#A�s��6��7#.�iL�Z9v�N��9�-Z�5����:��}�O>wn{�}�S���q[�JC-U~����%aU%2 +��i��F� U
��EHv%�S����>���<P�S�D�E~R�4g�`" ��6H�&ء�/���"17!X�i:dUQ&��tT2�-'�^x;�@��:qS������\�����u}L0D�3= �+x +��W�ML �� �*#����]P<C��` �9U�#��B��ƌ���q/��X!��/,?����n�.K�^|��T�{�u�#�����v��ΞF!^;���Ĵ�|�c�C�������Ih�w�o6��1]I�E��{��s?x���:[�rz�]�*�AV��/ص�J��w���l�
Ӊ ؕ��N7�=��5�L�m[�iu�$ 6�Ӧ����h�L���~[5
DJ��2g,��&e�P�B�a�ʚ.Q��v�p�pj�0��qR�ƞEm����3�S�w�Rַ߸�.��Ø�oi�}�]��W����31���P���=8͊2;�N�����#{4�������}�[�l�,ĔIgQ�����g��+��Ч@��>Cu婪|�lmy�n��z�4z��I�F�NcdOf�,A���yH$��^�u�@��G���p~��O��2��b(#7V@
��BdP�벙p�&\xX-`��6�[���X)��֩V���p���i6��~�ପI�P��Y��}4��fS�b��n=0�chUN�zd�mD(e���`Ȁ3�Q����H�V���]n`A�O5$�7;�ac��h���&�����0�g�̊�5������8��lk`ckU�%6��As�������N�Jw^�NLF�*����As�Q˨\��|�����=7�R%�S�D?:�9� 5����˹�-DY�U��t��Tϗ���5�<���J��+��֕o�iqI\}a<W{��;m����\��P�n�t_n�}OçgDp!�q����e�����O���F�0�%M�L��\2�'^(�3Y��ت��sб�a�y��=[�+��$� 9&`�r�H٢0ioz�wO�5m�F��a��j�Rh���8��sMc�o�)���LC�]G/a]�������N�B��'�EG��C��Wh�~Az~�/�'pV����W�}�(R&�٪ӥ�"��⾖�Ɉp��(�G�i�=,����08��J�-[�= +ӿ�$��KP�: EہH��0.�܇�Հn9 �� ț�9���"�8�D�R�g� +&p&����� +��A�Y���9E����S6F��!�A'g�1-�� Py���?���|� ��1X���Đ�� +'`,-����9�m�G�:���F�t\�ZvX�=Ԏ�Xp�5H�x?(m� P�QXbGǑ�_���9,�ߘ�+�C����3\p�ʈ�-�#��a-��B�侷��! �* ����>0�Y�W�g�pvf���0M���M<� +��ڮ �zCϬE��ղ��j +���TIT0��L��h�2�_ �7)9���~ +%��w(�QX����D�072#��2 +���1s�R]Y������o��F�~�<�gn������X��&�%�ҟ����r�� +h���F�����1�g�X"깁�&j��͐���8X0瓺5���ZBh��vLD�o!� ��\����5C�WX���h��T�����r*�7"d��T��&R��1���V���g��!W +���)|K�<�����r?�xm�C
���!�Ӌ���C�s���EH��=��e�6OI02���LW8�L�Z_SR�!,����*B��r1 +��`!��j9[��<��,�W�2(+�,ȣL�~Ov��0Mkk{�Z�q'qu����1�p�wZ�i�� +�z�#%M� +r:�[��1\-%AhBHf�O��g�ĥ�h�.�f�⁏o�96c�)òfPKJ�Ռ�ȅ'JF��=K:*�2�� +a\��H�������g�����{����������?��ٹC/�7)�6گ��_o�ό'�
#ł�_��w3������e �Cn"�����k:��"ɖ��+��8ĺ���g��A��#>��@t��
�]��&�G5�%��]�Y��%U�w�(sZ��K +�R|�� +tw;�nǼ=�C�l��,Z@�k��.a �S3Y��@�f�@���W�sl�f�r̴�!Eџ�uZ4�~p���ӆ=]nc1]ƈ�� +����!��g +� �W�>~ +��)Vmy�sÿ�DЛ>�����f��Bgc8�c"�b�0E8?�� +�"�8�m�����K��P)ǥ�[Q��n�!��{e�[���H5>B}��e�P� +]��tY����̡~��q%ۄ;�^�cz�,,���6;�Ѻ����ۭ���9��Sl1Ǽw[�5/��#Q?<�.t����qv�#���D�pX��y���S?dzW�=���ډ;ov���F�0)�癶
g8�[�������}�����=cBhG�Bb��Q`g�G�P�`��&� ��vc\;\�x��BgGm-[Ok��df
4'EV����� +8�yC
E����+�r<�nJcܘ�=F��)i�A\���t��VDZ��o<�����̘�n���w,���f�d@E��([����P���v�^�A��v�6;(JN4���>bO�8�x��~������?ow�ZyY�v�����sY!�>��� 냕C5Di +�>�>�U>?�2ז�H��8�@96,�E�
dhE>��K����?�ﴭ�:s�� +v`��"d�xB� �lĀW���Ű��I!�a#5�8�);[��$.�@�n���E�@���0�d;�A��^ ��������8:lv��uq<�����!8���o`�1���k�"���ʌO+y:K7[_����g
��մ�����u��s�,����bB����&?E�EjHFġ�K�����aWQV@S<���$q� + g�_U�8�����e��E�á�s��5+��0K;���r��ȁ]���02=�?,7��).����.C3+CEA�0��Q4�=����x�!���05D��Q�(SUY�ˆ�m~�!�4VAt�n)#�/<y���ϙ��8�M��*@L#�0��d��K��ųW��~�3_��g�_ q~��6�bEEv�h?�7�r~D�hVV��a�� +2��ΆH����$'�Q�`!��6a=�%,^&�<���0E�mC�lt:;m~�h��p���h�^��!�s�U�����$"h�@$��dM+~�f���u�k^�v<�L�+@U��燑�%���my�*���_�^Nc��p��'���P���Ѝ�\%����C^�$���w\瘃6�0���:�Q�pޫGi�O���,�P'q'�R!�O �Þ�0��^�5��죉��0��P(NSeR�vv��}����Z����z��3cC�����SO~����W�7W��m�uJqy=/�C<�B)pJR�G�T���+\���({�
�W �4֤d�ѧ����A:�U�F8����(����1椖�`+�J����5����a�ٳʅGQ�F��:�G�9��z�ͫ�@.^w'�&����ÀJy}YYKy�(��~��`��2�LKҔ,������~Jg��6�-D`�֖Eo�e�4������E،�=Վ�S�LU�W-�"����u�z�����j���p>#J�
@��>���sV�����.L�p�8��x}_�g��f��X��c���_J����PpLiveS!6a�]<�T�JiaA�3/�B6�� +pЋ�<'� �Z��lﴭ��t[/<{�q�ˏ��I�?J�,Yؕ��r�����>���/+ ��QA0�G_�D�����N=̬?�jէ�߅ӧ�YG|O��?�z0�0L��������{I������仰���ws�bթT���e�X�]b}��y��:{�!(�^o\���H0$婬k$��y�%p�k\Q +�� ���x�5��x�� +���hl�r +�Dۡ8A���+�|m�:&C䌗kh�;`,�=�_��[��`�h��ɅG{�, :��~�����DZ�,������Q|�4���m�������/���aQbj���ʱJmi���q��ř�wސ��E��՜�?���A�7$*��0�3u��S�h6gL�(���A/��(W +����/�&����������LjS�V�B��E�u]W¨�Ǎ��A`�*�0F7�6H�2ì�(��B4�49i�B9"��s��d߀`�0���鳇#Z�����r�����b�:� +�ՠ��ҟ��EgN�����b���՝x����_���}���#B���B�L�T�]{�������;������E�P +@V)P��(p^s�ʱ� �@����h��h��e�i ��Y���B���j(Hd�h����4�~(���7vA��p4)�M�-��9^2[��v��C��ފ���@�i�[�(�V6(��(Bc�A�D)�h�9�{ +��'�|�����/� +�,w��e�:7��ja�[�_�r���U�C���9������ų.���G������W0���#_.B��]{����?�ҟ|�K[�M쁡��t���Ɖ5c�:+M�@�X!}�c�1��<}����V獍ƃ��2�C��%�A��k�鉁���\(��E�C1���W&Jz��δ�v�AG��
�RN�����e0$Xf)�< +cr� +&d�e�ִ>z�������~�_\X�zbB�$�ON�qg&����CF��УH����þ��m��ll�j�J��L�35m*T���,�ޖ�Ӭ����#%��4
�Cp��¼�i��|����?����+1P.��<��C���˗/>���N���ڵ�[k��\T6��^,aE����cjYc��tD�fe���+�����y��DL=��z�a&klXb+°�E*�RFK��x��D�}��`Q�Y�GV��ad�B5��<_=���#L*x���H��OM��Fi��0�*ݭ����c� +Tnq<."2\�D�����:`�P��eZj���֛0���Ǹ{�徢����u�,����7�� ���un��jtw�;;��ibq�����o�iOK�8 +h�E�Z���ۆ� +֒O�RC-�Hm~� ��Q��i�yY�r$U`���z�F������!���4Lv8��r��E�.;�C������^w�Xb�LlE�j�� �QמZ +H�ڢ,���\[]�<v��r���u�l��Y�?��a��ч���>ę5��$��h1�[��4��v���G���C|�}�r���@�M\�{�� +�ߡ`Hs�bNZ����'?A$i��> �,�̔`1�p���$y��г�m�_ +��fF�Н:Ƌ�A�A�F��wnݰ�H�OY�Aa�Z���w�]�Ի��>8�v�IM��$��=��l������.c�N�t��&��U�������T������������7�MzIj�V��3�nx]JG�b4T2��nd�5�6&{�N{�̻/�)��]Z�{U���t� w�>ݪ֗�ݦ`�ݡ�L �����;<+&��(:Iv��%-!�\B�(2����+�v����iS���T_�l +�l������f7TO��TK�G���6�dbLf:3*v�
��N�R�zu� +V�j��q�s��9��=�� �������Ͽ�.���;�S�ܮ���m�\�?qb�@#&Μ\iƼ���7�t�֫���C5/���5 ���pD�+�R��1�����|?�3.�l���C��Lb���@_�ڗ�z;�B�"�4)��8��'g���繉D���쇆il��jM�̙���{m��+�\(#�k��@[�,xς�|T��p�I�$�!�F�����i-��>:��d��[��0e�O����]�(�"x���Qϓ�y2�u��;���`�A ��]��T:�7J���m�;~��3� +~@}�a�K�!��˞=c�OØ�i� ��H�=�C*W��?�9��*_�ǂ�4iƃ�e�Z���nXoǃ??��nmu1� }�t�w@�.�k���W ��ܵ�X#~�{��N�>�8`�⵿�.x^��,�_��_����)���_����s���4�����R�:�Ŭ����1a�F�ʆG�H�9�M�".v�L/�r`�L2�e�P����.���5��'����oЈ=?:�@մ58?%�H1�k�>���0��+����yn?n�mu.����c�s� +]�������,��6)��XX���������b6Q;��+��� +.\ �q"��CF�h�ٳ��h����#�?����?�瀣Ӗ�W��R�v��q�a��� +��]XF[۱-۫�yǕy���>���&� +�Ę�0���S�m�}g\��ZCCJ��:������׳V�c�?�OLu)�g�����"�6ޘڣd��Pc�m�/���?��ϕ� �~�� �T8P
PX��y�/r�zᬈqV#�zV�(�⣏_|�18���o���/���r����/�����c�}���{�V� +��>��+/�k�/��$�!CU�$�2�$AtC�M~�4���b$ٗP�z��7�E0�-|���_���K*���� +���I+A�p%���B#1u�
0�X:�U8�w�њ'�C8��;3�61V +�~�y�t���}��d����*���[m�����Ù3�|F��.Ƴ���[
���t�Z
�\�酪)���JW �X7&U�0 +$ak
Ns.�?{ +��Ɩ +z[po��&&�S��VKG�ޝ�p��O��u0�4e�� ��g}����^i�#_�"�2`/�׃7O�$�B�����j,8+�V��I�iv�e��~?Ƹ>AP퇈��=�*�\��s��<�Wל���\p�tV�.Ki��J�A�% +�_�GZ�ټ��g�~�����UKT�>���|���GL�CJq�-pS�\���*���� +Y���b0N��p�ف����iƢ���['%%}Dç�2���V�H� �v��be��Ėa
`S�hВ�J��gϘ9q�i���l���/���Z����w� +�0����C�sٹ~�y�X}u͞w��������?\y��˿��~~�|����1�.�O�8��?t�ŗV��:�l�������]Ã�UB�/1���NPeʪN[>LHV�v}������)#�����R
)Y�Ġ���P +s���G�7�ju�+65ˉF��@po��Aʘ�(�Dx{��F�Uu���-� g��Tݝ�l�Vy��C$Ω�����,���?�|���K��s�i�Hz�ޏz5����X?�;��̿���_����=Ⳟ2�|, +\7P���t�X����6_k����T(b(�B+9��p��_iH�/JQ����x���_�Ͽb���h��3s��⳿�������U���z�D?aA�|^��+Ȳ�~�+L��J�4��������[|>�^T9h*�K(�)���Ô�Fid��b��Wҷ2���fuJ��8w���Z��5r��$�
�R-AZ����z�s�jc�����Z�xMd��o�萢�n +� +L����K���@�D +@��J���[�b���:�"H�\�6Y�d�J����7c��`�: +�/���'>m��l�t@���������IP��s��{-X/���MT�8����{s�s� +��\���z +�x��7yq�t + +|���fҘ�F�C*!�u�� +���Rsg�%F����։r����'ml�2��5�uf�����
���5Wim���WA��x~���G ڬ�����V4=�b�a��R��x��Z~��A��>���8�n +�+"�I!=d.����P}u2u��#�b$*'���`�y/���� �D}:DR?9��, +&��%;.�`x�:�Nj�+�/.���`|�\��_n6N�`���f\���0.�*���sVÈma�1���H�L<0�;��0Q�|CS�l;���SYLʄ�ư�xb�j,]�j\��~����vhvἹ +jQ�TJS���,����_�Go�=� +���W�1g�����X�d�>��Ţ�w��ŪeI@D�=_i.�]����V�a˜�U��d�'m +�dgd^A+�qu�]�0����ښHJ�����=��ޮ<W��s�.5NM���,�9����3��Q���1~^;c� +: +o��e�̥�� T���p�����]A>I0�'�DA�w���g�Єq�?>�a�נ�L���=�ʮ��.�-���!Fl�h����E���.^�&�z(Lo���Ě��vﮃ0�-�P�A��ޟ������!��r��������������ŗ�����=_�?_�� �_]h���>w���� +rK�4��ժ��* +����mA����궷�s����9"�#,��
: +: +�B���B<�ܲ�i�z�G&� +ag�.y +�|�at@��$]�jw�9�f�k��A�W�YR�)i�~@�����ӖƁH/� �����&{��9�'3h١1���ư5 ��bh�%�y�O?ɚ)�#�A������ϣ���_�f���+��~�����������7������������� +����"~U����D<�̃���+^��O�D���~(����fc�Ӣc(�gM%�j�����"4���i�Su@�q���+@'��TN����︗�\jow`5�u
���qY�������� +�+W(��
҄��4[���s�VJ�u�c����~��2�l����C !�|�Ѻ�U����H����`b�-s�qOvv t!�:��PIՕ�(��Q���6Q~���y�>f�h=
�(ɸݗ���w�QĚ��|��)҈ö�0!�q#&�P�c�3 M�* ]����#� ZI�'�'/r�-��ý�������1k�s�N8$��z��|?dE*��`ց5�L`��u�/<��#}0�KE�1�WA�Hz,������|���R"Ɣ��=s� 'I?�:yD�'��xp�� ]}?N�t�p>��@|wo^�m���������n�s�s���k���~�~ess��>�����m�K�_�g������_�Sy{ҋo�����{w0���w�?O���������w��>ڂ5�&UAU M/�j�!�����k$܍d�<����3=�2_�x:A�v�^�m�����{]�~��?ؓ�>��RS.!4�H�;��86�b.#�;��?�m7��U$��1�&�.ao�d�<9?F�3�r�>�$0W�q�n�T៱ՔZ�a����ޡ��{wo�X�Q�zN��O+y�ZL@�`S�*'�%�Y�yq�3W���J��3���(7��/9���~�4�V��f�9)�/\M�s��0����w{8H*sԯ�)���Bbp�3��q�BPZ�mU�魕�F&��gy�><vmVr$F���sW<"�dF���*Ra.���^���9����&��k����8U�����"P
zH�-�yD���G�S�����������i����W�C�#����o��.� +�:��#��d< +�$Ok���^0&��xp�QJAg�Y�u���o�*��!���FO�R7X�K�H�JBd*���a�l�Y\��2gp�HՔ|�\����8�T +�/�� �a�
ɐ���Z(��gip�C��[�ɳ�O�%j�i��}�'1����+,�_}���[BH����:� �aˢ�e:��WIDQx�$��0�G�!�vZS��>S�N����A��"�zY��ٶj
��K6l��'S�`�2I=���3���1��3h�D� �A +i���dN1Z3L|Xk�B�G�b9�zp(!� +��'X@�q<T +���adk��. +�ѡ��D"�b�~�: ��+$9wȠC�� +��E �B�ގ��J�r%�ls�i�-��=o0�etQ�?v횔ej!�ioyF d�_�@j��u��i��>��po{B�`N{��"�`��*XQ�Q��P��J\�Yu&X�c,��$3
6?P|�й�W�½˸H�~�[������:��"�L9cy�����/%H� +c��Ѕ�F��Z�s�l�`�;+���&��@c��~��v�8]�D�'k����k�����҉JѮ�k� ��8��h��Y~�K�O��?� �Hʈ'�0ߛJ�d�-��ġ��?�g���� +;�/,sA)�r
�<��;\����^ +E/���y��H�hG���T�Ē|b!7{����G���N�l.�����8S���?�aE�BH�ic��~ �p�n��Y�d�f25l� +� +�) 7,C�,����J��βld�HT�۰WV���^? "�h��z �8�'O��}�1`��� +��Ҵ�K�+ŵ7�
ooKwvd������<��t����I蕒 +G�l\��P=�;!�E�%�?{~��ݭs]g�ӂ0n��A8�� ��߽��]�> ��UP +D�l��Y��g@��IA�n���8�]j��-���[���(V�il�O����)�k|�ґIyG6~��STH#��;9�� +E�a��v=:���˥Ջ���[����~FtH
�ӧ1�{�m�3@����~z�_��=줥�)�K�p��6��K����D?� +��Zo}���ʞ��Y)f�8e0���}ɲۭl�Q쐊nm���"��� �Հ����
*Y �i�m��M���?�W^�[ܘ$檻7����~ +hjI��r�"��V +����� +<����ЊE�*�X,�)4$����, �헩Y�%��' ����9��(�����]n��zE�2��F����[�����]`\
l�.��
n� �M� +�S��$�5�s�Ls���z� ��zD�b1A��k�٠_$9;"�S�U��P<1����!4j�6rI�N^�����E��O)(S��������M���>F�5�ۋ��R���$��Li�]Y��v��V��B�XI$������(�F0fM6��X���c5��n������~J��O��̘ @�۾[�j��O�[��70l]*;�J�XW$���k ����� ������ +��Ē�^�� +�o�W&���}F�(�F�B@�XAR$������g� ���J�F`2t0���ْ�DX�Q0�����?�1�����>k�;��_����k�i2V��+�N0�a�>�n|��W�������j�D*+���x�����Q�yE�����D��I��u�/\ŋ�X��^P8��5OӞʟ``
e?��3�e�"�XY]�����v��a�X$[$
ߩ"�Z�(�5= +QA�r�l7CD)����T_%���'�R��fɎ���:HL���`��o$/��R>Y�6�uxi�_k��0�`̀)�&�F1ˋ�ju��ֱ��[����j�8��$�L{�U�#bB+w��/ +��ĉV2$hc���;��c^K,�9�قҰ�/�Xe37"�]t���*���*��kB�j:�$� l4��ߚm���i�JW������Nh��BD/RT��`���)/�jPWp����`dm4j1�\0W&��6^�1%�~b�a�
�����u�������X`+�� D��?�V*M�Z�!�~�:,�aG/ڜB��Q0�������n{� �8)�R�F���ȢId*�t6F�ڤ��KJ��%:��o|����8:lq��њ*�S��q�阦�mW־{�y�M4+?�Z��";y�f���fu|j{h�M�T��C��6?�'��k_��@x�a���2����^-���R�����},!��㠔�5L-�T��^Vʎd�t<�a���ŷfq� +8���|RlÅL(�F3oiIB� +��v���RS�$�o��%i���P��8V��t�B�9�)��B�w���b'�~:�K��\��Q8*�W±)�4'��+�A�� +oT{?Xd"�w������o�K��^ح'��00�2 .bY4�"����6�go�Dj��PR,LA�F��1}��+B��a�q��� c;&�M:���)�L�}>p5�%N%Pw�>�RH~�D�ze�֨u~w +�5H�� �5�f`�?���B�у�;�"6
��C��#��X�<[�UΎ��M��w�e~D!ӻbUBb�;��L2�N��qӴaľ�ac�2��Gh�s�����1H�(CJ�L,SC�����.�U7(�J�P�����g�D�k?�baAz�<M�Lڕ�� +|�̺�q.�Pd�q~�� g�_$��$��=�i�K\'T�\mB��FC��fVh6-݂q�RtV$WKu�M���-�#76���Y!D�
���s����Z�ӷ��]����OX��=C�#�~�V�'����E!�uwd�f�Z����2psm1�VIY��p� �@�i|�A ��,�`N��'�h%E�ŖI� +�����0��»c��*�OcS.Gք !�7� (����绽G]�X�w���h�qіu$��
�hڦ��P��?;�āu�@+�)XJ`[z +M���s� +��Rf�� + +cd9���{Һa\��9Xe��R-��Q�2�<,�i��<6a\�MJ8%�q)ӣ<;�z=�{��>� �V3�C
=���N�>L昤ۘks� ��u�;�L�4����h�X��?8^$#m4� +� +��5x2�w<��D.�k��Ԍ��l���tq5���[��`lj�d�ш->� ��C������vm��_��o���|���t�bce���=#�W^z���?P����ެ�=$-��V�kp�Vk#p����?�j.�`(�0�T�p�h�����7fB����a�k�F��{_����{�S+o�{���+�r�j �X�yA��� Ie��n�����o�8ۛ�d���Ss�ܺ����&@�E2�ʖ��2�m���}=�00�T��i1��O�ث +��'�nTk��&�n��fT������CL0��jE�F'#�.�E? +�����V����l�:�C?�a%�b ����fy�HW��.7Ĥ���m�<�V�}oeI�-�B�$�.{E�<���G�zC�k7�#�i�@���ް�!ô��2j��%V=���E���xc7�Qoi����L�^�l����溃{?h/]��w��*'-P!]�!�j1�*�|Z���H-Q>a��bf$�n���>E3<��Ş.�����e")��Q�2��QP��Lɜ1��?p���=�lR���W__6t��٭<g��W��+E��;���9U 4�{�*���z�|>k\,����;��5O������{�,&�N�^:�a]���LK�o�.bCo*����'�Z s��:�ұfa�Cl�\9 +�lF�E~���� ���e�`��"ls�R���al%�����bK�KO�] +N����q�k�h��AA3�#�8�fɂ'����H9 + +T�&9rA�s3���n���upJ�JH�)�M��x��y:�Uq��� ��'��g�HkFf�`�8������A��N���k���wn��a��bA�$ӏ�=W�JЬ��/�0����:���+��~��Kҥ~�,����_�=��l�Nq['��X�nO��!R�x�����Ύ��r��a�JAiIחp�r4 +D?(��W�V^ƃ�װ~t��xq�/W��\h� +��8� +��A���(X$� ��d��VH�c�d���o��B� +��F ��y� +̎�T�`�|���|�ڠ߅����h��a���'���N�I���u�
�=_��p��M�UT�����m`������;��G���|�5�%��?a���u��Gf����+�̻y�\_(ױ��.���v�ܭ?�4o�,N�ک&��:0ع�}� +�����Ge�,����� +��+g��j�Ѝ�����+D6^�T�����S�͖lxmP)Qj�����'���J��ۡ����D�8Ե@VZֆ�Eɒ� +��1����B��X"U"��a�*j��-R� +`s':���B����b��F@�|� +�`�'��YW�+�ȴ3Tg��>Q �N,Jǐ�=8Թ�<�)LK�B�����C��J�Q�y[�y���^n&�M���Lj�+K���P�&���f):�y
�C����a�2_�ue +Q2��
l> ��T�\갷l��t��-��6!<�I�%�I*���k���2�YS��(�lQ�[�����3>�=#�#��M��x5��`�� +��a�c8��ل#�>bxEv1���� +Q
p��L��e9��/d�R�vP +W?i@���<�4�.\zN%�H�{ {]&��Հ��)�!��C�fR%�͙0���ȫ�5� ����f0�/_Y +E<��+����+�@���;�z������/aҸ�^�a +cVB���>�1��R��:��l;��b0�#����� +�9�B�Y +e�� 2�4%�)�1� +r�;�;�o����*�A�1+x\���.S����u +�� �."�N����j���WV��I�pa[MO����l���(zҵ���w�@ +�:�����i��+n����/�~���Kg�9j0��D^��fZbW��L0^��T����EZFA���N��0
��ÚE�y�A�G�\�w�*Aǣ�� +P�Ģ1��� ��$G�I�\\!���q�ؤ5iX���x\5�Ww>��z���K+���n5�/m߿;x��[��o? +��O��rI���m�^ +��2� +��< Nc)0X���-߄�?�9c��+����3dB�ӒU������JVt]�L_SA���t����`�;{n� #
��'���w?����(�t77ZVI��ܭ�;��,��A���77n���+�����:g7+�պ�t�Q�mS�"����u>��}����b�����$���c�*ڟ��t�۪=��:�F�/�7w>�g;n7��� ++���|sm"�˧1�1J��A܋��ƌ��,1ݻl` +�c�f�L�� +.��PM�-L.��,} + +�8I��d��G7�Jd�>ai��� +��'�`�� iYU��NԀB�>�]߸�:@d��.�B��S��;A&jaYV��P*����=/��4���j��I��Y��� �/, +�a�� Eզ�j��H�?��K��b�����Ľ���b�(����!�0�\$3��Ϙ�$��WN$>D�&y4@Lc/ �o��y��2����b���!ݨ�d��#�o�?���qh�5A��S�JW H9i���x��e�\ ҉$�=��>�"���;���J��K�������V���h�/Ekड़�9Z�{����xJ��}�-����� +����#���Ԇ�� +@���!��� +��o��c��������n���@�+�������E%I_����xO����U�L"D?w5{�ҟ�����-�����)$�~X�Z��K� +������ +�a���13��r� υ��v �'>�律�\��\"K�%�v���H����852��-�ɂ��E�0�`��.x +Mc*|�]�q���TUp���ĕ7�ʈ= +O0�Ʀ�Mvt��V��;�]�pyw��Pz�dm���_�c�����j#>�JV�d��V� +Y��q����-��/�\��R.��۰��Bg�^��R�T��lGnS�n����O�#%l�������n�Ts��%w|ؑ��q����#�"Z\8�:[���#��k�˃��p��' "x��3�^y�X�$�.����F��ءFW�e�J,D�v�i�H=,��(�$����/]h�w��t��T6���[[u<A�?��P��m�K�2�y�ic����yI�!�p,S��4~����C@����`�e7�'>곚
B��0����D�I��l�SD1e� +�i(Hp�6�B +�����Q6��i��a �GbR �*E�R�� ���h���$ϘY��X +����֜R��� p�lSăZ]�S�����9,��m�PN��?
�HQ���*M�$�k��x���ì���$���YGq��wUT�#��&�v�@}���s�5�%� +����s�0�L$���tI�����;�^�cL�=�n��$&L�[�����wRʝ|^(�V����`��pз�x���0�dϮDve��zC�Ų���N�e��Y?��-�,�K "������i�sv�^�Nq^��Z��(��_��oF�3؏����z���im�W��������֗�v>��tz�~�s�0��b�y����E�[]��g����:+����OKQy�:����a3��>��� +�*�`2� <�� ��� ��B��a��@�f�3�k6n�S�+�禽����S���8��o..��2w�~D;�v�~�ҕ� ���@��`������vY�R�\�+( +hhכ�:�Ẏ,�L����8 ��i���6tp�Ģ���� $�TM���I��m�+����S窿Ņ��Z���8[0n�)-��� ��"�S�B7������1��h��� +(�ٚ9**>�ĘLJv�a��s����f� +��7+� + +�(,�b�8�&E�h�&0���� ���㛔�7���?TT +�u@�ʥ}�e'�u�<W* +��� �B)�CW���%�`V �I]�I�W�I�>� ��࢟[��8����� ����7��F70<Z�>wf!U$��>]��l��4P��a��S� +���u����Gf�ucb�+��'�J��E�))R[M�gO�dH5�%u��:¸$4���v#��Z�♧��\g6V(N�����_T@�OMς �WaQ��n�E3��#��څ��+�~�t�vC�oO��3���C|<u�ڟ��3O�s<��X;j�գ���B���<��G..,��c\�-�$Y��'@�k�O�����ޔ�\��4MpýV��ͳd� Wro� +8�J *9��t���#ERqk��)����IJ��I�j\�`SJ�q:5�J$�xf�),������}���DI)ڠ�a0��,��v��dRG�$fP+`:buX�����}R +۹��K\�����ߎ=hrj��n��X�d�֨W[RI�W�6̣�3Q��dD�A��$���EIS��V(�;����;�����Ψ���a�NBn����v�h�������O�)��tR6Ô���º�t��>K!�����>�\�®���( 4K1���+�!�C m�{�(c\rc�>�:ł�E^S�!����*3V��*d�Ԕ�Օbͮ�9_��@�o-�dq�7�c�����^�B͏��a� +̾t�V�Z�><}�����K�`Τ_�\b;K�|&rA�Y7@��!b�7tB��������A�D��aE
�q}�n�r�$S�Ճ�5���D7���e9U0��! e�붳�p<}��*�Q� +@D�`���
[��!�ð�B�R���P�RonT��Ѵ̔� + +�hfM0�)�k�D���kx+�?!b�&�`Z�%���{�(����)W��졻7��ln�I�����lˎw������"��8���c �A# �Iȼt��@����!��+ +�C@ +6���תuV +y[K���缁8��)�2��j0�M�+�>X(����pa����_l6�իu�l�[Nk�T�ձ�+7a֖�t]��|*
�]c�@�UMr�{�t��`���z`�b��m!nS1\K������2jW���{��@�e�1����1趱-�5�=�P��Jɣ�_h�/~�p[�Κn�2�����:�R��v�bw^�C�_zJ[�,;�������C�Fc� +2)QRA!Ф�NJE7��D�&P�p���g�84 O�˨�v��_G�
�Ch\��p�<���:8A(�!fȱ +��a�"Ap�v�O�$�����;����
[�k��z���P�w�ìC���_ �E��ĥ/���[L���_{��ح{�1�=\S�jT��=�4�$Nf����L��3|�a��������r�;����K� ���[�*�
%�G��1�|���ךn3EV!/�2{�����O��z}~��z���o�$����%�M���g�N��0m勠��c�. ge%X.����b�\_�@e��}u[n �1�AV����1�X)�d1��[��v6�cZ/!��#)w���;�KK�={�����P +�(v��@��-ۉ�Q��0� ^/y14��i���x�g3��y`�V �H�⣙��k��f�D`}}�8P\���0�c�.n(H�(I�d��W�s�к(�υ���@!$To� �̀.�T���mHc�qp�Lu +KZ;>�\DtJ��y�a�����`� >;x���@0A�xF��r~���"��-`��X.����$u�8��XP5���!���r�/&�/f*�oDz�ߚNt +D���������\��6G�h�6���N����>v�t���^ ��#�v��=��gEX �?��o�N�vg��?��� +6����k��\s+u8�����0WIP?Tm)*FX��8�=�d��h>u���T +j���gЩ��zU�] ��)f�J�Q:��!�DN�����lx�J^S�d�Uߩ�ăC�O˚�l�Lj�P�'}��[�kn�&)�� ��DS�'�&ſ���b�I�M|e2���ڟ�M\�Ӈ0��Љ��?d�)�yt��<^�QX�r��/���ɜ�Y^p4bp'����:������I� +��� `�� +�)��O<���~��������O�Kpb����'�ޟ�!�������/������/<y��G�u�&ML�sȲw���0ްL2;̓;KFRq��\9u��VdT�r +MB�9m�?�/n�#0$��N�Z�6Ҋ�5;���UR-IK +t�����/�>�>89q��WA|��W�7F��?������U%➗�@p��*��_m���is�`�cjGt
��a� &_b����R�]Qތ +���ޑ��0�������`d^~K�_yu.N�E)|�NT +�e*�E6$��Ϸ��I�hI轞�b���u��kA
�[C��Ֆi:����w0���~ao��?�ݩ� ѥ��y���SAݞ}\�֬��|���a0(Q��rslBL����$j����&M*�M�f\zC���W]���$u +KcI,��!3�R��/��H�N>�B.��m��5P" +�&�
��n��������:oN�Mr��15�7H��È�ӑ��W�8>R�����k]U=~Ӷ���?;{������;'�� ���(�y�ƭ�[\�˚k=�ܘ�S�j^��j +Vn�`��g9����?�w$�_���n��;� +�A��Lm
G.��i�ga��Kɩs�+B
�R���P(���]�̐����w�j�m�q5�aL.[�C�A%Hlt'�V%ѣ�1X�!��3��`�.��Ej��{1�^��%�&�+Z�Xd�2��z]���+Y��������='�7���ȯ��ϊ�� +��fl��TId1�5ƠW�@Nl.&�d.j +�M�UL?Vl��C��I�'�Bj3�n�V���`��L�|�~�F�~+��P� 5�U�*!2��'@vϗ��1DcE�Su����0�3;���5�@����������PHȫ�i�Rl��� ��zv��� �Vr]t��%��t��� ���AD����?��.�a���U�*� +tjk|"�tD��Fדޏ�LQs���e�\������#_�q�&�A Na_�._��)��G�-$&��36'�"�0a���e�v�͗�4�b��l��>�U��ٸ��a���eR�Hg-�p֛�ܝu�ܡdF#��hyt�0��,�� ls��ެ9��Q0����J�*a�~������'nς�'�o��fX*��N���c���)����G��m�߱C�-���R�qG!_�����G�\x������{?����_��������?�?��?������o����}�{��O?�У��M=��'����/]Z��B*��yB�����F�6}��Ra�G���ka�+�A+�Uxk���ٶwy� +��Β�s�)"�E�oP��Ή�c��z���f��l�N7c�P�$�>t�����Ԉ�\�U/$w�ѴƲ�k����\s�1ˈA�D�t�k�:�-���3�����.*����5<���ݹq`�V��)XB�T=�}��@�>uŐ���6�@�1��6{G�Ԍ��'�����/^D`��QĜ�PF�����$_'���=1M����G^Gd��Z���� +��c�H�ˍ�b�ф�{�(�����w +�\���YK�o��'��~�S�jB�6C-e�� +����}�k|r*:Z���p۶�V{$ߎ�⻨�< +n���4c��Qr�4=�X�;� �h�][��S9��ߘ�C���֗��.]^�ʗ��_������3G���`Xov��������s���((��{�����-8��ڹ�����?�6���/?�����O=xB�,�@1���*Èrx����U#"����e J�>���Zkd5��*������ϟ��)�w��*xpR��B���|�~�hժ��c�G�Jp�������������ٗ*�uwf�T����=}����K�]�\1;��|��s��B�si�7{g��~˲37
�^E,���Vaܮ�4�����3�h8�8X�� +������/Q&i�TY��O�f�\�L{�|�-��� +���ě��� +: +�'�Du��G��!���Ő���nJ�m3e�0U��p�_d���l� � + +���D���Щ���/�w��������$o���SA��VyZn���
�>����6�����ۛ3w�V��D?( +���S��j��>ztZEw13����Ԑ���-�#zC�4
�����\���j��J$�vӯ��QQ�N��.*nL�xȾ�U�pCP�����o�#��.S�R���hC s�2#�6��� +����-o=��ٯ������ߑ�j�k����[�j����m���O���������V����G��o����g�|n��K�R�<Gcج�kSE/��:� /O�!�4��q|�u\�2���)�\��ޚT���m�7�&i�&Y����J�Z� *N?�"~dG��g�Re��M�y���y�\�+��ԩ�+���9D�l�f��t�5e��D�,��$(C� +���&��Ӈ���/�g�^V�^^��*:����.�?m���k��z�Gs��7��˓G���.������Z���5�p�$ì�*�h������b��ÿq���FP��'ǰ�'��BWC��Z,8��}T��{�r�����>LH��'���!�s�N��^~W��,�^��Ψ���i^#JR�T���{���o0���MZ@q�&�X��'~3,�X�ȶ�����"�㟓|����'=��� + q�Q�!C��x#r��������o�_��Y����!��Ds�H�M�~� +v{��� ���l��t:��¢C��8�G~jf�E���Q=�Y.-���`�I�4�Dk�;)���7�N�>
�,_X�9r +��)DB5�o�[6�6u0����P����;:x1"�ؒޒe���c��� +b���.j +o��A��[r�(�'�z����ё�L&�R#��ԍ�OHcD' ��}���N@�?��s������� ��J�Ԥ��q~<��p�����O?��3�VZ�8�/��ope��ݻ�[
/�:>�Ě�=��`�Ν�=� De��6oۚ�,����7�����"���=��R�Ј�X��;���L��D~]�!b�� :ȅ�ז��N�J3�JE�r!Œ���A���C(���O$�� +���| �)(.���E�#��#Vb�`�C@�C@*�;�J�"�#6@h�u� +v�n��$�i��������ǟM�����N� +0�7� �fT�]���mD�6��g�F%pְ�^���6��`@�۸�d�\.�������l;+�#�%�h�fff�'��4����|v�xFŨ��gVm������K33�f�ݺҚ<R:��28�Jgϔ����*��.��h���̑}���W2�����&2{��W�{��/�/����YY^*N�ޝY�t�
6���_�.�`GV&s��$�����[��Ϊ�A�%�������]����ĭ�V�d&QG �}J�R�\�d)��N�H'�\рy�.B�rOz�b��(��av�MB!d�jՏ�t���X�5��Dg�D>UUe +��
u +� +��
�<��U/��*��ϣ,iÉ:�2����AO4�%��գQL�l��\{�L��� �p����c�-��������|���u�MP�����OO�۽3�!�A�gT�P�Z�ǡ�!�hX�!�G��`">7G͌5�(^�{�o�z����'����������w��|���/S�k�By�9p�ժ �I¯eLȎ�1j&�P�Q�ਧ�B�D�IQ6&� +0|~��y�~�< +S��:pD� Q[��Ol��L����7�hx�5G7��ee�6@�5Hbke(=lh$ۄ[&��#a�)H�G��G�_3 +o��]�4b���26CnOi6��~}��]�>�|��v>q�#�N��0`}��?��8� +�>� +�?��x��`�q����K<��͊�;���?���4oӇ���NX�#�Q�ER�~��D��J����"6��%4nΒ�!�} +������0w6p�+j�<�]f�8#�S[�⧶���B��;����#��ʪ�i�0�X�,�� ��(�5�DJ`2)�Y�:~f<�waJDWN�"�0���ct-(���Z�c�`��c�5X���&02D ������TM�K�/-^���'�W@���5��l�YfS�SK���iF��%�8�/~���a��q�:w����ae5d.�Ḁ��٣�g���'TF�I*A�Q�PZ[[C�n��E�F��2�!`�Ȳ`]��k�r����d�|���#W��a��:8!�L�Ӄ�܊0��*�]R�'8��U��`��\��2N@�Hk���Q�40|��#�_� ��磲%�q��e]?dX��˕`b�>Q�L�i�g��U��*E�V��g�0������ߝ~�oN��
��<�.>ʹ�s]�_�t C~b�p_\T4�������V���ޒrkb�����j}�T�lrV" +�ȍ��H͠� �� .}�}�II=�&�gV�vj`����i0����z< +�� +�>�9� R)�4-��� ����X�O-�QE�Ƕ��$�g������R/rF��5Ä#���ї#�����k�1�O�8LQ�T���I�`�f"� +�P +"��=��BET�F��k�e�FS��ո�*��Ʋ���o6�d��C��{1đ}�u�A%? +���<���+��0VO�kJ�0|�j������J�g�F
<�(�����A������V�i�2dג����k�b�+F�>>�g��&��_�)�����ha�@��6�7א��� +/�Q�~`���?OC
��;����K3��X���S����Թ����- +@�-}��,�
@oͳ�?>Qp���< +���W�g����js���̌f��0|`}�&`۟�?ÅJ�(�,��Ti"��6.8>�v��Pn��Y,#������Au�<���-!�X�Y�G))��kfy-�Q��+c�Iʵ%��n�k'
������0oe�Gb����6�1��؍�X_��H�0�L�9}�t�5��,-U�^��W��#��Q�����A<�kU���8�.��x)��@�P5aC�r��ƄԮ�@����胁���*B��PJ@]���m�J�FX�� +�� +�Z�[�r�ڙ�},�/W�gJfƄ�`�;�<1��N��� �l���B$>���"���*,5����4�%0D����\�.��C���uV�X�1��ix\H�#�m"!Y�=P0�F ƭ�Ұ�. eVV��*�V�!:^�����4B���f��!��"p|䁻�g�kUкpL���
_I�}��w��Օ�}7^�G�����o�q�/T�џ=w�و ����ꅭ�%���w�nf���������*�>!������3=Pu=~̥�.z��GV,I5]�}Z��j���f�n�D{��ZƲPf�4�-�d�0��2#I�%qc_�������5��[b��= +��L�m ���V�L[�b�u +zvA�+��{=fWfn[���bA��t�1DvT�I�* Tpu(#��= +�C4����tT��1�Q�"@8dq�n 1$��6�,�*%U&�B������`W�J����Tm�2���#�K0d�A'ʇ'�#����t�������a�}ITU�;��]ð�� 1Ɂ�yh�vy.ɑ����� H���Ņ�����+�ߓ�KK��n�A2�ٳ0.����4�xq���U��(�����î��~O��uD���O��-.�a�@�$�3��TCؓ�ŕK��;Bh��g�zD?�K,h4��܉�@7ɒA�M�����ȖWbJ��nYK(��P��<��똁�=|$��'��a+ƨ�[��3-rc�z +#9gΜ�b�ɫt`����mOr��ܑ��[5#H"3#��`��DW�r\�W�(��)�����J��gz\��_�ЃObs�)��]�H�u�L�q��ъ�V +< +7�Q3��$w�E&��aO�����.�+2JA}��L% +�%� �G�yޘ9�ʘm���� F_
���e��uؠ�ů`�D.�A���&�ɆT�:<������9`�&�@0I@���ћ(T�$ ffp����-��;��8`b���s|�G��=��A���6���b\L�*�6���ћ�H,�T����;��<uo�@����h��1�PLx�B��B�sU�ϳ�� +��w�ZY���?��3Ϟ��g�qt����?w������ (�6��y�����7���_����8�����_|.�_\(/����_�-�t@��^i=�'�X���v��!r�:.��*�o)Q_�݂c>��E3[K HN���HD��@�P���3��H��u
+���P��e�#0�x�� ���>I��S'�~���G������o��sX���3gW�kWW�(�=����ݳ�E~��V��.L0^>���}-L�����E��f�浺����fJH�^)UC�[��W�0 +�ܹse;kퟚBJa�Ro��PS�|'A��@��:~&_���J����U*!�e�R+mP��vG��$&��^��o�(�C�PM����UP��(�F�'�2%@���~O.;[N߶�˰3����*�-��RR�"�J\�h��{�LɌ+BP����j�ZJ7;���z��`�2�z�9%�!��墳[F����J\�TOч(K�-oI�$��Q&���^��������6�l�_a�<��<o�Ðm1��kk�����#������%�z�:���p����A��Qhw�'T�Z�*��v`�b,VJn�H,�z��\ ���R�����Q�d���Z�a3��KfT�Dc����@��C�(��(�Q�����dǬ�hw3f����|<��X�5��/�>�_���ÊzHL�0�Ѐ/����9fp��ќF�fjK��G��+_�W�<�"�~�X�Vkg�\����N���tm����������Cw{����=x� ȳ(B�`ɠ(Ӣ�H��ȢCG��Ʊ�~��%u�3I;�xFO��f҉�7��~u��6i\��JV̊�j��F*Zaʐ P��� +���t�z�H�v�3�'���c���p�ٓp�'���9�����+SaϘ/H G��������=f�����|���;;h�[Mop،�B�g$�"��T�VKz��F0c�����c����-#9@Ne3qȫ�Iת3k��8�߾��wߨ��Q@?��������WV�ƥA``���X3�E%�I��I�B�m��eP +��d�bK_Z� ���T0T�U���t}?����5HV�o�� +���e]��5A#�����pZ3��fT���b杈X��3T?X���Y��<�w�m�>��+����F��K�:�������j[J�|/-��yz6�SIO�w1>0�4�������G���d ����-�K�c��k���qޚ�I +&�Wq���ϛۂn�x +�ٟ� l����ob���Ί�l�okP�^�S�<:2�$hqS�I��~� @|s�7Y�����E�����\I�����֧)�yrf���.��RΞ�TD�`Pڀ�b�O19�OR'��9�_w)c(�u@���2�U�v�?�v,GNk���|ዏ��������������k09>������v�$���W�@+t�GŅ +�g)v7���|���i!#Z~�RYuP��|^���R��Yo������5/a;ʞb��nV� �Ɓ;bEe@��O��5؊���\����a[y�
��]�k����`�_��PN)@� +TQ������[��Գ����0'��.E�-hƩ�̒!=/���T��v�'��N���$M�S��<�{ +�M
�y����i�s(E�%����F��s}h +{2I�c���E��#���N HH����@.��`�e��&N8L�2C"������%���1�mu�
�<&�$܅ =�Ľ1zIx�,���,�=���<%L��/8@l�!Td�����Xk�wI��㘌G�}+*t=����x�K=B�pW�&!��f5�9ܯ��0�4�4њ�}�u6�QRS�G��y�@GwO�qFF�r�(���u�l7�i8��������("�p�v�%�|�SH�������Q$�5Dj}�G�Ol,�}�-�D@�ln�pD��9軥�#��g�+�/�����C���_�:���~�����������!�Na��h\F�T�`���_�����n�@��� +�UY�R,JGT.��>s����vA���DpB�`xج�L + %!���VD(��x�F�ܲM�Z����]�n�3?:s���j�.����� N�n(c��m϶%C�{���u!�J�6$F�I���5b�,Ļ�Nvh��ji��r�Y��z����������M�r)�l�Ò��OƐ-�Qx��쥰�aВ�nf�I�h� �-� �Ix�FS�=K$9������x7,)X��AD���f4� j3��̌��g�k�ǭXo'.�]��3��o|���|���_�"Lc�uMw;\Xp�/���g��ށe�;_��?��_|�9�o"b��GC2�wn�H�j|��u|���H g�ʚV�Fw3��a���յ�XAњIw�nkљ8�� +&rB��k�h�kU�$Y�=�8�R�>��p�$�t�
�˰�'$u����o?
���g0�s�L�"��a��7��'���(P�Q@�|���;���D�MbP��ŀ ���5��,l%��K���g`�"��e�7\x��.wDT��X]�9ܓ�p(Qpx!c<�_X?�6�����?y��w����b�R� �E� r��N�M�r��6�ܟ!�\�1m;*� +��� +�r���9���?���O<�?���1̾���Hó�����N�$�q������b�V]3��; Z�|�54A~v�D�=�A +�IM!II��NC,`
������N����h��.K�$'CqhG��Է����`i&H�)m;��E� +��&?��eɍP���^�E&��3����~�ja7�袇�Q�@��Z���&��: �/���掸n/H�.�:���wB)|\���s�_��o'�C��C���_���[����/�m��YC������GQ0�������U��+���� +`t��Q���cl$?|�=J u��ey�i2Wĕ�t��䡧���j�U��j������қ����|o^ĥ';�_^�M�u +�џ����֒���]x�O�;��?�6�k����*9��z���Z�%��WA
8�.���ɓ��D�`��zF�D�Q`�R�����dm����2-ʬ���dNĖ�a(?��8*���7+kNu���ٳ� KG��Y����Hp\�n7���d5 �*�.R +z:1���& +��º�0,���6U��p�<��p�Cx������ß����.�E��r +_[_��^�WP'� �+�r���_g�z��5 K +6MR +�}�pqA�5�+�� ��V#��Fã�l6��[#P��2���Z����?�����?��W^��� +t6�K�F'�5xd�P�I'|Tq +�獓%;�#��,{��NӁg/�$��P�x�T!a�CDH��,O�C�`d_!�f��JD
Dp��#�S]&+F3@k��������~1g�5��R)���X���o�����>��ԙW�����$����=�yߛ����m������}��9pkl�s2V� +=A�3 + +@9�h��ND��;lq3���כM��@7�>���") w�7롘�w�^�݄� +2�q�{�!תm��a �J� +D^M�� "}�8I0���6Y+�76"# +^KKh�ܢ9d��q�����Jxr�b�%���Jz +��CffߎG�� +Tn(��s[T̞�r8���%T����S���՝u�q!<�f���W +�mY��A�X��Lau<���Q8���%�-�K��0�-��a�ix�Ξ����K�� +0���4vZ�7��t!ou ��"�8I@��>滬�Kwc�#y��R�g�֣��U�`�Mc&�&Lf/r�"�e�i�Ǥ!�X��7�<�
K�5�(���l�����Ǡ�c��g^x�����jL�:kbg���ǎE��8:4z��G_����X D��r�8Z�msݝ<0�F܄�Qk��jqghk#,s0+굦9d0RXa��_ѸU)�)��������f�V��O�ρ�65�T�M��D��{B$Jc6���M/�����s�1y29�~Z����i[�c����'p�8*��D�P,�t�6�D�����à��٥���-$��8dMk���}�����ٗ���
����5~����0W:k��
����D���G��g'z84l��w���}��y��O<�etڒ��#���z|��<pLN1�,״|�>y{��ɌZWْ�3=�8uw���=��s�����f˝��K ̄�@4�ˣ�#0�C�f�2@Z +�+����� +�3Lb�c3I'@BTRi�A5��H"X[��kI}�4���ҿ���vt�*�A��c��Q�j%'�,$�������!�����;<x,�Z�U�9
x%�r�ANb������?���w�:�T�OD�������ϟ~:��=p�^��be[(�[~�����t��sͫ�ܮ\!h���s�j +�Nݼ
p%�P�[�ԫ���*x�P�1������3����2Be�O7����0}`��?L#���� Tt��x����A>��JXY3ύ�\p�\Z0�mabJ�s?�p���Է�M �ۯ���������� +ꉉ�Qg� �K�������&okWZ� +�;�|���h����,x�l�S��eG�Mx�}1O���3R���5�����0ʗ���:��ᬼ��� +��� ���"������䭓mG1�=��7�ў�i1�Z�\2�< +��?&�A|�O���6ֶ�u�;�������r���5=}�@�s��P +}����x!hI�&"��� +{v.�}���ڕsɂ���R���T�ֲ��N�B6h�˩t������g�f��鰂������1���n�J��Q + +��������у/|�랣3'O�.]�-�s�V&��5�.קo�t��jK+�N���^���B%��`���^Qq�v��ĠL�l���V��X������S��?��nvYŃ=�ܐ����%@j����>H����x��3�_��D��ă�)��E +.�S + I
ĽxZ +�t���+h�(��A��D?;���Ɯ���9�a�j2�pnf+������+��>1�t\j�Dm��2̱{
\��;f�J���J�I�u���u���0��#jK�k4V��(嵷�?a_Z�ӿ�ZT�)T��'�q�f��}.[(��6u�[`��K��n�������ox���gWV����D�ӄ�o�v������䗐�����O_~=���KB�ƹm1�������JI�'�\��i�j��\ϞkhH�S]3�B�c�;bŎ#3_Z�c��S�͚
p;ךΪ���e���q�(I�E��M4!�\��$]:,;K���iO� �x�N��D�:�n�7�N��)�a�����È����i�|s;�0���[�*��K�D=�u���)��Z�Ѕ�����p|�,�:�� #�Q�;8U�8QA��fx�N�l1Dx����:mk�(�^y�����'�ν��.�>;�p�������.\\���vo�nsL��?~��O}>355�-�+�+���z�ћi�&�fbN��Sc���h���VCFv��R!C
�֦h��2�Ml7+OL,��^��O(NM��B9��wdJ��wN�Jhm<������Z��8�=�Z�8:�x/;��7W]]XűB�+8��_?J�@��r�\nl���~|s}>W(x�r3ogW�4+��s���ח���4FG�!��-�k +���.����[?���c�<����r�dvx��� p\p��l4�4�s]�wE����?�w}���o@a|����������OM��g� +�)��&Vf9��f�1����Ț�d=>�M٥�F�1-3K�i��*�Tm�4V*
�O��m�k�q9#��<�~�kt����-�)��jQ�́n��iD��:��QUŦ�E��y;�4��a��SLJ[�܀5b���BF��K|�ؗE�<�;�N&�_�G�â#TT_/��L�B��>'�2d��~^�a�"�[۸������y����=L1}��C�GE%�������k��˵�������7V֮�mr�2j� ����\Bg�xY�`�,f��?���7�;��W�@���%�����c�Y���A�Çf��������qτ�:��>4=���Pu���à +�
>L�.D�.��I���X('/�L�{Qh�O~멙��{zy�ܟ��5p�`G1�H���i��΅����x +�����g&n�|K&�W����|>V +1oi�A����Z4�$�+����ۗjKo܍��]�*�ל�r���*\k-^��?U�_E�藑w�s��x��F�n�E�v����!���_�+M��\t��Q7� ���x��1���8~,��?��k$�A<��*3���S�^�I��9v��ri=�����2�^$�Q
h!3�b�No����Ԕ�J�G�����& +=��o<6��zD�A��f5����xEuǛ�e1��f����M��svԀ����E��ez�>�N��j +W����"�v�@���s��g� '�.R��@T�o1~W�P������y;�̽���eXV�t����E��6�l��H��ݚδ�^�-=GoMJXO�͡�0ex������c�����7��Qrd1��z(��p +1L��Bj����U�q�bG3#��&��(���7+�.n�m���r������o%�4��W<�=�?���D2ٴnI*n�i>uo��y�7�!۶��L5Z����#��{�6 >;�WwDy�\��<�*&����A�q�*�%����#z�Z�~����xm�FV�J�Vq܆o��9;��>���ُŢ��x�/�X-��e9����:�Z�E7��~��YaO��j���kwځP�.���@L�<a�������� +Hw\����%?'�����y]�D�_Yk�MԼ�*��).�����"�t�R��ѻ�@Av����yy坩�C���s�Ц��(�y���fy�Z�R7��σ��s�H�����cp�f���L�����f;>�EaѤJA������W�0�y^��\��4j�����ɱ�=����j��#Gg@Ą�;�> +3�����"�e��~&��:T�,�:��y�ӺA]�k�Nq+t<�Q��:��p�^]�Wa�w̆������J�yyf�l�b^�M��D��A�A��*�b���}���� �?�vT�#�����c�?ql���,�-%h�j���`��D�B�w��B� ���U�x +m�>i�Nn�l��1�ͽ��ıQ���lK�y +���t�^�PE2����9�RiW~��]l
�V��s� + +����>w�;_9��g�b��_���r�����ƭma0��p����������K2��䷑��@�<�d�^x!BoB
�C*?��[���c9�̮�Ę�����)����P�s�ڪ�% ��ǢU}�� +Mmey�����n �� +�l\ފ�ӄ����@��\�I�}�m�sU�w�}e���$��2H���db� TT����^�����3�+q���\�DD��d�#���J�d��h�~C3eA��3q����;oͽR�m�F�U�I�P������<��e��^��j��nϙ��Fj�u�Z�?*;1��Tl�r{9��� C���f�5�eA�����b��Xܒ���͔�%��?���6�.��#J�U��Y��Bs�W���=\#'`�����os���ˢ���v��b3��%����* +$�Ԁ�$@Ȉ�7O�8ulS1/H��� "��������n��۱��Q����u�M�8��<a�_�2��}G������a2R@���ϳh�:?a�$����:Z5-L�Gv*�?@���er2��^�Ȉ�e�}: +���s,�E�$fs�sZ�r< +.�J�U 8��[ý���ތ���)� G&ѕ� �ը������τ�ɨA�i�ǹ���K�� �Ƶx������O}��}���ǰ>x<������� �_�Q|ˑ�8�A
��(bQ��ۄ{�wu�a��%�|b���嫚�l�� +�@�=Y�������Y
8���T��|��z,t� +����bk�ٞ�����֚
�� �l�|TX�HE�#�O�݄U*� �b��X�{�;�d���Zj�����K�N�T.R�Bܮ;NuMZ����Vh|��}ff���4����#��C[A)��.�[fF�.,�7^3}Ik�Ӡ������ ��ů? +ϲY[����O~��ܐ9:d.�jE�31���%���K��(�̧��/O�W�qB$�t<8�M�;YY�WJ�2~�ԹW/�mׄ��阙a-��TD +�Y�-��! %rid*v�g4r�4:R,�w��z�vu��䫵*x!��Ǵ���lR�u;��XlA����y{q�p����PeS'U�Y)2� ����a�����z���ª�F������Q�Cϗ�B$�<�ґJ����:�4�����0�Eb�M7��4-�֖�ճ�F�3�M�#�5��A=!��g7Do����e
����19Hs{�:{������������������qt���?������?���w���¸y��/����~�����{������)3kJ,�M���rCC>6� �QCl=�PJ�!��3Br¹v j,��G���rX��
�9p}2v��ss��|�y"�}r �A�I6m�0�p�yr �<+���mZ!�و����`J�j�c��nYS��0�&m�8FJ(�hqJ'�?��5��m,�+�Tj�SE0��|�Zo�ɫ01 +�����vE�Bc�����:�P"Xg�Mħݭ����Q����� +7�� + !�S��^���3w1��?��Rq��k�>�m���~� N�8q���_�UrQ|���~�U H���Ȃ\1��j5��m&/Kʜ+Q�i@S1(�#��m�7���,���-��_5T����O9�u.�n/ݨ���LQyk�� +=�d�ۑ�N���Y��#� +(�d�gBe�C�ɚT�2�� +l�����u��j�i�>Di +�E%�i7�w�bC�!�gH~�F�~�w:� +���\a2y+v�ֹ�օP��鏧"� +"c?B����5� hx�]�tT1;et�|��r�I��'>F]]Tܩy/R�3Ÿ(S�E8?�����C����_��7y*��7'�e�/�3�w@����$$2���4�v��_1��� +,�)�k��y�Rn�QoZV#}�+�0�R��i)�â_�$0N�L@����L`5� �MR�x�W^�y�k�A(^OT]���X��O$������$�[:#$4�ZtD�x��\�rI#t�W��O�BUxb�`�l�$�B�� +�X�@i�\B�K�]S/�2�(s[;�+h�� ���)��"������}�r���m�}g�4Z<�,���`��v�[0���;�@�tMV�_C.���sViw"j�<��p���T +���}�ө矟{�l�K;S�5�D9Z4�P�v8�`�G�Ĉ�,=����q�.�D���۲�Yh:���ޟ}��N={:�avHe�p$�]Z6왁@s68�W�q�����x���!C����l�#g�' +��I��ۘ�d`+�*d��J�g�x�h)e
Y�ƶ�����vm:g�\q +�2M�N�)�Uړ/��� +� +6���)��c��v9��fǏ�RK�_gT���t�Ӭٹ�i�N]5H�Y��QLBs���U^�|���@�S�X��6i$�AV������y�s�:x������#�w<�� !E��l{����h:z�A�m��9��o.N�c)N���%Y��i&��&�4l�`�6����?�CА8L$N����#Դo�;;B�?��������ጟ���?��ϔo(ԋ����ӷ���q�D*R*���#�y�g`����ח����]Y�X�q�rq�i��Q�[�L� #b�N�{o9�,��8>V��s�l�+��nj���y�u9�fUKƷ9d�sPkpLv�j�Pւ��H��^�+97��E�����ہ�h�'O�>|�$a�`�}��1p���M�}�XC�eS��sE��P�F�o���ume������M�P��j����T�,�(�A�w&��:�%�"x(s��Q[�I��F�v/�%@ �7چAAɹ��2�"�6����?;=(z�p�/D*��!��5C��R���T�C���|i��C��=T>�Z���rMar5*Qh[a-W0�YI����z@�y��м%��������\Y�i���En�S���9é9�e���z�:k�������}��VJw<�q]�9͍��f�e(#p���&�B7A�Ji#��X��WK�F�ky�!�-�.f�
QC��>�j�s�#�4ZӨ�PD��3g�M9u7�7K��٫se�� ~�V���Q,7;:b��\��Ѯ�@�i5�7�^X�Gr�M������{��͐Q�\�C�9D�2D��8c��u���M���ƪ\+����%y=8�5om�>|��;nk��& �@�֯���"Sb�l�=�m+�vD[�6$Wf2*���\Tg�ě�ȭ��¿}M�|�y;W��}cl_�ޕ�P�A�me��he�a٨*��g��Gb�@[ Q��ui�x��_�Ƴ� +�X�p�s�N.9Q�,Q}_*"���&�h�3�g�,�����;K�x�}��w�;:�u�T�3�������x�}w'��s�����<�~��x������B:Ϝ8�J�)�\Z�늼ŝT�w�{����R��o]����ր^�@�����S` ���+�q�|��*7��(\a2���B�2w]�У>x�XĖ@$(��bC���.����]����b
�,} +&��� �`����t4��dd�����x��O�8{s��ܐQ�$
s�y��n��'��^Z�01!sN�:%��C\�Ha�g
���X�m�?Vj+�nK�*6<����a[�J�{�豾^����Fٌa[!���f�Q��L;�gT(7ap��������r��+Y/~�w�Yяҿ/ė��+�:�W��zJ5IJȌӶ��a�v���cXV��L���LDGeKY�d��+�
��y� s��'�ǨC�r���i+�nSz�H�Òp�Ul�H��o�NL��,O���{���\��娊�0��YE�� �@�A���]Փ!"%7�s��O"ͩ`�ö�����6hYN`�e�z�ɉ�nsⓃ�~�(��*�l�º��k���<A�f�(�M!�*������7B{��nŭX�3N�gk��M�0le�NO�腗�R��T�T���ː��A���9"JB�]��cx��[_z�D�x���Ǐ�]��]Ć��=��R +c���RK�]�Dn��ZT���BH,YILp����J
�(�������f/�%Z��0�:�p]\b�L�D�5O���Ii
⽭] ��:�y��!�g!�[q���p��*J:��
�]���,�KD���`��/P1R�]F:-{��8kgY�90k8gFqU�٨��� �@
����b���O.�,���~��A� +�J�Qykto��l���?F""=�U�Жx�,c>;�5=#��-O���+�(?ըP��7���\� +W�%���{l�HM�N���M��n��p�W%���2����fe,0��2�+�g�{��mq2�~�*yc ��Λ��9
�g"�b�������"��1C:���g�� +A��?g��:�S�9�� %{"K�!S�78VnPM�R۹X��:�YwTM$�|wlx�`��-|>�5?"���_DH$3����&�nL�/X�Ź�*����@U=oF� +v|<ju��5�n��{҉i�Vƌ:p� +QY����se������+�vq�r䞙�+
�?R�P +@8�La�R)����_z��?E��c?�~��yx~a� �O��e��e�E� +\j�a�A3��X��m��5�Of�q�(/t�J��5�`YؠC<���y��]#��%rS���8�Ml��Ԏi�:�I����H3Q�2�VE�����Eu����ƴ�5A�&�� +`/#�� ��YsXMkt�dQCj���=6<1?�"p�3A�����2�Y���K�pKCޅ@E�M(�S��E9N�E6*#_A%2K���陦O��IeVw+�����!�ܻK�z�*h�o��%F��Ogh��)Ċϔ�˳�i�$��d�&H�4<�n௯w�f�큃��c�,�v��Z���!' +4���@0�;��*��v_�6�$5L�=�B�mz +�����Fo��S0cf1�b�:��hQծ�L�h���]��6��+����֪��>q|�U��utf�lul�^�6.�\��÷�������#���߯�i�<R^��F�l���"4OKò%d-�:�T\.����W����Х�@Z� +Y=��Y_�G�t,��s[ns�&�/��46�,��كV�9-��"#Y�"'o;���aˍ��h6��J��)d��5�t����,�a�ìַa���Fh��@����_z��c�m�ܸ�;�4��1= +� +�,HEe�\Vz��Q�������f3ȅ�z]c{�O��}���݃��q*�������v�n1��qւЇ�,��<�*��L�U|2|�h6�Ք�M��@%����D�;� +�6P����3�ۗ//��,�\�l�w=�~��;Ql���0���Q�K�%���TE���'��c���LӲ�1$��uL е�G�2���hd��<u�h����6j��Ip�rr�z��G5�Vo4��7��wȊ0�'��I��0,RY//X=g2�����_?�*Iڥ�W��nwzq���d17��/*�ߏ[0���f{�]�"A +��Q���q$Ne&鲨���"C�k���=-S5'J�֭F�:�4���\����?�T�,7ך��N�1�@v�耜Oa�Q� +��T#���>� +����/4oaR
���h�;p��qW�]�O�xC�Z�[M��ootg�S������Cmچ�`�rK�6;��~@�1�]b���Hjn~U�?�1o��<���7�/�T*%n��Lw@A�Q� �|�즜B�t�%%J���r.bV�6S%�N� L�i�֓����,����j(���_ f���&Ψ��I�r��\U�.���ه�v�æR,``��ِiR����b�&?-P�Ӕ�����hSݞ�݀Y�k��>��`+� +�e��p��%|y�lS;�T�=h9�j�c���})?����j0��j&�R*���>�;N�|�
@��Y�9����z�����L�fӵr��!�Z��l5�(N��}ϓ�&C�$;�1�3?���&'5:.���߱7`�wA�yo�v"���O�nb�2��1�,� +�b�U��Tz�*9nW� +J��x0�q��^/v�"�*j�<
��t��Ehb1�vk���.��+ +d�aL)� +�cz�ٞ;:Ph�A�y����\��j���W�䰲�YFQ�C��ܡ�������js9F��0=|�!�/��-��+5N�s�z�ES�6s��Բ{�T0��h��Z +k� +�z����4�h�'�Xi��?l�ߓ���J�)Y���2j� s�i�-\{Ý&��b��ČsZ܁�����0�"���*�`�_3��_���zL8ʝmX�}��[ �@��u�t��ol4Z����i���)d�^�>N�'�?CJ��(o2��c�!v��pn���Cy��[lZ&S��팝7=y���G��yb+2��a 1hh��a���3H9[�T���t�K���=v4v=0
6�#:�Z�YC曲q�O���z�^+� +M�&��{Y\S�X?�?jj�$r��8��tq`�S�������.��{�_��-�`D��3�_"��ԙ��6�)�� +TE�23SY%W��3�E\� +b�c��?i\��O��T�����;9���ф܋2��o� +'��̙]�#<����O-D� =#��p�^�N�x_�حpi>g�*�h�� +;�bA���mr�'��-p᭑G��&�$�P5���c����~ +�`3j!������R2@����������3 +Va�"���~��JV���5�o�V��FZF&
#�� fh�k��cݧ�|j�[�[����q����=���� �0�Z���NJ��RMS��7l }L�M?���'0�u��{oөظ
���[%lB�ʈ�C�t +T�f�h\��x����FcԹ�KU�^�1d;���$\���8R'7��mɝ��Z`3�?Q��ƛ
.�[��ȀZ������C��'Xe +�0�ʯo����!$� + +��{�R�t9.Kıܬ�M
A���]���\I`��S��2�?g����ޑ�g������m���
� +$藚�mˎ�l���e�\�ij��܌8K�3O�?�I.,YgGD�?�
�iZ�.���"#�Y��dQ��¼�:.��ژ�o:R*e��L-s�=!n3�Z� ]F�?n��7l%[7R�9��/{�n�.��J�ڷ FC�Pxs��ug3-��~��p<�؉C���>��7^�{��o���O?R�u��c.��O?u��+���?&F��\]<ql���ҿ��?�՟��_��ڕ^�i��{����Ͻ��M�Yl��6��2��Ɲ�$�dW[+v�#
�QYF��p��C3�:�F��&��2D#�v�fp;i�yg{b��[�C��t{4&5'J��G`�R���V��Q����� +���'䦘 +U� +� �(��9�z+L}#�M3G�0&���M=d�ʃz�zM����]pn�dp�=�}�G~�O�4*�Nz(������O�;����T� +'a�{�#��%@!��@X�ш�$]G�~ٱ���G�vq��.ǧ!i���/k������*�Ք�! �A*��*�H�A^g�O �BQ��D!2uU
�Fb8�uR�[�����t����������;���~k����3r@ +�b�
���yC��}i&:�������{J��Y�\6�*���+��Uk��Z1k����qd +e� ��x�ј~�R�o���S�_"�'>�Ǐ>�n��o`�'�9@l9Ȁ��~���Q��q�8n���Ⳃ�%?y����`{��k_=��_���֑]3�;k�1�mo���
��ZB�B�4���ǰDA�����@aCX�2�ɀ���*��ߥ�9� ��r5Z��Q��ےb������f��T�A ��!5��l��ĵ���{��&q���)�{���%J`��&����kӫ��M7S�]m����k�b<�+~���?�����������7�h
���O���뻸7�vW^k3o��jP��>˕�s�?���K)���q��mI% � J�t8, +t:�n`� +\W���%��6�0��o�@��B���ӥ#Scԩ�,2̌��W<�c"�g����^&�!��c_!�pz.: )��dz��~�ƀ +�Y���x���^���D�1[
��/�Ӵ\8��-������G>�{ʂ�����Ju���h�
&�[o�J�I3W**�i�%�^z������<q��c'?����ܑ#sG�������k�u��.hqs���Þ,�;wn�վ|���GNz��K_�2|_�c8V��k��˴z��_Z��w�4�dh�� *�N�ޓ����FA�֕J�ɲ��i6��UM�V��i8���&̙YC.�%a�����/��h��NC�'�*���q��h���~n���r�.D!�Hsk< +.u�
��j�jgc0�@���z�r(����aN2u���؍I��a�A���j��H&��"��u��re`��y�
�h� ���%��q�g/�.)d<�L�Ӓ]3���}b��-���=Rz���*Q�z,�DfSr.a�%�(&��Y�Rb��0�:����W�0P'��0�1.�GŽ`��o��`aµ�f:;l���6�~f3nO�_C�D[�4䮨��{�4
X]�_����:��cNL�0~��]��9a�>u�E��թJ�.Z�`��֘�ϱ +p̥o��l�no_�4}�����[ñ�Fc���A���JBy���i�,�U����:9G� +w�)��?���SJ�rC�k���e +#y�E0��N��Oä\�.�YB����+@,����ť��@�U�.�N]#�B�0�^�����rv�/�;P4��������vWq�mv4��3^w�Q�1�>��B$�?�/R�I�p�ǰ�+��6A����R�{|�#�s�0�?�q<9�Oow��D����:���7�w�ߺ0�Ȝz#��5�b��LrɌ�s���ѿ�" +�A��Z������2x�<X�0���jV�
��
_s��$�zl\� +I1-��{�D�����������g] +V��k{�������fR8���,�Cٞm�LҮ��ހTPe�� +�ad�?�o��d:{X��z��_�C���:2�Z���cjr�Kg� +|ף}dH�HA7 +�t��"�e�����2̻ +� +��E�ò̸��x@��� +�f2L��}��)�W4��E���� �� +z�>I����{�g&gj&-�dگ��]ƛ���b*�c�q�q���y�yH4ѣ04�`QhؐG�(y��K���wlb3�B-�$�紀P�CbJ����^��������p�S�m ���EX�#80&�j8F[�� +$綶B.���UCpNDg�푬�DCJ��t +⠕Me�ö�-�q�Uh�q�cA�#/$���/=�b�>�$E�� ��TY5,��JHѬ�i�Tڈ�<{�#L���N�ՙ_8�L��'n���z����4��`pN"��oc6%Tȁ��!�y��F�}��o�JӤZ�T�eHJ�2��|�����L�" ]�e�Q�[���Q6M�����ө���XAD�/,.�e|�p����Rтw��!J��;���"��Xx��K^��PAN����v�?c[��nѦ[��'������CO>��/ށKg�`����~�,� +�PS�Y���z-]*C��\��3ɡ{�PX��u�r�3�����ѭ��`ͫ 6�(,�1g���'A�x�"r��aŗ�˒c�^�� +dVe��^�V�d��u +��#���+�7ֻ= +��h�M/�'P���Hou�CVTp@#:V�J����y}��Y���bٲ�'�+k�)gbޤly/�*d�~.�� RM��nM��rY��5S��:�F�
,���-N��n)�:
1�Ħ��,F��eA�G#��|8�bo���fǥo�r�b�@�6��� pH����<�N�}Fcy���xN�4����<�Ч��2:��;�(��e3z�nP�_J��^X*���K��hu��� T��,�:sܽ��8�+�Wz���p7Zl�nu@���6\^��b}v�>��{�^)�Kv6��9
��y9�2�_��ݔ��o&�x�4E[ ��c4i*|lp7G� -<U��L��6Ȭ��J�-,36�W������=XmZZ�(Ls�h���K�G�.���f��a +~��3�_�x�ُ}8�չ=3'��iB����Z���W�x���o�� +C�Hpo/� +�\js���9#B& +�)[F���d)�fZ��-v��tz�?�v;r#�Z/\�(e��'?V%��F6��,[o�B����+��x�V�E���6V�q[`5[X����c�=C�㘶�F +<����@�oϦ�Z�n��s��I`"zzv�p�S���DIR=x���Ð�Ĵ(p����1d�~6@��<��,�zmܹ\��yU�H��&0MD����U��X�]'����OR��O���;���f~�\*�=�cz�7�!��(~
Z�v���Zy�q��Cq"��*���7��;h��X[�vۡ�����|�3�����Wk�)8���lt����.b?�ӧ���P�����Jc����f��g�D�e��$&e1�mt��������{��шK|�iӏj����ѳ�,��C�j(O���k?X:���/_�����M��ġ��8}���r�ۻ���҅�/}�z���vk��ʗ���'��Q��E�L�� -
'�YV ����3���03:�����eO� �T[Gw˷FY���h�n�}G��I_:g(e;�����-�ae6���j��G�A躛��NkLۖ���0��,S��>i�;�1���>m�M?JҊ�}f�*�����eV�;����܉�G�#�Sbf疐���f�|{��v�4��e/L��<Z���#-~�DWH,�����6{���Ld: +C|��[�� +�v
˶���״H6�D+K�X:�ʐ#�2q7A��r!�i����5i�a� ̠u������Y�ly�$>d���� +M�*����^�X`����ʬ�Y���4pd�_6�l�I��霯��t�:]���NgS�I&�sLD��Y����
�`��pK/k�8&��f��>��='4ʘ +��.�u�}��O�uؖqZ��1 +�:�.����6�{�������2����,�;L�� �?�CN�a���x^#�Ǘy�Y�F�&�����L뎃����Z\#ɬj�#M��yɍ���w��>�j�:���x�7��LY\}�#�iΆ;�M����W�.�Q���YNK�*���p?~o\��]H��8yi�mgr������6�`����Cӕ�r{�S��lx��iS�簳��~�]�4�6����� +H��r�w➬�&g#.�7}� +� +�b���[� R���?�(4o.YI +�V���N��6���_0����z>��^���g� + +�@�F�(n/;)� +�B++2@R��(U�.�rϙ=�)5]� ���|-d̯9��R`k��F���kאָ��H���Ώ<��� +%�x����5 +��/� +�Y�0�ctM�-��y����п��8� +ڐzh.���B�gw��w?�7Fu���6P��;۽��W�s��s43����(���z���^��W��d +ֆ��0@(��0k�}
uԺLdjJ@�a�}i.`ʵI�q��6~�"MrB��y��Ņ٢�56Xm�&�����j��9I���]L�4#1#bԻG���\,T�NT"l�U��%as�{"4A1��j ++؉�E�M�˟��k�q;�� ����z���+�x��NI~�4M���Ԧ�~ܟ�tb�����W���/����Go�Mt߯~������?���}�ogO����Ͻf&�4��r>8OB$�5�L&j�V��u�f13��5�FLB��W��W�s����� ����]�~�Tm���,9#r:7��Ӧ6��ln;ͮj۲�����7�[Ow�u�c*�s��)Q��**�~�;��g`�O�r���)�3�zz, +*�^�T.Y��A�2�����|���v��/^��k��'�\D���u������_<���@�<����*�'Z.��W�� +����:Zѥ��<n�p�.�C� +�Qqǎ�8v��t�� F +�� +���hJ��,c��C� +�d�C)Rݗ��X�:�#8ң������g[Au?�_����s�D����`'1p�-���N����tX�u3q��#��Q�Nw@ֱ�$�iT���t4�6�I�} +����b`a�?簨���ܞQ��������E#��3⤦4O�e���u +2�c\_ǂ��\���d�r��ї��F8�\&)&h��J`Z��=̊*9;Uѥl,��l�A��`D��b@��0����R`�u5��r��[����ogx�( +G�;e*d +�?���^]�!v�01�~o��:<"w�o3I���#Dr�+�L��[s�߿>۸�`$3@�J�Rcf
���19&��6`;���Kl��3.<�� ũRw\�ڼ��ϟ9;�2�&��N!��gV3��8�N{�O�R��~+�q�'<�'��COx�X������a�P��!���8� +ڜ��*�� +����w��7Q� �а�P�@�Q%��!B�����K���s�aB��gZ��f0�����[�n�a�]����?��k����r�fd/s��*�dX�r������V���;F�?�Cٱ����KW+;PN[�]�axs^����{���������ѥ�:ˀ���ʽ龷Z[�t4!%��y&پ<�Cץ�c����4����h=ԛ-vk�%9wa�d�l
�t�l����[� +����jz�/O kb�����=g�{
7F��-NU��4mjjR�i����R�����D
�jD�������)G�-bL+/!V#����& �v�[�7��� +���0<������[��/�x3�y��8 ����������w��[��lC�L���l�����z�4j_!@^B�-"jc &u!v�0GJ����������q�F +ݟ�R�K�x1X�Y���w�D��B�g�d�L2F��./~ +�$�X�d@煕Z�F�s�&C��aۙ,���}XA��x�< +� +�rO6��ա�F���9�JK1�DdH�m�, +��Lb�*��!��Ǣ�f�=洞�a�kE��J�:�L9U���U����ak�;��9���q�Q/C���>���bB"��9i�mKzl�����q�G#�G�|k1Ay�2 +.υAT�ZB+��
7�a��U��:� +�%�e��#�`<x;�jy6�� +l���r���{���4�x�M���T�MA��]yyڋ�T� �����o'(�HI��~��s�]�1�0�t��! +�pb%����;\�`P�4���Lݎ"���aX��[Lo��'>1�:Dp��{4��97����ƪ���gW>nU���R�������#`���t�훍8? +���'��V�-HO +�|Gzun�+j���m���cZ0�b���T")zj�P+�w���N,�?|8��S8Q���E�?�OQ�ߐ^y�(�Ե�^ZO�x�M����E����/��D�w�@����Z`�7Z���~� +�G��4�$wఽ��ߞ���n +-h�3� ��P�$@k�XV㟞*^%3�!��e�<WPjN7�=�96 +- +��
��$I�iz?��t��OL�q��$�)�I��#8#�g1`)��@�xh�}�xI�#b�����C��P�FF^ +`��]4
����IeL])cES��`�w%��V<a���}� +6�H�os���'��S��ou�?u�=-�`'�`�A�+&�\��g"���K%ო��g;�>��cVk:���U;�#n��'�[o�77�Ѱ�h
l:5�����0E��CL ��F|�I�n�y|>F��\��m=s�֤�f�3�ĮS�L n�#[z!�a�:��)�v� +ı9��dV>��9b'%��D.�>�I:�0N�ܲ��l���,/�d�K�3/�)fnr��߃e +�tvr�S��(���y�?W�q���1�*�a�H䇰+R]q-� +&�������)�}���1SM4W ~���py�iq�9�$dn���a����Y������e�7�d{1U��K�T��R)��������N��'u �qg�qG����&ìk�f��W����%qƋlX/l�
�e�u��Q� Ӗ-��?c�pu:�[?�Zng�]�l�5G�軎p&�2��50��؊� �G"y �}̉r�b��x1��^����1���ȱ�Ob��~k��i��[���<��3�� +T3�� 5dʿ�b��RjV.����?���X-m�QY���ߕ>����������ٷ�V��{A�V`9�G^g�b��l��߶=fn�B��F4�dͮ��e6+�T,-@T��y���͵�^�mݟ�
�b��
6�a�:��L Xa��h��gp��:i�r�]���� +��Ѿ` Qᶅg�n}Xp��`6�?�K�u8�b +g&VW$د*GA4�0F�5�k�?e� +V�Qm�ӽ��&-w��n�2#C��!1��)8����$(
�! +�ߖ[*�[�R���N)�`�z�����q���ۯ~��_��o}��w?sA����U���˿��t0D�$@����g?�?�
���$����v +�u���c��X�T\Eĵl�觴�I�k7A�w�&�X��J��Q:
H��d+ޗ�
`�0U����k[���p�K�(��k�»��?�+��5fe�)ӡc�rs]�����[">��+)�+r��I)�4��.?�LeG 1��9�K���,��4GE����>�r� �y����Q��!o��;e���C��3E_��S�_<��ʝ�W�P�w݉W�Ժ�����������ߠur��%�?l��ַDn2����(7V���O�^�91���N0ߚg� +,��s��U�� ++�-[��6;����@�������.�:�m|�~��j��"��w���b�=ur��<�. +����`@=���e�U�[�3A�;�T������ku���Ao=\��#�U��<�2��:0��ضA�ƛ�E�]���Ouo_�����7��C�d�Uk��!�������6�t$�Ȏ�;w2�!������{1ҧ���$��q��'���߬6�I��h+�
�c=c�d6���h�uw���a + ����.w��@! �s��Beر�`��p +��p9k˰�� +
���qј�>pF�#��H�TR�*'s�,�Cd��]z�����يe�<�����������a;�
�;��Y ş�x�ʥWcqީށ���0�����{�3/�!dq�>�D6�ȝ����vΞuN�D��g���
T��S���b�9(��M�ۙ�E�M�c��nU�SR)v�KǺ�=Er��s��`7nV�Wo��ķ��g�[<菐<|����ν��5E�p�z�^�>���aoi� +�蠬Mg;�ҽ���C�$�J�3i�2uF9?]7� +�Rƛ�,ؒ�q%~ˍ���»a���N4�`g�(i�7��$�s�f�_�݆��Yq�7����6E���%Z�'�!�/�[K�䢷���J���u}X��DrF�69�3�;`��a5\�\{Ƌ�BW�8�6Y +��p +۩����$�k3�x?�m�>e����������\@!���(d �\����N���f�{�D9Q�����2�)�5W���H������)���nN2 +�x�0)!~t�]�(Z�(ΰ�ʐ���d� ��u�1���ݚIL���DzX18��5�����k,�����ј��j��2���*�@t(L�hS�"h��t|��Ԝ�EL�3�@# +b�XKTIT�k����%�<`J`d� �#�
��������S˃�� +����ߠ��(���R�q�W���^�s���I*�����,WH�b%�|�X+�H�m�4����g�w��q� +��H-�X� �\�ʰ=��ɐ���3�'�;�(����G������[�~��u�#�� +�n#���B�m>J��܆}��^>
�n�r������L ��"������hg}�p��=�0-�1M�����*@PS��Rk�s�]��
5�/���N��1)����s�yxܘk:Fd��1'��.� +#��0��5%^�a�j�i� }��&vզ�?��j؇�9$BE+q"j�l��D�X�J��&��{
��3d�̝(E&��$���H���"I�D�a��-ˀ�| ��,�4JQ��v�R�$?(�L�Ϟݘ�|P);�IJڃ� iԪȴ����h�[*��0�dٲ�s�4���?��k��;bz�gb�Ӄ�JQg]C�K,r�JQ籑�e��<���~��˯�tw��4\�s"��Hd�K��)�6e!��gM��f"и��ͅy>'Ћ�9�N�s���,E�����a��Q��`_��3'z��m�<�d�88��� ��FC4�������!�q���b������wD��Q
����O��p����M/I2���J�iG���F#Ń&��� +�0�pe +,�U1"��X���-�K����aUޝke��2NfF��؏"������h֧Li���W�h'�-m�rɒlZ$?�t� +�$uTj�&T���O5�����1^\n
�.�on��L�y���xk
E����T���"Ej;i�P���Yg���5� +��)�ʰ2�{�f�Y� +�t��q %4�kB3@1��α�α���: � +/P�-�5ɮm� ���5�Ar��L��G��0;���R�.�+8�@�x
�j`d��a�D8��,��e�ۊ�{
�I���I�c�s�f�Ҹ��DÐy�E���ͣF +���L�bȲ��b�B˱,š��-�Y(F�@�\�� ݟ�z
K�lE��V�S�
���� �RRX +5j �GO>�<��q<�,�������a��-:��I���F 2/��4�����#0u����T)�ꄣ�F+�ۥ`)B@����$��F�Z3�J��<3.�>��{
I�Q�p�6y�O.�?��u���x4�;/['�#*���#f*r0�F�;���𑃥$� +�A +핡ߞ�EC ����g&kX���2�Z9�=�U��j�Qw��ן]��!��7B�l�Z�bٜ�X�lRzYU��.� 3�� +�j��u!��,@Z��G�&�����0D,qH<�֟R��q�單S���$
����.�g^X�����K�.��g�ƿI2Ƥ"MmB��#�[S�c�7�~���~�k|_��9���/��j�T�: ���p�[o���:�s
�����ycV���'�z��7@��a�2�-�4�R}`�ʹ����l��bG��.��p_��C��]����wN�ۍ��p�W@�U�d��8!� �N)�����md�t���/_�e`Z�D�f{I�^+\��Ω�lD*
T(X�G�t��G7�4�. ��2[C"�:�"�W�$I��X + +��e�=�B�Q������K�sȂD.��fcv$'��[�P����A�d��9�Wp�Z��3�"-���7m���Y�0����%4�,�~���eUP��� :TL�2�] �����&���4��s�5y�5������G����rgI��6x6������tIA����d��(���͍���i�⻭% +>�z�3ޛ*���B���I���/�dtm��ˤ�x��) +�,�e����� [d1���D�u��S5�;��]s�b�̹�|���hoaDOn?��r�ϭ���淯����|��#,�2�)
]&J�4M���$��>oc�F�}���l�۽��zk�Ŝ��V�O�X�~��>A�Ϫ �n!�x�S�R2I�3��p<|�tD/\8��_=��0!��v) ��ؙU��0����,<��\"#��<3aL��������r�O���!�(�0����PWs��ke�Tt3!&��{�!b�Z�=���BH>�f����a��8æp���@4旝ی����{���^��gR�\�{��U�� n?��� +�Ɖb Q�ئ�Z1�ũ��_[���](�t�lt� +!!I��m{Be��\[��<�ܻ��]%�^Cyc�9��6�I�F�z��m��`N���� +&*�����S�4���gy�G�[-�B�>,|ݻ����z?+�M�g������{�/h��4O`���� +ד�W%�(������U7.��Y�R@�hs���p����E �k腠�#�ij\��2��Y +{23@x
D��E|�k�ߟ�sW�#�U�}�����:5�s��p���q�qn_�QrK6�նZҞ#�!5<VqB���n��ť��ƙ�^�}d +�Y�o��?Jk�b +�'q��F������;��9~�6��~��
�K�j�Q�8�|���Ơ��<�+�a_N1x�)���c�؆mL�q��ŮV�����='��r���h�Փ���u1ޏkh_1�g���#��1M̤4с2�z$섒��o��SYd:3���;o;3���T#���X۵�H�0,Kd��@43c���L:3a\����������Ğ�ꪩ��nu���i��T�4���Ғ��I+�w�u�aܝ�K�l� �!�;��� +��Έ&(��W�&jFЩv�V?s���9U=8���|0*:ώ + +�c�̀���6�>0!;�D� ��ew��?��4"K��e�������ż�Q˙�;�ő�>K�&?���]����_����O��E����ݏ?���|+ +�po?:9���2; +�����*��}����"F���w����S�w�]����oo�8��\���߿��l�e���O?��\��Q��
D�����>������X�������sVY�d놔&9S����NcE�|��q��Ǘ��f=�%�<$&��j�"�M�(#>y{����1e:N�a i)7s�A^#���*���PƉ�:�7YO5 +�3)]�#I�2�&�}=��б,<�)�Q�aH�e��9XT��v��+�x�ni��3� +D�h8������jg*�i&d��A���+��.�h@��kv\~hk~����dgU<|\�3Ǩ����_*k��o����xČ�#�!z�Z�5��
w�5��,��@
�����_�ό>�ɏ��N ����)�vz����v��0��ݠq�5�� +�_� p�@���u:��ɣX-T�����G��L���ߏ3�r.%���7d�5[C��������m?� |8W= ��;�Ղh��7��y�Q�^�3���v��ތ�E� ++����LA�OȎ1�h��Dq0p�$�.��{���Ճ�&���Վ?����+����5���Ãf�*{�ܻ����,[�R�/�a����Fc +[���+kO,D�A��W���G���xtm��
�l�����*ӆ:���� +�OBV��R�jLy'�z���w�6@
T?�gHA^���2�2:H]7� 3W���zX*rܺ��_�<�'Y�[�ml2Ctr��A��}���l�z�������:�� �a� ��es��,�cP +��T=K�t�����b������u�ß� +�K^YT���*04��-��"Uf'��� +d��Y��fe��p�L3��q�=��rF�A�{�68�)m؛+�/��G�M��{� ���<�`p_Ct��\�[,9�~��H�S���W?z�]�_`�{���:��Vc: +$�:
���-r�����scAIhi�dzm�0��w��kp�2�@?�J�DU%pO`���R�O��a����"����6P`w2��Xo�e��W?�|�+w>�~�{���6lzp�4��n�7����}^V���J����ޙ'����~Y>�z2K��Z�=��� y�h>d�db�u����E�$���Ox���SJ=��$]q +,��v1L8���N&��p�>]�CY��\Z��/��&`�2�[:K�X�:��ȭ'L�-�C-#�@��ʺ������Ɛ�md +B$��p_�V-�x��a�t_��ºf��pXTh�A�E{s�L��C+6�����R�$Zm{P�xs�G�j�iS�/hJ�B��F��d�E��X!��92q��^Et�ح������ +aT0���`�����D��N<�0����r������Ġ�Xm��) t3O +�ۦ�e3�G��E�Y�3&!nX��Mx�E�9�[��7����=n<yL;O��JsD�R �|� ���k`��&"�L�����w�r��-��30�D<��gL�h�:\Xu�+��^m���jkF]��������Owoomm<s>�����̨��{�����+fܰ1D6(�(2��RH�P#��ȑ���2seM��C +5�龌E���n��p?�οx�O��|��{{ ��R�)����(��5�NQ0J��YF!�-X�*�e/�zpO�{0~����a~�&`@���`KE�dV�[k�<G����*+�� +�H�����D�/����N����t�%�T��&�OLa��(�Y`��b�!�4fa�ܚ�������NS�qgd�l�>�<w�??�ݹ�������w֧ +ʺ�f�/ȱ���N����<Al�s�$�Jc0$Ms�@���oU��� �����tSĩ��m��Vz�O��{����`��^ױ=1�G)5l%GII\^a��Ɛ�gK�r[�t�>L=�I�g]�a��~��w���I����]��vV��(OP�1�Ȩg� +<�<���X�XQ��\h 5u����I�9t���(��T\&�.�b���J�����S�����T�n����CR��g�YAu'6�P+�%��6/ ���#cG��7�L~Z�.S�K�W2��l��(rP��]'eQ���\��т��?d�\��� �����H�/lȠGķ�}������Qg�J�*����K[~�6���MpT�jڳ�P�FmVM�pX����U_��7��W�L��FB��W9�1�ł���3���0FF 5�*{�\in�-���2�u��螼f���LĹ5�>h���F1y�~8�3tO���@v��g˙S���x+�6ł]��Z*��q��N�/y����X>���)@�`ˈ6�۲$�I��(P��N�Y�p^�1�S�(�p��5��_Q�GsA$B�B0y�iD�G�y\y��gh��B���<:sN��Ԧ�:�)�a@
|��мCE@��3�,�֒v8��Wc�0N�W�
�e�4���]�$�0e%sJ�t���_{��ӷ��/�zژ���*�'�y +t`�1X�A�X.��@e|��,����*������1�̌oc���B��Ѡ������� �ci��'�YEIUٱ���.\�2z�Z�e� +>8kM]H����E�(iP�����1�H*�����g�r�X��3 ���nm��"� ��P �j*X�X
�iư1��\�� +6�a��Ѐ�)��hbS#]!i��5K�$2�����q��;f�qg;�[����u�1qpT�!�KPh��E��R��E1g!b]:
�Yɻj�lpG��=���WE��S�UZ�X�W@��9�}�a�;��z�r�[���\T +x��Փ8Ί �O2 lۤ#�ᢝF;���u/[JѠ;u�4ɦ��lFF�f�T�[m�̣4#B +&G,��ܘ�\'",5� �^� ����86u�cUAA��4aQ�40���a�9��h� +�B��I��o'��>}���s0����#�g8E�8[e�r�x~�^�����k����aLBp8�Y�N#)i��R-�fq:�C.����Ȱj9���
�@�N�k�����=$�J�$Y
�D��s�E9wޝ�ȕ:+{s��e[�QhQM~n�J����4���h8�":�� ܆�@������l>y�s�
Qnij�y +F���i:(s�$֚��WUMU�`�2��i0FR�c[�OH���K�!�ab�5�&�jH7ՑR"�0I���,��7�\2u�1)�GeuX�����?;=|��r2
C���[���ѽ���p�~���~ +A�o�����������%m��!�N"Ц�� �4L�=ƕ���A���R��dž*b�I�"8u��k˄6Pu���c,��`�'���!B�$��N��J����s�p�ـR)K��)�?�n���į����v�e)�m����ÒzvV��ve5C<y���]\o�͍� +��P�:^Ce��U�S��F�K�E?�(�o���.Y{��S�z6�X�.�лV���$5iɨ�`�L����tٔ��Q�����J���o�Hf��#�����B�dd�df��yn���a�^�4-`�5<�eZ%��z����u���&�C"��gͭ�)�~aϕ�=K��c���f���cqs�(1�r��>�^R���Z% zx�l�����=�g�y�$�R�m�ta�˦�x�v�@(*� �p@�j'�9�<9�5t �P�D�P +�w�qe)���W�ʨ��hL�e��$.
��8e���us��e�qF� +��������m���~xC@�|�J�vtҍj�;ë����3�?{��~�u +sk0sA�p˦�%�����/D�)���� +
M��3�^��NE +�G��at@.}&ՀV6��p<��=��+��Ye ��[�J�,_y������KV0��V�=��_��@��e�ёe�tB*�7&����G�A�U�+�kBE��NG�>Q�!����֔�T���[p�W�H!x�U��Ø!�P���Vb���XŮ�,S�:�5ә�����G`��~��9V�30�Ads��O����A�d݊/8������ =��lɢ>1�Ap�զ��e +���_�ed� �`�㗬�8;��rwbPo��?�"���_V�k�n �Z + +�Q0��l7��( +��J���|�4���\��fcFӣ�#��lj�6�l�5�q���k)j�yޤ.�&�ˀ ChRbMg �/�v���۷�կ����;�tgt�J��$��Y�y*j��sWD&�p�ww�~�|%�uN��g_t]��`=$������)���?Leg�������U]�FΊ��S��?�Oo��O��������7�[�y�x����|�e{�;[[���I��������ș�b�!z �P���9(y�\����6�0! �N)z��c_9F6���-(]l�n�Q�Y�U��#�����}{
{j~������ؑ��E��F�݂�p���V�ep{�0i�Z\�����x�/�_�r��+��Je���_�;�k���N9�-Y �+���ʵ�����l���mb���-���nom�s��ۧ�ό��g*�3�y�g.b�XY�NuKj,�Փa'Qz[7c�$+�8�'�8�6��g�)�q!�[�ڣ�a����(:�ɉa���& ��ڧ�L)�l|`�GR��&+2������{O�:M�w��4)��lxI��"�h�"�d�F\>R�ϣd6Ǟ�5Ǭ�t�<1,��I�Q�՝(�s�ڹe� +��'�a�c�� +�`�3 +Ũ�k�1��L�1I��(L]�D�3��?��jD8�d�8+��t +�#�Jl��\/�ꪰBP9;�s���ܿ��6���ŗ_����W�Q�V7I��Ȱ��`�r��j��=�KW_����q������ᣠ�D+|Toخ̳�����)L�S3WZ5�#�(c�,%���Ʀ�`V+~A`�Ob#T�cl;�����T`_�l@�g��8b�d�_RB�u��WS���Ҹ(��1��R7D�;`gH���#Ca��լ����}�QlEl�͍��O�,�^a$��L�@5��$yj�%o�S����1�� � +���y kd������K��!�JB�}���0;sK��h|�rr�(0-���Z��eap9<
ot�ޥ��/k5��T�j��L�����U�5���е'���A�>�Ұ���3hPJb��w�O봟e��7���x�n�@��GEKNk4�I�s�a��7
Ǫ� +M%���ns�_J�HseU��A��23�;�fS9Q���lG�V4 �0���bq&K��kM�A�%p%��L��< �x +�Y�'��ʦ!sm�FnQ�9����G����8ä�%Е-��P[�� +��_�� �d���$(��Ɂ�,�� +��RDd�kH�5�N�W7Y�@:`I�KQ�T��Q.�We���J�2Q��b0�zݮ+!�.�#*�z\p]���o��@������Y�&=���MPg*DfJ��uKn�,��v&?�d����,���R���q[�؊����=������Ŭ]��p@r��r]��NA�$�����b0�E��M�h +�_r�i�9e���C��F +��<g +�@� + +8m� +5�?�<��z���v]ߋP� +��y�ũ;��3YasJ��B�[9Z���r�HU�|��#���?�ƚ)y�b⚛�-�� kyM͠rm��:/p��2.(�:���/G����>"��)� +/,Z���D&�)��\ElQ��<���':�~S���C����AC�̬��^���������ᐻ�0T::���Z��K�@Yk� +f;3d���EPw���� +"�����/!� :����`������Ƅ�-�
�R$ˤ�Z��"ч��a�<�k�B��^��M�X�ml.Б7�l5�D���b�����h�_�����F��B㬃J:��,e��I���T����aw����}�F&<$S��0\�3;w������&�t��N��ʐ��}��\ꩲ�%!�f�s�:�Z��YZjD&C +�����+���}�����W^�$8�x�x#��2�� +�����La�Xh+�hx�d�sn���@xbAa���a�� +�<� +N�b��K�r�,Wm�Jx���1��.D��S���"eO�{�����
0V +���j��w��E�َRd>�G让�j��(/E|b�,��&B�Ϣ���̗ +�7�����ߜ�����C���s�l[킥�@G�r,�F�7-j�_LաF�.�2��q�D�?Ɖ圱�;�K[�2�,������3cj�
�B���>o^Ӌ�z�Z���t�J���D� 0 ��?ɼ�-�jA�d��sЍ�H���ƊLk���O�Kv>���Ewsp拗9�s|k7��U���sz�?�3R^í;�3����p���;�_%"��|tu�?�a�v����ZsF�����I��f�l�����I<�e?> +a��d#'@��]ϲ�ͦ��;��Q�>�8nJ�pe��7�ސ� +T ��?4W��/y�C�#��� �&��i���ܽ}���+s�il����|�gq�.q�ɑ��t�Tm +ޚ��,�*��t�������Ģ �� +�V0�EE�l�5��O���
;>�c�� +)n�&�y���±�g� 2�̹��uP +d"�qh��ogEos����ֻ�jv:�����k/�А��O6Kl�J��^'�n����M!� � +������׳s_<���E������;���O�څS���a~� (�BQ��Y�� ��G7n�L�gUm�3T;_Ϧ1�Zk��qO�$ٽi��é�0�&!��1ۆ�b�=nt��Os>�=��C/mo�]��Y�]�f�p$�b}���w�;ͤI\$���h�0I�܈���8J�SD�1+02K� p�`���1R�3�q.7��$-w�5�w��d (��䚼`�ߊ�*6��b"��<�[H��k�I� +��(����O昣�|`�J#�r6��V;s�j$��s"\ت>6�� ��]&�Q'��y*����=�@U3�}�s��=���J(�����!���*ɡ4'�
�`&;�K�cXr�� ���(rVqV�*�6rW]���k�m�K +����wRe�#�SAw�>Jq)�i +�.����Co�پ� ��z��FEu�7N@v�A���i��$���&�P>#n�:n��T�������|�ͭ��ßW_~e���x����܃���0�Íe�`!��;8�o�=,T��?���{��|�:��Ԩ��fj�yӫREJ]f�7���� g[���Do�œ�BZ���g�?!A���*\�! +o
�����}b� +>����ڐ2ס�)6����l�H��O���R��iFI�x9$�خ/�.j��N +��+���X@Q���� O)�r�H� +ap�t]�>��(�W>�F2ȧ:�=�>����r� {ϥ�R�?�X10H�B(�4��z��z�Q� ��W� /Ĵ4�h�� �H3�(��b�Yy,�5-0H��sW�� +����p,0.���Z-�$�O1�!��B0IFi�svw�]o!�99��ZhZxS> +ԀMO%�2�v�:� +�%F2<S��5 Q����d/N�Wh��q����B}�+r�2�~�70����?��}�����ޝ�n]|�*�}6�a�����;�M�jT���i�j���e�� ��rKs��aZv^�[V�|���R��{��ͅ|��Q�jK�j�u���IT7������%�g:����So���Fy�+G?���d���W3@|�EM��G�ſ�_�x��o���Σ0�����iե��U;�;���8�-eBykm�p�y� /��K�P͜q�ROWN���ڋ�0�N�'�� +����MYS���y�I����<���B�h�^�:aD"�h����IN�vz\�Emڳ��#���e��/�>o�}��3��i���D[<�uH���=(" +)�5,���]��:��+�q���F>��6~\&��uJ�*�ҺgJfY��r$���BTrH�~�רCA+Az��!���ʦ�d#�f�����9�` ���dq�����p���Ar�x^�(��̆g�
Q-��P��m�f"�&�1�Ȩ� +�B2� +���r�( |k��,�=�v����l��p�����1���o��c䪵��4i��OU��K�X�m�j�E�"��Yq���ن�'��Wo���1'ìKޕ�q��f����-&��* �҇AJ���Q����&�����
x%� +��>{��[��: +��(7Rx��:@O6H��h+��A +#�HԠ����:;D����9XP +�lmգ��t���Z
� +�<6�p9�(m�: + +���F��[�1���>��<�I@��5�:L��SC���N� }r�Q�фe�����#|h�Ζ�?jB�c��蚳��`�l�F����H��c�C�3�p_�x3�+ؤ�f`Ab^��
Ƌ읗EI&ڬI�̉�VA�t��!�(�~ �5�Ò�r�_���G?y��ß߹���^{�i�g����L��ت�����zĶ0e
{i6�_��w�u�g[?���ͭ�ޖ�A�=�$�$���PL�&f����9;O��<sy&�7��Ç{�<���ĩw�=D�4�,j��Mg��0�5W�[�F���*�J�@ �i#ÎU�)f|c�[d=d�4�g�����8hX�Y1�sV=M����q2gĐ +�����Jܔ�pfQ�$ �[�V� + R*��X�[�@�sڗ��P ��xF�,QI-�6�縈��ú� +�8B`!�Y�!5������j��z0��� v튋Ecs�GT
7Q�ӟ��ՀgAz��%1���ʬ7t��@��qj-��>�a�
����lU���eP��|_�c�j +�-Q� 4-��ia�t��8w�
���<�-��QT {��E!H�g$ƀ�`MK��-���_ऺ���G��R���h��{�xw���B��<����|��J$��`T��@ًuf���o0�AŨx.�-T.T�U�D�IP<<#��tB1�(J.T7q�6�0���lQI��/_~��_Ր +f2�U��Q�h9�YH��F��ۃ=�bEK�,8`�քF[h�J��б��F�xgs��lw{ �E5�8���i��ˍB����C�xI��>bFc�p��ȱ��[5�"eHq�����z4�9�.q�*@���8bEX +�2*(�����z���Gݼ�i +���}��h��J���1�ъ.��ߑ�mr_�( +�l&ç�8 ��c?H}��I����u����#x�:���z�� +lj��a��2Dv{�Q�9u6 +����$&��FK�X84��Fι�t����g�0��295�]�HD:��[i��X$9����M?��
����Mc,��i!�^y���0�� +�$:�M��O�l�#��Zc�Z��k�LX� +�L�l�8�x9u���i�B�)���Џg�������Q��� �����X��Y�Wҽ��Q�����,���5`B���~���Z�Ĕ:��l`_b��%�'+��wzgg�H�c0����]���5c������w��̉��a +��p�7����x�-'� ���nZܮ�[ȵ��)�8{�q�� +wIYoSWaJ��E����̱6#�ؘm�%�A
�۸}�3��\�`k밻N�����jZ�Ow1cq/Y,��t��duIE?^����H/a��J}p�e6�����<%�~��Ό?��ơ�v��X^�(ڏo���V�ҿ���/�u�Lo����g��DÜ�,�H2~a��FtP�}E�n$�0����8J�����������z�"G˸�>N���E��lV' +��8�zf������:�Pն������Ն��P�b�%��'Zx��4#}�@�V�Ɵ�~�ፋ�u���� ��i��Ga�b�`·A3�I���p�������Agq�V��q� ���[w�I�b�o�}��U3�X�$��V���M�� +l��o`�"ՠb&�2�x��r��uIolQJ&E��?�i��D�)S� b��O7S�2���c5��Ix��:��kW�\�:���ݝݦBj��:;�=d�&�6��s?~�Ov/<
^wo]��3�:��ח��M��B���𔖃FJ���$5�����9J�1��z��WLNN�r��ݺc*�dQc�v�T�K����N�Õ�h8�G����w���K�W���L�6��變�{�n:�x�]�����B�$|�g�`� +�������F�~���y����-5Q"cZ���-t@�(B9d�}�E2�o�H�����`<�a�-PK��~S����m9Q�����.fEabl�8�g��)��
r���vi���UD��0�w�K��_�J�݂��5��Z�Ԃ���T��o=���5Ƿj���Js5)��հh,[@\���tf%�x�}��� +�nĎ&��*�v?�*a��Tp= +���E����B5�hpa&Y��ר3�H�Ƀ��>��+W��T�l4L�>H�d�|�
H���/b+�{6*�f�md�2W���e�A"y��z3��
��:� +��D]B���./�� ����{$HX�-r��
���}�P�SH�:�C��g�T�cJ�`���_��S���X��|��1�%!C�xQ��.�;I�x����+d +�6�v�d��,�0D7�<L��%��H��J�y�����Qos�AlF�.g +C���j6<�0�)�t:�$"�g�g�SE�,s��K��l6q��Φ"�r������O��NY��� +���Ϡu���oJ>�Kp��P�Ȼ��;7��G�������Iy)�&��[+"�`�ETN�a��6�$w1'�a�gE��u�!�
�4f
].�s�{�[-gN��&��DǮ�7�T��!�A��v` vr8�'#QC0����Y�{���I}ⴵ.�u'Or�E4j���V������6&�d?�Q�[�%9����ŨԘaa�"j���-@Zo��r��Vr��Ϊ�$���Jd$j����샞�g�~y�U�gЗk~��d��hL8[��;�'�a��l+�ׄQF%�Sq�,2Dnf���:�����6�uT�$����&����)��@[���}[���y�i���=h��5����&=��Z�Fڕ��T���[�N�y��{^�}ܷ<�5�ڊk\�V�UrٲT˵,E-��Pm�f�Ts��D����r����J��'����n4p��_��������ɏ���W��a��&�m��K�F1>پ�&���**b~���D�I�:>���J��t>c +r-N�Xmh)�b��\�5`��N7��n|�����=�m��`������BR�#a2���=,MT�!v�B��A�ć0ɢ���O�ff�MOы+" +̪,9�q� +����x�Y�-�J��u��`��o�{��ۄ����x�3��gh> +�7�>���P=V�8 2���6�l�ʹ��}S%���J2����q�*������ގ�J�W����g$K�C�[U@v2.�2��n +�B�����d(�.���a�M���1��)V>��ȶ1����� ��VO��i!�k�/�x���gx5N�#(q�R�3���RLT�PNAs$ +�G��� +�P�g�gQ�(���?��l�N^�0j�ld٣���Ɏ�H��t@�6ϰ�����tr5#'� +� [��P�a�CQ�ʂ��V�V_�ޢ� +��3�$��������w~�fg�rgs�?��p��#�t��Yr���� ��d&[�b@���cFgΰш1D?0|<���D=�=\�J�^�,���_B� +\�#��(M�]u���i!�~B�y�O?Ɔ�Ma��%�1CQxE�ev����������@�Z���������&~�����������̊������9�G�����C"���J�}�������c�^�8�EUk#�{s +w�9��3����$Lu���|���Q_J?FK +��k��L��l��={Y�
50�BF��5�P�|�Y�@����dvݣ�T\����E���e�>���1�da�Jb��PI#-���wI&�y��*�/��AD�-۪�&Yzl,�� +n�@�~���ZU�6�B������X�g��Ӕ�n��j��hw�>��2A���P�ټ�C_����:?Me3"��5,*�k����لE?q�,a|��;L"���Lp�&F+A���E�M���l��8�7��(����gƱt$
t��B9��� +m�'lM��P�L�Ɵ/�p�0o�*�霧,� +.ªag�F�9�F���۽�A��ٍp:�d�Ag�O�Z��Y�T�k �=�dփ1҅9�J�b��rPђ+����]�8VVI��<��M�&���# +6�Z���E,:���d�O��鳽x���s�`+g�B�f�s^�%�b�����B +A_���,�I� +�������7�0ܴ����Z�����|yl^�����0C�7��Z���� �!l���>� +�����t�C3E]���>�,ٸ%#�3^,��i�jյ�9xʇ����w����p��5��r���v���m�R���|WW�s@���D#-Ja����rֳc�tR���:���M'��D�p�����;�@����|uQ������s��T������u��k�6bό"���B2���� +�� �N^i]�� �90�����o�7g��f+2���d�ם��d��5��~�� +��.�G,\Ɲ��MvF����9�8�T����:H'���B����1�Uf�)A`] �s��j*\�����fa) +�� +@�5P����p�s���~� +���,YG��>�[�1�����h��� +�H�9>�BX0'�;�����%VaمEiL��!�9wb��� ��õJL �0]�XR �(�cj�M��sE$���5��c�bK�+3JU���{|qE$�Y��`feɷj�B�=Ǵ��$�M-��ɴ���Wo]������ޥ��^�A�b�N���{��N8� ;�#N��b�n�G��m�r55*5�� +:��M�:�G?@���0�u��1����Խ+�DC�z,#�~|
�-s��D0�������\��l�*�2���%�A~)0���Y����(���\d:"��2�TK�k-�1�,1�� �5b��4�[�N��������u�o��|�O��y2���^����������>����h�R��H�勲H���m���ͮF�! ���or� +.�ͫ�\��@��sV��ήĈB`s_�����SɩY��I�yLj���g�� +��m��(�0 +�N�{�ܾ�%�v8~
C�ᠳqI*�:�1Cy��pg��-�����l<��5������@�Η� �Mx�w+���p�bV�@|��;�[���yek���NτC�`qa3�l��+ꐝ��l�-;�C�b>;��Ru���$%��k���՚If��o�o��A�6�G�,(XG +@��V!o������;D%��8��l�z
A�j z������� +�\�'�w�WXo�����ҟ�0���r�~���F��06��Ġ4'����B8��s�o� +����PT�u�
:��4[����6����L$�5O/�,%a�y%���Ҏ#�A��Yf����UUKv.���_�����a�&!-3�O�ފ��Z�����=x����lM����8�f%�#���Jfc9D�� +:�W��
�63��y�2pX��O +�[����/��F���n��7����Q����Ε��QF���W���^�x۵���zJc�����=͑8A� +PK�o� �tn[�l��ߌ�a�LX�,9��u���+Z*���?�pwC~�������,�&;�� �3;��zr1�� �5��u������:���u����q�aF*Pe���o���1A�Gt��O�fs8��tZԷG�k���?1�w�6.U�px C"���p�!�/���?���~-�����kee�z +�K��s¤gƦ�pm����^���Q�Mpn~�,�����g75��)
U���x�P���iX+O'�g��]Mx��AN�(ti���OL�\ �f���=��|fX�O����:�����k{�XW���f���{�6���?�0>��ε���o��w!�a�� +��m^�Cn|f!^fЛ��9j����g +�}����ݛ�3�c�ג��9?�8�0�Yr�Y�2�ѝ*a�"�=+���˲<�z��m��.Uz>$@G�����U(�#�Z�,�A�������G��M'�B�33�t�;A���|�(�Rs�_d楥 +�?�l���#��[�q��W�d4Q�*6���\�L+X����ȸdl� ��J��!) +�~P�Ւ�?��8
��7
�$����_%���PHa�΅^��)|͐� ��;�bU�V���!�D���m��[g~�ӌh:�*|:��
(��=�����O9�oT��9A�]s�f(�<�f"C��A[3�R8�w�Mei�nx�y��D3$e|~�/�r��A�|R��e^Ͱb����W
�HR��
�l������J+�&���.����F/��*�� 0��r�sW��Ə�0�O#K���� ��B���ֵָH�� Z��p�:�jR��ɰ-G�{�i��[� ��`�z�\LJ�l�RG���]�0�e`5ʎ.uK��� ��_U��Y�"�:�+}�2�15�T�KF�A0�l��w��z ��h�A���?H� h#0�m������S��`%������-������ + + +MiCCPPhotoshop ICC profile +V�HUĂ� +H���(�gA��Z�U\8�ܧ�}z�����������y��&��j + +�z��y8�@��P�< +�%b��0�>�3�o��~��@��z� +��AT�:��������18
��\��p`���� A�a!:�b��"���"aH4��� �Q"��r��Bj�]H#�-r9�\@���� 2����G1���Q�u@���Ơs�t4]���k��=�����K�ut +!%�2IIkH�H-�S�>�i�L&�m������ �����O�����:ň�L �$R��J5e?���2B���Qͩ����:�ZIm�vP/S��4u�%͛Cˤ-��Кigi�h/�t� ݃E�З�k�����w
�
��Hb(k{��/�L�ӗ��T0�2�g��oUX*�*|���:�V�~��TUsU?�y�T�U�^V}�FU�P� ��թU��6��RwR�P�Q_��_���c
���F��H�Tc���!�2e�XB�rV�,k�Mb[���Lv�v/{LSCs�f�f�f��q�Ʊ��9ٜJ�!�
�{--?-��j�f�~�7�zھ�b�r�����up�@�,��:m:�u �6�Q����u��>�c�y� ������G�m��������7046�l18c�̐c�k�i������h���h��I�'�&�g�5x>f�ob�4�e�k<abi2ۤĤ��)͔k�f�Ѵ�t���,ܬج��9՜k�a�ټ�����E��J�6�ǖږ|��M����V>VyV�VI�\�,�m�WlPW��:�˶�����v�m���)�)�Sn�1��� +���9�a�%�m����;t;|rtu�vlp���4éĩ��Wgg�s��5�K���v�Sm���n�z˕��ҵ������ܭ�m���=�}��M.��]�=�A���X�q�㝧�����/^v^Y^��O��&��0m���[��{`:>=e���>�>�z�����"�=�#~�~�~���;�������y��N`������k��5��/>B
Yr�o���c3�g,����Z�0�&L�����~o��L�̶��Gl��i��})*2�.�Q�Stqt�,֬�Y�g���;�j�rvg�jlRlc웸�����x��E�t$ �����=��s�l�3��T�tc��ܢ����˞w<Y5Y�|8����?� BP/O�nMOE����Q���J<��V��8�;}C�h�OFu�3 OR+y���#�MVD�ެ��q�-9�����R
i��+�0�(�Of++�
�y�m������#�s��l�Lѣ�R�PL/�+x[[x�H�HZ�3�f���#�|���P���ظxY��"�E�#�Sw.1]R�dxi��}�h˲��P�XRU�jy��R�ҥ�C+�W4�����n��Z�ca�dU�j��[V*�_�p�����F���WN_�|�ym���J����H��n��Y��J�jA�І�
���_mJ�t�zj��ʹ���5a5�[̶���6��z�]�V������&�ֿ�w{��;��켵+xWk�E}�n��ݏb���~ݸGwOŞ�{�{�E��jtolܯ��� mR6�H:p囀oڛ�w�pZ*�A��'ߦ|{�P������ߙ���Hy+�:�u�-�m�=���茣�^G���~�1�cu�5�W���(=��䂓�d���N?=ԙ�y�L��k]Q]�gCϞ?t�L�_�����]�p�"�b�%�K�=�=G~p��H�[o�e���W<�t�M�;����j��s���.]�y�����n&��%���v��w +�L�]z�x�����������e�m��`�`��Y� �����Ӈ��G�G�#F#���
��dΓ᧲���~V�y�s������K�X�����Ͽ�y��r�:�#���y=�����}���ǽ�(�@�P���cǧ�O�>�|��/����%ҟ3 +@u��FGsd���+��f�9�j���#n����eY~}�¬���r��,��>r�%k��W۷����DQe�#m��3��m�r��s���718��m۲chhh,ɘ# +�����H�ƪU�\1 + + +7iCCPsRGB IEC61966-2.1 +�@���R�t C���X��CP�%CBH@�R����f�[�(t� +?���:��0�FB�x$ !���i@ڐ���H���[EE1PL���⢖�V�6��QP��>�U�(j +�MFk����� +{{{;�}�#�tp�8_\<N�+�U�Zp'pWp���������e�F|~?��!(� ��HB*a-���F8K�KxA$��N�p����XI<D<O%�%QHf$6)�$!m!�'�"�"� ��Fdr<YL�Bn&�!�'�Q�*X*(�V+�(t*\Qx��W4T�T\���X�xDqH�^�H���QZ�T�tT�Ҵ2U�F9T9Cy�r���G,ň�C�Q�(�(g(cT��OeS��u�F�Y�8
C3��Ri��oh��)���J�J�J��q)�����2�a�u�;U-UOU��&�6�+����y���J���F�ީ3�}��Է�w���@i�i�k�j��8��tm��9���ք5�4#4Wh��М������Ҫ�:��T�������C����U�MG��C��c� +Ó�Ψd�1�t5u�u%�����3z�zQz�z�z�� �,�$����S:!��
�,��]�������b�6u=2V30�7n5�kB6q7Yf�`r�c�2M3�mz�6�7K1�12����͇-�NB��Lӓ��le�Z�-�--�,�YX�[m���hmo�n�h}džbhSh�c-���\�\߹��v�}ngnǷ�cwӞjb���������ȡ�a���1ѱ���� +cmf�wB;y9�v:�����Y�|���K�K�ˣy����獹�r\�]�n�D��nRw]w�{��}�G�DŽ��g��A�g^�^"���lg�J�)o��ϻ�{Ї��S�s�W�7ٷ�w���o��)���6�Z܀怩@����}A��A�A�͂E�=!pH`�����
��w��Ѐ����Ö�}� � aQѿ��`ɂ��"�"�"�D�DI�z�����_�xǔ�Hc�bW�^�ӈ�u�c����,ܹp<�>�8��"�Ey�.,�X�����%�%Gщ1�-��9����Ҁ��K��l�.��oo���/�O$�&�'=JvMޞ<��R��T�T����֥�NM۟�)=&�=���qTH� �2�3�2��̳���˜��\6% +5eCً���4��Ԁ�D�^2��S��&7:�H�r�0o`���M�'�}�^�Z�]�[�[��`t����UЪ��zW�.Z=��ó���ik(�.,/|�.f]O�Vњ���~�[��E�76�l�ۈ�(�8�iMKx%K�K+J�o�n����W�_}ڒ�e�̡l�V�V����ܷ(W.�/���scGɎ�;��PaWQ���K�KZ\�]eP���}uJ�H�WM{�f���y������V�UWZ�n�`��z������}�}9�6F7�����I�����~�~遈}͎��-�-e�p��u�`����x���l�o����$������A�{����}g�]m����\�9Օ�%��>x��ǥ��{����=Vs\�x� ��N柜>�u�����c�Kz=s�/�o�l����|ϝ���?y������^d]��p�s�~���:;���/;]��7|����W����p�������Q�o�H�!�ɻ��V���sn��Ys}��ҽ����~4��]� =>�=:�`��;cܱ'?e��~��!�ań�D�#�G�&}'/?^�x�I֓���?+�\����w�x�20;5�\��ӯ�_������e�t���W�f^��Qs�-�m���w3���+?�~����O�~�����pf* +JUŦ�U�*QMKMp��**��[�4�6 ��'ϼ��)A�Im��؞�x��������g�=s�v�������#-�s�^�ܹ�WN~ߵ��+?�B + + + + + + + + + + + + + + +����YƷ���l�W����8���[3X +���z�Ѷ�2~�
���L6+{�$��5Y�|<;��,f���beu����xa�����'�0�}�H��[;:9�e��� + + + + + + + + + + +볈Y8���hg��7ڝ�˕hg��҆b�J��E{�
K/9��V���5�F[��q^��f�, + +�q���Ϸ���"�X�}���>y��.D��fWr��q�� +;�>����c��x.-~�����LΏ�����(��_~� 8�r�mD[�c`��'^�h{8�G +��Y�,P����^m7�����T��ՆM��1f��y�V +8���?���%����~�Km��! +�|�Y��<�||�� + + + + + + + + + +�ˆs�0���} �{�P|��ύ�9�x1�7��܆�,<�Xyo�&�Y�,P^�v6ګ���+>�f�! +�?���ϯ���l�?$�?߆�"��c���~�L�C~#څ�{dͮ�p��� + + + + + + + + + + +���c��XMN�;����ע���(&�f?��J#Onu�;؆����kNƱ����r2�g�S�ϛK��`�0X6 +�ܩs��^|��kF���,d.��W����s��|�Y>Ǜ��k,�s�>���.���#m�! +�gz/q�XN���w�t�.�{۰����F�^|l���f��ǚ[ + +����#���i�8�L��?n7�3~w<^�D��?8��x�Zv1�k��L +�k�寁�iO�! + + + + + + + + +�kK�S`�2�m + +���� +�_�������6,]N�ǃca����a�����r�<�C�\��3����� w���0�M + + + +Xi���' + + + + +X���� + +���0�x��,<�v_���=؆"$��YƷ���l�W���g�W|��g�[ +�xYxdѝ�A��gᐛ���F���?nãƎF!�l>�<�c��m(Xr��x�x^�}�P�d���k��F��,~r374�@*����rF>�A�����C +ƕ + + + + + + + + + + +���O�fcY���c����؆��sF2�U>�>���x�d�!g�7��G�>c�+��� + +w
���qr��h����kN�aJr�gnZv����6�>O�����t$5�6K +�! + +s#�,���U�L���~�˽}&�����5�����K�k`�! + +P +P +P +P + + + + + + + + + + + +��� +�E�q��L�s��D6����4����1Nkn��h����vw=�����m��|������c��?���4��u����&_ �� +s�Fn��9��l�K�����|؟~�Ҙ +�F�l� GN9>Ӯݭ��C + +P +ظ:�o + +0 +P + +3��~��� +g�p��4ޛ�B??ަ,�gb�Ӑs��=��}δ����C?`�� + + +� +� +� +� +� +� +0 +� +� +� +� +0 +P +� +0 +P +��p�� +P + + +P +P +P +P +P +P +P +P +ؘ�� + + + + + +P +ؘ�� + + +P +9rx�����O�� ��u�mr��τ#�c����7�C�Mj6��D��쓹��*���`� + + + + + + + +P +ؘ�V� + yn3~Wۖ + + + + + + + + +����Z�cq����9���h���\�|!��kok��{�߲�c�9w#~@ +�c���P� +P + + + + + + + + + + + +P +P +P +P +P +P +P +P + + +y�ǫ7�5�?�( + +�"��E̩T���{$�M97�$�8�����mX_�#��F�X��l��x�<��'�0�8�!_ȩ�m�6e���[�-�?f�s7�'�mM + + + +O�a���e�?�smHL��k�M�%>ӯ����v�m�{�����#�1��M��S +P +P +P +P +P +P +P +P +P +P +P +P +P +P +P +P +�B����� + + +��z���\����xrX?�# +����w#-D +�G{;��s��^��������v��K���^t\�� ��/C +���Ro�v?��������6!q��Mˏ��� +�;I���q�6-S�8�������� +�����Bv�MK�_Y\�,6۽����lB�%�?����S�<7�O�qr����?K�3��Qo�����| +���G���l�@ +�)'���ї���I��Է�T��eL�i3�[ + +�3��;{.�ٿ���������c9�" E�ǽ y��ۘ,EC����~�o�������o5�X������9�� +����3vR�g��x����5 + + + + + + + + + +�����&^|�k�3�O + + + + + + + + + + +��M��� 9�F���w��?�~m��~�m*(R\��^��|9��ۅ^�\�9��x`� +�E������S����6�6�Z\�b�v/@������_�{��ũ�2�%�?]\����͏(�ߠ'�1! +d�d��x�l��R + + + + + + + + + + + +���1&[�ͅdz�}�~#��_ε��x��+V"�Jf":�g����>Hm��Aw�Wn;o�f.�3{����ڴs�ּ��A�ǣ�{n6c� +��s��Bb~>x���H���������?L������M�F +�5�������[�9����H!s�ao뤏�o���O˘<�f<η +�핏Y�˼Z\,��l��p<���P� +�%YQ����ʵY�?�Dk;����Bg��Ǜ��u�z������]4<��xk4! +��H�ؘM�������}�Σ����oӽ�Y������w�1�^�n;�Q�u6�1ߧ?�9/�kW� +!@fS4,�0�߅�J�K�g�����|F�����s�^`��Ƿ�Y��5�+�Y��[{�uw�+2�e����J +��Bp�P�EǭqK���$���k�jӽʛ�X>+K���Z^ε��ׁ'���� + + + + + + + + + + +��~}. z��/۴�؝���_�����iS�1�8����m*(R\�}_��'��ۅ^�\�9��x`� + +�yFr.DT}����sn��Y���H��3?���<�z���6�i�g������ +O��|Y�W>5�e��t����P���8^3��Q� �mu�����Gp<n�� +!@f3��9�3��D/�� +�+�]����M��3�����=����t�s�?_��2��ڣ?���_��x-����o�W� +o�i���EnȒ�S<�~��^�ɸ&˗�������sm���r/z����� + + + + + + + + + + +��-y~�=���q��J�K���^t\��<��G +��Y<��<��������e�!�#Ų|8�Nj���ظv��3�yi���r����b�k�gyj�{ú��z���?����y�BB����Ƀ��M�P� +�;������v�xI�q��{u��~� +��ߒ+/��M������� +�^��xf!s���^T�~/�p��~��������m*4��B?�f}e^���5?��6�Rn��oO.���I + + + + + + + + + + + + + + + + +7iCCPsRGB IEC61966-2.1 +�@���R�t C���X��CP�%CBH@�R����f�[�(t� +?���:��0�FB�x$ !���i@ڐ���H���[EE1PL���⢖�V�6��QP��>�U�(j +�MFk����� +{{{;�}�#�tp�8_\<N�+�U�Zp'pWp���������e�F|~?��!(� ��HB*a-���F8K�KxA$��N�p����XI<D<O%�%QHf$6)�$!m!�'�"�"� ��Fdr<YL�Bn&�!�'�Q�*X*(�V+�(t*\Qx��W4T�T\���X�xDqH�^�H���QZ�T�tT�Ҵ2U�F9T9Cy�r���G,ň�C�Q�(�(g(cT��OeS��u�F�Y�8
C3��Ri��oh��)���J�J�J��q)�����2�a�u�;U-UOU��&�6�+����y���J���F�ީ3�}��Է�w���@i�i�k�j��8��tm��9���ք5�4#4Wh��М������Ҫ�:��T�������C����U�MG��C��c� +Ó�Ψd�1�t5u�u%�����3z�zQz�z�z�� �,�$����S:!��
�,��]�������b�6u=2V30�7n5�kB6q7Yf�`r�c�2M3�mz�6�7K1�12����͇-�NB��Lӓ��le�Z�-�--�,�YX�[m���hmo�n�h}džbhSh�c-���\�\߹��v�}ngnǷ�cwӞjb���������ȡ�a���1ѱ���� +cmf�wB;y9�v:�����Y�|���K�K�ˣy����獹�r\�]�n�D��nRw]w�{��}�G�DŽ��g��A�g^�^"���lg�J�)o��ϻ�{Ї��S�s�W�7ٷ�w���o��)���6�Z܀怩@����}A��A�A�͂E�=!pH`�����
��w��Ѐ����Ö�}� � aQѿ��`ɂ��"�"�"�D�DI�z�����_�xǔ�Hc�bW�^�ӈ�u�c����,ܹp<�>�8��"�Ey�.,�X�����%�%Gщ1�-��9����Ҁ��K��l�.��oo���/�O$�&�'=JvMޞ<��R��T�T����֥�NM۟�)=&�=���qTH� �2�3�2��̳���˜��\6% +5eCً���4��Ԁ�D�^2��S��&7:�H�r�0o`���M�'�}�^�Z�]�[�[��`t����UЪ��zW�.Z=��ó���ik(�.,/|�.f]O�Vњ���~�[��E�76�l�ۈ�(�8�iMKx%K�K+J�o�n����W�_}ڒ�e�̡l�V�V����ܷ(W.�/���scGɎ�;��PaWQ���K�KZ\�]eP���}uJ�H�WM{�f���y������V�UWZ�n�`��z������}�}9�6F7�����I�����~�~遈}͎��-�-e�p��u�`����x���l�o����$������A�{����}g�]m����\�9Օ�%��>x��ǥ��{����=Vs\�x� ��N柜>�u�����c�Kz=s�/�o�l����|ϝ���?y������^d]��p�s�~���:;���/;]��7|����W����p�������Q�o�H�!�ɻ��V���sn��Ys}��ҽ����~4��]� =>�=:�`��;cܱ'?e��~��!�ań�D�#�G�&}'/?^�x�I֓���?+�\����w�x�20;5�\��ӯ�_������e�t���W�f^��Qs�-�m���w3���+?�~����O�~�����pf* + + + + + +R� +lc[H:����YY��x�U��>��u�\�����=@�z��jܿ�~��v�j�'O�< + + + +MiCCPPhotoshop ICC profile +V�HUĂ� +H���(�gA��Z�U\8�ܧ�}z�����������y��&��j + +�z��y8�@��P�< +�%b��0�>�3�o��~��@��z� +��AT�:��������18
��\��p`���� A�a!:�b��"���"aH4��� �Q"��r��Bj�]H#�-r9�\@���� 2����G1���Q�u@���Ơs�t4]���k��=�����K�ut +!%�2IIkH�H-�S�>�i�L&�m������ �����O�����:ň�L �$R��J5e?���2B���Qͩ����:�ZIm�vP/S��4u�%͛Cˤ-��Кigi�h/�t� ݃E�З�k�����w
�
��Hb(k{��/�L�ӗ��T0�2�g��oUX*�*|���:�V�~��TUsU?�y�T�U�^V}�FU�P� ��թU��6��RwR�P�Q_��_���c
���F��H�Tc���!�2e�XB�rV�,k�Mb[���Lv�v/{LSCs�f�f�f��q�Ʊ��9ٜJ�!�
�{--?-��j�f�~�7�zھ�b�r�����up�@�,��:m:�u �6�Q����u��>�c�y� ������G�m��������7046�l18c�̐c�k�i������h���h��I�'�&�g�5x>f�ob�4�e�k<abi2ۤĤ��)͔k�f�Ѵ�t���,ܬج��9՜k�a�ټ�����E��J�6�ǖږ|��M����V>VyV�VI�\�,�m�WlPW��:�˶�����v�m���)�)�Sn�1��� +���9�a�%�m����;t;|rtu�vlp���4éĩ��Wgg�s��5�K���v�Sm���n�z˕��ҵ������ܭ�m���=�}��M.��]�=�A���X�q�㝧�����/^v^Y^��O��&��0m���[��{`:>=e���>�>�z�����"�=�#~�~�~���;�������y��N`������k��5��/>B
Yr�o���c3�g,����Z�0�&L�����~o��L�̶��Gl��i��})*2�.�Q�Stqt�,֬�Y�g���;�j�rvg�jlRlc웸�����x��E�t$ �����=��s�l�3��T�tc��ܢ����˞w<Y5Y�|8����?� BP/O�nMOE����Q���J<��V��8�;}C�h�OFu�3 OR+y���#�MVD�ެ��q�-9�����R
i��+�0�(�Of++�
�y�m������#�s��l�Lѣ�R�PL/�+x[[x�H�HZ�3�f���#�|���P���ظxY��"�E�#�Sw.1]R�dxi��}�h˲��P�XRU�jy��R�ҥ�C+�W4�����n��Z�ca�dU�j��[V*�_�p�����F���WN_�|�ym���J����H��n��Y��J�jA�І�
���_mJ�t�zj��ʹ���5a5�[̶���6��z�]�V������&�ֿ�w{��;��켵+xWk�E}�n��ݏb���~ݸGwOŞ�{�{�E��jtolܯ��� mR6�H:p囀oڛ�w�pZ*�A��'ߦ|{�P������ߙ���Hy+�:�u�-�m�=���茣�^G���~�1�cu�5�W���(=��䂓�d���N?=ԙ�y�L��k]Q]�gCϞ?t�L�_�����]�p�"�b�%�K�=�=G~p��H�[o�e���W<�t�M�;����j��s���.]�y�����n&��%���v��w +�L�]z�x�����������e�m��`�`��Y� �����Ӈ��G�G�#F#���
��dΓ᧲���~V�y�s������K�X�����Ͽ�y��r�:�#���y=�����}���ǽ�(�@�P���cǧ�O�>�|��/����%ҟ3 +�B ��(�) +��J��U+/(jK�j�i��Z�Z�E-&j���`��$$�~�L&��ϙ�3g�y���־?+$��Zg�+s��g?ϳ�~����яW�HD +����
�{���d�F�R*����d���8�サ��v�e�f��Ʋ��
����p�N�<i?y��{�����ӧ�Rs9`$ϼ�سg����Y�� +;
�m�r��`�r߾}�'M�$]�b�(��:oÆ
+7o�<��(����ŋ�Vk� ?���0����***��رc��E��A� �.��qɾ}����Nj7m�t��ٳ;�����v��[-#Eu�u +�~��)�g�n�8��h4:�<k����, +:�؋���&_SSSS�Qõ�����=ǹ7o���xA������Y^}�U�|�����(***رc�E +}5�&� +@b�Z���- +}�|�>*���`��� +�B + +AQT��2r��{�� +�����G"�JR����gϚ� +�I�TVVּjժL�DB�(�ͦp:�R�Z�/��g���!s:����\A��� �={� ��6�u���]� +��T���(G|��U�W�����OSSS��5��?���y���rr���IG��vuu��r�?**��UÃ=�Z�����(��� + + +���� +���v7z��s�>���cǎ͕�ddaa����rW{{�_$bbb�?�|��� �f����5�$�a7�tS, +�O*���=���<�����fS��f��b�I�Ҹ�'&6L��}���-[v�h4�P
�Y&���[��i9��y3���=����o��]�n���t� +����>|����&����h2�,Z����h4�R��d��W�b���<��,�0������f�)z{{Uv�]#�Hbrss�����B�� +��'��}���H$�H$b�Ba��� EQ<A<A ��y��y��`��d�L��� �^���i��咺�n9�0 +�X�ILL�JMM�|Y�wx�G}����ou��Ű� diff --git a/examples/web/models/models_yaw_pitch_roll.html b/examples/web/models/models_yaw_pitch_roll.html new file mode 100644 index 0000000..d8aa1cd --- /dev/null +++ b/examples/web/models/models_yaw_pitch_roll.html @@ -0,0 +1 @@ +<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=https://www.raylib.com/games property=og:url><meta content=raylib.com property=og:site_name><meta content="New hmtl5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/common/img/raylib_logo.png name=twitter:url><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header_part{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(https://www.raylib.com/common/img/raylib_logo_64x64.png)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}#emscripten_logo{display:inline-block;margin:0}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:20px;width:30px}#controls{display:inline-block;float:right;vertical-align:top;margin-top:30px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}</style></head><body><div id=header_part><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value=Fullscreen></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault()></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function SaveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var t=document.querySelector("#output");return t&&(t.value=""),function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.log(e),t&&(t.value+=e+"\n",t.scrollTop=t.scrollHeight)}}(),printErr:function(e){1<arguments.length&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()},!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Date.now()<30||(t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!1,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(e){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script src=models_yaw_pitch_roll.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_yaw_pitch_roll.js b/examples/web/models/models_yaw_pitch_roll.js new file mode 100644 index 0000000..10f47c5 --- /dev/null +++ b/examples/web/models/models_yaw_pitch_roll.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_yaw_pitch_roll.data";var REMOTE_PACKAGE_BASE="models_yaw_pitch_roll.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i<files.length;++i){new DataRequest(files[i].start,files[i].end,files[i].audio).open("GET",files[i].filename)}function processPackageData(arrayBuffer){Module.finishedDataFileDownloads++;assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);var ptr=Module["getMemory"](byteArray.length);Module["HEAPU8"].set(byteArray,ptr);DataRequest.prototype.byteArray=Module["HEAPU8"].subarray(ptr,ptr+byteArray.length);var files=metadata.files;for(var i=0;i<files.length;++i){DataRequest.prototype.requests[files[i].filename].onload()}Module["removeRunDependency"]("datafile_models/models_yaw_pitch_roll.data")}Module["addRunDependency"]("datafile_models/models_yaw_pitch_roll.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[{"start":0,"audio":0,"end":317645,"filename":"/resources/plane.obj"},{"start":317645,"audio":0,"end":690875,"filename":"/resources/plane_diffuse.png"},{"start":690875,"audio":0,"end":695685,"filename":"/resources/plane.png"},{"start":695685,"audio":0,"end":741630,"filename":"/resources/pitch.png"},{"start":741630,"audio":0,"end":758204,"filename":"/resources/background.png"},{"start":758204,"audio":0,"end":771123,"filename":"/resources/angle_gauge.png"}],"remote_package_size":771123,"package_uuid":"0fadd300-6c6e-4fe5-8cb7-ad60470decf9"})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];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 require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;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)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["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);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["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"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}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=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["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)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];type=singleType||types[i];if(type===0){i++;continue}if(type=="i64")type="i32";setValue(ret+i,curr,type);if(previousType!==type){typeSize=getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}function getMemory(size){if(!runtimeInitialized)return dynamicAlloc(size);return _malloc(size)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(u8Array[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=u8Array[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[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<str.length;++i){var u=str.charCodeAt(i);if(u>=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 allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__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(0)}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)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5279952,DYNAMICTOP_PTR=37040;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;if(INITIAL_TOTAL_MEMORY<TOTAL_STACK)err("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+INITIAL_TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{if(typeof WebAssembly==="object"&&typeof WebAssembly.Memory==="function"){wasmMemory=new WebAssembly.Memory({"initial":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE});buffer=wasmMemory.buffer}else{buffer=new ArrayBuffer(INITIAL_TOTAL_MEMORY)}}updateGlobalBufferViews();HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();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 __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=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 ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}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"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_yaw_pitch_roll.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){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(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};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 ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}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)},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.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(19)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(6)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(6)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(5)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var isPosixPlatform=process.platform!="win32";var fd=process.stdin.fd;if(isPosixPlatform){var usingDevice=false;try{fd=fs.openSync("/dev/stdin","r");usingDevice=true}catch(e){}}try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(usingDevice){fs.closeSync(fd)}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}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(1)}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<node.usedBytes;++i)arr.push(node.contents[i]);return arr}return node.contents},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array;if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|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(new ArrayBuffer(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<newSize)node.contents.push(0);node.usedBytes=newSize},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[2]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(39)}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name]},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(39)}delete parent.contents[name]},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(22)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(22)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(12)}buffer.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(19)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var IDBFS={dbs:{},indexedDB:function(){if(typeof indexedDB!=="undefined")return indexedDB;var ret=null;if(typeof window==="object")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,"IDBFS used, but indexedDB not supported");return ret},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function(mount){return MEMFS.mount.apply(null,arguments)},syncfs:function(mount,populate,callback){IDBFS.getLocalSet(mount,function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},getDB:function(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback("Unable to connect to IndexedDB")}req.onupgradeneeded=function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}};req.onsuccess=function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db)};req.onerror=function(e){callback(this.error);e.preventDefault()}},getLocalSet:function(mount,callback){var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return function(p){return PATH.join2(root,p)}}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:"local",entries:entries})},getRemoteSet:function(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,function(err,db){if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=function(e){callback(this.error);e.preventDefault()};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db:db,entries:entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()}}catch(e){return callback(e)}})},loadLocalEntry:function(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error("node type not supported"))}},storeLocalEntry:function(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode)}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp)}catch(e){return callback(e)}callback(null)},removeLocalEntry:function(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:function(store,path,callback){var req=store.get(path);req.onsuccess=function(event){callback(null,event.target.result)};req.onerror=function(e){callback(this.error);e.preventDefault()}},storeRemoteEntry:function(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},removeRemoteEntry:function(store,path,callback){var req=store.delete(path);req.onsuccess=function(){callback(null)};req.onerror=function(e){callback(this.error);e.preventDefault()}},reconcile:function(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join("/");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,parts[i],WORKERFS.DIR_MODE,0)}parent=createdParents[curr]}return parent}function base(path){var parts=path.split("/");return parts[parts.length-1]}Array.prototype.forEach.call(mount.opts["files"]||[],function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate)});(mount.opts["blobs"]||[]).forEach(function(obj){WORKERFS.createNode(ensureParent(obj["name"]),base(obj["name"]),WORKERFS.FILE_MODE,0,obj["data"])});(mount.opts["packages"]||[]).forEach(function(pack){pack["metadata"].files.forEach(function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack["blob"].slice(file.start,file.end))})});return root},createNode:function(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents}else{node.size=4096;node.contents={}}if(parent){parent.contents[name]=node}return node},node_ops:{getattr:function(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)}},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}},lookup:function(parent,name){throw new FS.ErrnoError(2)},mknod:function(parent,name,mode,dev){throw new FS.ErrnoError(1)},rename:function(oldNode,newDir,newName){throw new FS.ErrnoError(1)},unlink:function(parent,name){throw new FS.ErrnoError(1)},rmdir:function(parent,name){throw new FS.ErrnoError(1)},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newName,oldPath){throw new FS.ErrnoError(1)},readlink:function(node){throw new FS.ErrnoError(1)}},stream_ops:{read:function(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(40)}}}}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<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>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 err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,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){if(!FS.FSNode){FS.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};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.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)}}})}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 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}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 err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}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(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}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(29)}},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){console.log("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(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}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(16)}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(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}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(22)}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(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}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;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=17)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(2)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(2)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(1)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(16)}if(!old_dir||!new_dir)throw new FS.ErrnoError(2);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(18)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(22)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(39)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(1)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(16)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(20)}return node.node_ops.readdir(node)},unlink:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(1)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(2)}if(!link.node_ops.readlink){throw new FS.ErrnoError(22)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(2)}if(!node.node_ops.getattr){throw new FS.ErrnoError(1)}return node.node_ops.getattr(node)},lstat:function(path){return FS.stat(path,true)},chmod:function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chmod(stream.node,mode)},chown:function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}FS.chown(stream.node,uid,gid)},truncate:function(path,len){if(len<0){throw new FS.ErrnoError(22)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(1)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(21)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(22)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(22)}FS.truncate(stream.node,len)},utime:function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(2)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(17)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(2)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;console.log("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:function(stream){return stream.fd===null},llseek:function(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(29)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(22)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.read){throw new FS.ErrnoError(22)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(22)}if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(21)}if(!stream.stream_ops.write){throw new FS.ErrnoError(22)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(29)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(9)}if(offset<0||length<=0){throw new FS.ErrnoError(22)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(9)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(19)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(95)}stream.stream_ops.allocate(stream,offset,length)},mmap:function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(13)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(19)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(25)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:function(path,data,opts){opts=opts||{};opts.flags=opts.flags||"w";var stream=FS.open(path,opts.flags,opts.mode);if(typeof data==="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:function(){return FS.currentPath},chdir:function(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(2)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(20)}var err=FS.nodePermissions(lookup.node,"x");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path},createDefaultDirectories:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return length}});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device;if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);random_device=function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");random_device=function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}else{}if(!random_device){random_device=function(){abort("random_device")}}FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode("/proc/self","fd",16384|511,73);node.node_ops={lookup:function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(9);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin","r");var stdout=FS.open("/dev/stdout","w");var stderr=FS.open("/dev/stderr","w")},ensureErrnoError:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error";if(this.stack)Object.defineProperty(this,"stack",{value:(new Error).stack,writable:true})};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[2].forEach(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS}},init:function(input,output,error){FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},joinPath:function(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]=="/")path=path.substr(1);return path},absolutePath:function(relative,base){return PATH.resolve(base,relative)},standardizePath:function(path){return PATH.normalize(path)},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{___setErrNo(ret.error);return null}},analyzePath:function(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createFolder:function(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode)},createPath:function(parent,path,canRead,canWrite){parent=typeof parent==="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:function(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data==="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,"w");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(5)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(11)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(5)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},createLink:function(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);return FS.symlink(target,path)},forceLoadFile:function(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!=="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(Module["read"]){try{obj.contents=intArrayFromString(Module["read"](obj.url),true);obj.usedBytes=obj.contents.length}catch(e){success=false}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}if(!success)___setErrNo(5);return success},createLazyFile:function(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=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;console.log("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(5)}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(5)}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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function(dirfd,path){if(path[0]!=="/"){var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path}path=PATH.join2(dir,path)}return path},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR}throw e}HEAP32[buf>>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){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,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-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;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-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}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<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>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:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;if(typeof SDL==="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["preloadPlugins"].push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("warning: browser could not fully decode audio "+name+", trying slower base64 approach");function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};var EGL={errorCode:12288,defaultDisplayInitialized:false,currentContext:0,currentReadSurface:0,currentDrawSurface:0,contextAttributes:{alpha:false,depth:false,stencil:false,antialias:false},stringCache:{},setErrorCode:function(code){EGL.errorCode=code},chooseConfig:function(display,attribList,config,config_size,numConfigs){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(attribList){for(;;){var param=HEAP32[attribList>>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(this,call.argsList)}},inEventHandler:0,currentEventHandler:null,eventHandlers:[],isInternetExplorer:function(){return navigator.userAgent.indexOf("MSIE")!==-1||navigator.appVersion.indexOf("Trident/")>0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getBoundingClientRectOrZeros:function(target){return target.getBoundingClientRect?target.getBoundingClientRect():{left:0,top:0}},pageScrollPos:function(){if(window.pageXOffset>0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i<GL.MINI_TEMP_BUFFER_SIZE;i++){GL.miniTempBufferViews[i]=GL.miniTempBuffer.subarray(0,i+1)}},recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i<ret;i++){table[i]=null}return ret},MINI_TEMP_BUFFER_SIZE:256,miniTempBuffer:null,miniTempBufferViews:[0],getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i<result.length;++i){switch(type){case"Integer":HEAP32[p+i*4>>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[location]);if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i<data.length;i++){switch(type){case"Integer":HEAP32[params+i*4>>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i<e.touches.length;++i){var touch=e.touches[i];touches[touch.identifier]=touch}for(var i=0;i<e.changedTouches.length;++i){var touch=e.changedTouches[i];touches[touch.identifier]=touch;touch.changed=true}for(var i=0;i<e.targetTouches.length;++i){var touch=e.targetTouches[i];touches[touch.identifier].onTarget=true}var touchEvent=JSEvents.touchEvent;var ptr=touchEvent;HEAP32[ptr+4>>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i<exts.length;++i){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=stringToNewUTF8(gl_exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(GLctx.VERSION);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(GLctx.SHADING_LANGUAGE_VERSION);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;dynCall_vidd(GLFW.active.cursorPosFunc,GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;dynCall_viiii(GLFW.active.mouseButtonFunc,GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),"i8",ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),"i8",ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),"float",ALLOC_NORMAL)};if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){dynCall_vii(GLFW.joystickFunc,joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.keyFunc=cbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.charFunc=cbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.mouseButtonFunc=cbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorPosFunc=cbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.scrollFunc=cbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.dropFunc=cbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowSizeFunc=cbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowCloseFunc=cbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowRefreshFunc=cbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++);if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++);if(i==GLFW.windows.length){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetCursorPos(winid,x,y){GLFW.getCursorPos(winid,x,y)}function _glfwGetKey(winid,key){return GLFW.getKey(winid,key)}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.cursorEnterFunc=cbfun}function _glfwSetCursorPosCallback(winid,cbfun){GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){GLFW.errorFunc=cbfun}function _glfwSetKeyCallback(winid,cbfun){GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return;win.windowIconifyFunc=cbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _llvm_stackrestore(p){var self=_llvm_stacksave;var ret=self.LLVM_SAVEDSTACKS[p];self.LLVM_SAVEDSTACKS.splice(p,1);stackRestore(ret)}function _llvm_stacksave(){var self=_llvm_stacksave;if(!self.LLVM_SAVEDSTACKS){self.LLVM_SAVEDSTACKS=[]}self.LLVM_SAVEDSTACKS.push(stackSave());return self.LLVM_SAVEDSTACKS.length-1}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function _usleep(useconds){var msec=useconds/1e3;if((ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self["performance"]&&self["performance"]["now"]){var start=self["performance"]["now"]();while(self["performance"]["now"]()-start<msec){}}else{var start=Date.now();while(Date.now()-start<msec){}}return 0}function _nanosleep(rqtp,rmtp){var seconds=HEAP32[rqtp>>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));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 asmGlobalArg={};var asmLibraryArg={"d":abort,"b":___assert_fail,"Ac":___lock,"H":___setErrNo,"lb":___syscall140,"ab":___syscall145,"G":___syscall146,"r":___syscall221,"xa":___syscall5,"F":___syscall54,"ca":___syscall6,"E":___unlock,"D":_eglGetProcAddress,"ba":_emscripten_exit_pointerlock,"Fd":_emscripten_get_gamepad_status,"ud":_emscripten_get_heap_size,"jd":_emscripten_get_num_gamepads,"aa":_emscripten_get_pointerlock_status,"Qc":_emscripten_glActiveTexture,"Gc":_emscripten_glAttachShader,"zc":_emscripten_glBeginQueryEXT,"vc":_emscripten_glBindAttribLocation,"oc":_emscripten_glBindBuffer,"lc":_emscripten_glBindFramebuffer,"ec":_emscripten_glBindRenderbuffer,"Zb":_emscripten_glBindTexture,"Vb":_emscripten_glBindVertexArrayOES,"Lb":_emscripten_glBlendColor,"Ab":_emscripten_glBlendEquation,"wb":_emscripten_glBlendEquationSeparate,"vb":_emscripten_glBlendFunc,"ub":_emscripten_glBlendFuncSeparate,"tb":_emscripten_glBufferData,"sb":_emscripten_glBufferSubData,"rb":_emscripten_glCheckFramebufferStatus,"qb":_emscripten_glClear,"pb":_emscripten_glClearColor,"ob":_emscripten_glClearDepthf,"nb":_emscripten_glClearStencil,"mb":_emscripten_glColorMask,"kb":_emscripten_glCompileShader,"jb":_emscripten_glCompressedTexImage2D,"ib":_emscripten_glCompressedTexSubImage2D,"hb":_emscripten_glCopyTexImage2D,"gb":_emscripten_glCopyTexSubImage2D,"fb":_emscripten_glCreateProgram,"eb":_emscripten_glCreateShader,"db":_emscripten_glCullFace,"cb":_emscripten_glDeleteBuffers,"bb":_emscripten_glDeleteFramebuffers,"$a":_emscripten_glDeleteProgram,"_a":_emscripten_glDeleteQueriesEXT,"Za":_emscripten_glDeleteRenderbuffers,"Ya":_emscripten_glDeleteShader,"Xa":_emscripten_glDeleteTextures,"Wa":_emscripten_glDeleteVertexArraysOES,"Va":_emscripten_glDepthFunc,"Ua":_emscripten_glDepthMask,"Ta":_emscripten_glDepthRangef,"Sa":_emscripten_glDetachShader,"Ra":_emscripten_glDisable,"Qa":_emscripten_glDisableVertexAttribArray,"Pa":_emscripten_glDrawArrays,"Oa":_emscripten_glDrawArraysInstancedANGLE,"Na":_emscripten_glDrawBuffersWEBGL,"Ma":_emscripten_glDrawElements,"La":_emscripten_glDrawElementsInstancedANGLE,"Ka":_emscripten_glEnable,"Ja":_emscripten_glEnableVertexAttribArray,"Ia":_emscripten_glEndQueryEXT,"Ha":_emscripten_glFinish,"Ga":_emscripten_glFlush,"Fa":_emscripten_glFramebufferRenderbuffer,"Ea":_emscripten_glFramebufferTexture2D,"Da":_emscripten_glFrontFace,"Ca":_emscripten_glGenBuffers,"Ba":_emscripten_glGenFramebuffers,"Aa":_emscripten_glGenQueriesEXT,"za":_emscripten_glGenRenderbuffers,"ya":_emscripten_glGenTextures,"wa":_emscripten_glGenVertexArraysOES,"va":_emscripten_glGenerateMipmap,"ua":_emscripten_glGetActiveAttrib,"ta":_emscripten_glGetActiveUniform,"sa":_emscripten_glGetAttachedShaders,"ra":_emscripten_glGetAttribLocation,"qa":_emscripten_glGetBooleanv,"pa":_emscripten_glGetBufferParameteriv,"oa":_emscripten_glGetError,"na":_emscripten_glGetFloatv,"ma":_emscripten_glGetFramebufferAttachmentParameteriv,"la":_emscripten_glGetIntegerv,"ka":_emscripten_glGetProgramInfoLog,"ja":_emscripten_glGetProgramiv,"ia":_emscripten_glGetQueryObjecti64vEXT,"ha":_emscripten_glGetQueryObjectivEXT,"ga":_emscripten_glGetQueryObjectui64vEXT,"fa":_emscripten_glGetQueryObjectuivEXT,"ea":_emscripten_glGetQueryivEXT,"da":_emscripten_glGetRenderbufferParameteriv,"re":_emscripten_glGetShaderInfoLog,"qe":_emscripten_glGetShaderPrecisionFormat,"pe":_emscripten_glGetShaderSource,"oe":_emscripten_glGetShaderiv,"ne":_emscripten_glGetString,"me":_emscripten_glGetTexParameterfv,"le":_emscripten_glGetTexParameteriv,"ke":_emscripten_glGetUniformLocation,"je":_emscripten_glGetUniformfv,"ie":_emscripten_glGetUniformiv,"he":_emscripten_glGetVertexAttribPointerv,"ge":_emscripten_glGetVertexAttribfv,"fe":_emscripten_glGetVertexAttribiv,"ee":_emscripten_glHint,"de":_emscripten_glIsBuffer,"ce":_emscripten_glIsEnabled,"be":_emscripten_glIsFramebuffer,"ae":_emscripten_glIsProgram,"$d":_emscripten_glIsQueryEXT,"_d":_emscripten_glIsRenderbuffer,"Zd":_emscripten_glIsShader,"Yd":_emscripten_glIsTexture,"Xd":_emscripten_glIsVertexArrayOES,"Wd":_emscripten_glLineWidth,"Vd":_emscripten_glLinkProgram,"Ud":_emscripten_glPixelStorei,"Td":_emscripten_glPolygonOffset,"Sd":_emscripten_glQueryCounterEXT,"Rd":_emscripten_glReadPixels,"Qd":_emscripten_glReleaseShaderCompiler,"Pd":_emscripten_glRenderbufferStorage,"Od":_emscripten_glSampleCoverage,"Nd":_emscripten_glScissor,"Md":_emscripten_glShaderBinary,"Ld":_emscripten_glShaderSource,"Kd":_emscripten_glStencilFunc,"Jd":_emscripten_glStencilFuncSeparate,"Id":_emscripten_glStencilMask,"Hd":_emscripten_glStencilMaskSeparate,"Gd":_emscripten_glStencilOp,"Ed":_emscripten_glStencilOpSeparate,"Dd":_emscripten_glTexImage2D,"Cd":_emscripten_glTexParameterf,"Bd":_emscripten_glTexParameterfv,"Ad":_emscripten_glTexParameteri,"zd":_emscripten_glTexParameteriv,"yd":_emscripten_glTexSubImage2D,"xd":_emscripten_glUniform1f,"wd":_emscripten_glUniform1fv,"vd":_emscripten_glUniform1i,"td":_emscripten_glUniform1iv,"sd":_emscripten_glUniform2f,"rd":_emscripten_glUniform2fv,"qd":_emscripten_glUniform2i,"pd":_emscripten_glUniform2iv,"od":_emscripten_glUniform3f,"nd":_emscripten_glUniform3fv,"md":_emscripten_glUniform3i,"ld":_emscripten_glUniform3iv,"kd":_emscripten_glUniform4f,"id":_emscripten_glUniform4fv,"hd":_emscripten_glUniform4i,"gd":_emscripten_glUniform4iv,"fd":_emscripten_glUniformMatrix2fv,"ed":_emscripten_glUniformMatrix3fv,"dd":_emscripten_glUniformMatrix4fv,"cd":_emscripten_glUseProgram,"bd":_emscripten_glValidateProgram,"ad":_emscripten_glVertexAttrib1f,"$c":_emscripten_glVertexAttrib1fv,"_c":_emscripten_glVertexAttrib2f,"Zc":_emscripten_glVertexAttrib2fv,"Yc":_emscripten_glVertexAttrib3f,"Xc":_emscripten_glVertexAttrib3fv,"Wc":_emscripten_glVertexAttrib4f,"Vc":_emscripten_glVertexAttrib4fv,"Uc":_emscripten_glVertexAttribDivisorANGLE,"Tc":_emscripten_glVertexAttribPointer,"Sc":_emscripten_glViewport,"Rc":_emscripten_memcpy_big,"Pc":_emscripten_request_pointerlock,"Oc":_emscripten_resize_heap,"$":_emscripten_run_script,"Nc":_emscripten_sample_gamepad_data,"Mc":_emscripten_set_click_callback_on_thread,"Lc":_emscripten_set_fullscreenchange_callback_on_thread,"Kc":_emscripten_set_gamepadconnected_callback_on_thread,"Jc":_emscripten_set_gamepaddisconnected_callback_on_thread,"Ic":_emscripten_set_keypress_callback_on_thread,"Hc":_emscripten_set_main_loop,"Fc":_emscripten_set_touchcancel_callback_on_thread,"Ec":_emscripten_set_touchend_callback_on_thread,"Dc":_emscripten_set_touchmove_callback_on_thread,"Cc":_emscripten_set_touchstart_callback_on_thread,"Bc":_exit,"C":_glActiveTexture,"_":_glAttachShader,"o":_glBindAttribLocation,"c":_glBindBuffer,"l":_glBindFramebuffer,"Z":_glBindRenderbuffer,"g":_glBindTexture,"Y":_glBlendFunc,"j":_glBufferData,"B":_glBufferSubData,"yc":_glCheckFramebufferStatus,"X":_glClear,"W":_glClearColor,"xc":_glClearDepthf,"wc":_glCompileShader,"uc":_glCompressedTexImage2D,"tc":_glCreateProgram,"sc":_glCreateShader,"rc":_glCullFace,"q":_glDeleteBuffers,"qc":_glDeleteFramebuffers,"A":_glDeleteProgram,"pc":_glDeleteRenderbuffers,"V":_glDeleteShader,"t":_glDeleteTextures,"nc":_glDepthFunc,"U":_glDetachShader,"T":_glDisable,"k":_glDisableVertexAttribArray,"S":_glDrawArrays,"R":_glDrawElements,"z":_glEnable,"f":_glEnableVertexAttribArray,"mc":_glFramebufferRenderbuffer,"Q":_glFramebufferTexture2D,"kc":_glFrontFace,"i":_glGenBuffers,"jc":_glGenFramebuffers,"ic":_glGenRenderbuffers,"P":_glGenTextures,"hc":_glGenerateMipmap,"y":_glGetAttribLocation,"gc":_glGetFloatv,"fc":_glGetProgramInfoLog,"O":_glGetProgramiv,"dc":_glGetShaderInfoLog,"N":_glGetShaderiv,"p":_glGetString,"x":_glGetUniformLocation,"cc":_glLinkProgram,"bc":_glPixelStorei,"ac":_glReadPixels,"$b":_glRenderbufferStorage,"_b":_glShaderSource,"M":_glTexImage2D,"h":_glTexParameteri,"L":_glUniform1i,"w":_glUniform4f,"v":_glUniformMatrix4fv,"n":_glUseProgram,"Yb":_glVertexAttrib2f,"Xb":_glVertexAttrib3f,"u":_glVertexAttrib4f,"e":_glVertexAttribPointer,"Wb":_glViewport,"Ub":_glfwCreateWindow,"Tb":_glfwDefaultWindowHints,"Sb":_glfwDestroyWindow,"Rb":_glfwGetCursorPos,"Qb":_glfwGetKey,"s":_glfwGetTime,"Pb":_glfwInit,"Ob":_glfwMakeContextCurrent,"Nb":_glfwSetCharCallback,"Mb":_glfwSetCursorEnterCallback,"Kb":_glfwSetCursorPosCallback,"Jb":_glfwSetDropCallback,"Ib":_glfwSetErrorCallback,"Hb":_glfwSetKeyCallback,"Gb":_glfwSetMouseButtonCallback,"Fb":_glfwSetScrollCallback,"Eb":_glfwSetWindowIconifyCallback,"Db":_glfwSetWindowShouldClose,"Cb":_glfwSetWindowSizeCallback,"Bb":_glfwSwapBuffers,"K":_glfwTerminate,"m":_glfwWindowHint,"J":_llvm_stackrestore,"I":_llvm_stacksave,"zb":_nanosleep,"yb":_time,"xb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["se"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["te"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["we"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["He"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["Ie"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Je"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["De"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["Ge"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i<argc;i++){HEAP32[(argv>>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_yaw_pitch_roll.wasm b/examples/web/models/models_yaw_pitch_roll.wasm Binary files differnew file mode 100644 index 0000000..3d8e1d1 --- /dev/null +++ b/examples/web/models/models_yaw_pitch_roll.wasm |
