whisper-web-transcriber
Version:
Real-time audio transcription in the browser using OpenAI's Whisper model via WebAssembly
1 lines • 1.51 MB
JavaScript
!function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).WhisperTranscriber={})}(this,(function(A){"use strict";window.LIBSTREAM_WORKER_CODE='"use strict";var Module={};if(typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string"){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",function(data){onmessage({data:data})});var nodeFS=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(nodeFS.readFileSync(f,"utf8"))},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=((info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports});self.onmessage=(e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInit();if(!initializedJS){Module["___embind_register_native_and_builtin_types"]();initializedJS=true}try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(Module["keepRuntimeAlive"]()){Module["PThread"].setExitStatus(result)}else{Module["__emscripten_thread_exit"](result)}}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);throw ex}});\n',window.HELPERS_CODE="// Common Javascript functions used by the examples\n\nfunction convertTypedArray(src, type) {\n var buffer = new ArrayBuffer(src.byteLength);\n var baseView = new src.constructor(buffer).set(src);\n return new type(buffer);\n}\n\nvar printTextarea = (function() {\n var element = document.getElementById('output');\n if (element) element.value = ''; // clear browser cache\n return function(text) {\n if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');\n console.log(text);\n if (element) {\n element.value += text + \"\\n\";\n element.scrollTop = element.scrollHeight; // focus on bottom\n }\n };\n})();\n\nasync function clearCache() {\n if (confirm('Are you sure you want to clear the cache?\\nAll the models will be downloaded again.')) {\n indexedDB.deleteDatabase(dbName);\n location.reload();\n }\n}\n\n// fetch a remote file from remote URL using the Fetch API\nasync function fetchRemote(url, cbProgress, cbPrint) {\n cbPrint('fetchRemote: downloading with fetch()...');\n\n const response = await fetch(\n url,\n {\n method: 'GET',\n }\n );\n\n if (!response.ok) {\n cbPrint('fetchRemote: failed to fetch ' + url);\n return;\n }\n\n const contentLength = response.headers.get('content-length');\n const total = parseInt(contentLength, 10);\n const reader = response.body.getReader();\n\n var chunks = [];\n var receivedLength = 0;\n var progressLast = -1;\n\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n break;\n }\n\n chunks.push(value);\n receivedLength += value.length;\n\n if (contentLength) {\n cbProgress(receivedLength/total);\n\n var progressCur = Math.round((receivedLength / total) * 10);\n if (progressCur != progressLast) {\n cbPrint('fetchRemote: fetching ' + 10*progressCur + '% ...');\n progressLast = progressCur;\n }\n }\n }\n\n var position = 0;\n var chunksAll = new Uint8Array(receivedLength);\n\n for (var chunk of chunks) {\n chunksAll.set(chunk, position);\n position += chunk.length;\n }\n\n return chunksAll;\n}\n\n// load remote data\n// - check if the data is already in the IndexedDB\n// - if not, fetch it from the remote URL and store it in the IndexedDB\nfunction loadRemote(url, dst, size_mb, cbProgress, cbReady, cbCancel, cbPrint) {\n if (!navigator.storage || !navigator.storage.estimate) {\n cbPrint('loadRemote: navigator.storage.estimate() is not supported');\n } else {\n // query the storage quota and print it\n navigator.storage.estimate().then(function (estimate) {\n cbPrint('loadRemote: storage quota: ' + estimate.quota + ' bytes');\n cbPrint('loadRemote: storage usage: ' + estimate.usage + ' bytes');\n });\n }\n\n // check if the data is already in the IndexedDB\n var rq = indexedDB.open(dbName, dbVersion);\n\n rq.onupgradeneeded = function (event) {\n var db = event.target.result;\n if (db.version == 1) {\n var os = db.createObjectStore('models', { autoIncrement: false });\n cbPrint('loadRemote: created IndexedDB ' + db.name + ' version ' + db.version);\n } else {\n // clear the database\n var os = event.currentTarget.transaction.objectStore('models');\n os.clear();\n cbPrint('loadRemote: cleared IndexedDB ' + db.name + ' version ' + db.version);\n }\n };\n\n rq.onsuccess = function (event) {\n var db = event.target.result;\n var tx = db.transaction(['models'], 'readonly');\n var os = tx.objectStore('models');\n var rq = os.get(url);\n\n rq.onsuccess = function (event) {\n if (rq.result) {\n cbPrint('loadRemote: \"' + url + '\" is already in the IndexedDB');\n cbReady(dst, rq.result);\n } else {\n // data is not in the IndexedDB\n cbPrint('loadRemote: \"' + url + '\" is not in the IndexedDB');\n\n // alert and ask the user to confirm\n if (!confirm(\n 'You are about to download ' + size_mb + ' MB of data.\\n' +\n 'The model data will be cached in the browser for future use.\\n\\n' +\n 'Press OK to continue.')) {\n cbCancel();\n return;\n }\n\n fetchRemote(url, cbProgress, cbPrint).then(function (data) {\n if (data) {\n // store the data in the IndexedDB\n var rq = indexedDB.open(dbName, dbVersion);\n rq.onsuccess = function (event) {\n var db = event.target.result;\n var tx = db.transaction(['models'], 'readwrite');\n var os = tx.objectStore('models');\n\n var rq = null;\n try {\n var rq = os.put(data, url);\n } catch (e) {\n cbPrint('loadRemote: failed to store \"' + url + '\" in the IndexedDB: \\n' + e);\n cbCancel();\n return;\n }\n\n rq.onsuccess = function (event) {\n cbPrint('loadRemote: \"' + url + '\" stored in the IndexedDB');\n cbReady(dst, data);\n };\n\n rq.onerror = function (event) {\n cbPrint('loadRemote: failed to store \"' + url + '\" in the IndexedDB');\n cbCancel();\n };\n };\n }\n });\n }\n };\n\n rq.onerror = function (event) {\n cbPrint('loadRemote: failed to get data from the IndexedDB');\n cbCancel();\n };\n };\n\n rq.onerror = function (event) {\n cbPrint('loadRemote: failed to open IndexedDB');\n cbCancel();\n };\n\n rq.onblocked = function (event) {\n cbPrint('loadRemote: failed to open IndexedDB: blocked');\n cbCancel();\n };\n\n rq.onabort = function (event) {\n cbPrint('loadRemote: failed to open IndexedDB: abort');\n cbCancel();\n };\n}\n",window.LIBSTREAM_CODE='var Module=typeof Module!=="undefined"?Module:{};var objAssign=Object.assign;var moduleOverrides=objAssign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";var ENVIRONMENT_IS_PTHREAD=Module["ENVIRONMENT_IS_PTHREAD"]||false;var _scriptDir=typeof document!=="undefined"&&document.currentScript?document.currentScript.src:undefined;if(ENVIRONMENT_IS_WORKER){_scriptDir=self.location.href}else if(ENVIRONMENT_IS_NODE){_scriptDir=__filename}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toLog=e;err("exiting due to exception: "+toLog)}var fs;var nodePath;var requireNodeFS;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}requireNodeFS=(()=>{if(!nodePath){fs=require("fs");nodePath=require("path")}});read_=function shell_read(filename,binary){var ret=tryParseAsDataURI(filename);if(ret){return binary?ret:ret.toString()}requireNodeFS();filename=nodePath["normalize"](filename);return fs.readFileSync(filename,binary?null:"utf8")};readBinary=(filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret});readAsync=((filename,onload,onerror)=>{var ret=tryParseAsDataURI(filename);if(ret){onload(ret)}requireNodeFS();filename=nodePath["normalize"](filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})});if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",function(reason){throw reason});quit_=((status,toThrow)=>{if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}logExceptionOnExit(toThrow);process["exit"](status)});Module["inspect"]=function(){return"[Emscripten Module object]"};let nodeWorkerThreads;try{nodeWorkerThreads=require("worker_threads")}catch(e){console.error(\'The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?\');throw e}global.Worker=nodeWorkerThreads.Worker}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}if(!ENVIRONMENT_IS_NODE){read_=(url=>{try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}});if(ENVIRONMENT_IS_WORKER){readBinary=(url=>{try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}})}readAsync=((url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=(()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()});xhr.onerror=onerror;xhr.send(null)})}setWindowTitle=(title=>document.title=title)}else{}if(ENVIRONMENT_IS_NODE){if(typeof performance==="undefined"){global.performance=require("perf_hooks").performance}}var defaultPrint=console.log.bind(console);var defaultPrintErr=console.warn.bind(console);if(ENVIRONMENT_IS_NODE){requireNodeFS();defaultPrint=(str=>fs.writeSync(1,str+"\\n"));defaultPrintErr=(str=>fs.writeSync(2,str+"\\n"))}var out=Module["print"]||defaultPrint;var err=Module["printErr"]||defaultPrintErr;objAssign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var tempRet0=0;var setTempRet0=value=>{tempRet0=value};var Atomics_load=Atomics.load;var Atomics_store=Atomics.store;var Atomics_compareExchange=Atomics.compareExchange;var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var wasmModule;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}function getCFunc(ident){var func=Module["_"+ident];return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);function onDone(ret){if(stack!==0)stackRestore(stack);return convertReturnValue(ret)}ret=onDone(ret);return ret}function cwrap(ident,returnType,argTypes,opts){argTypes=argTypes||[];var numericArgs=argTypes.every(function(type){return type==="number"});var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return function(){return ccall(ident,returnType,argTypes,arguments,opts)}}function TextDecoderWrapper(encoding){var textDecoder=new TextDecoder(encoding);this.decode=(data=>{if(data.buffer instanceof SharedArrayBuffer){data=new Uint8Array(data)}return textDecoder.decode.call(textDecoder,data)})}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoderWrapper("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[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,heap,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;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<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 TextDecoderWrapper("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite<str.length*2?maxBytesToWrite/2:str.length;for(var i=0;i<numCharsToWrite;++i){var codeUnit=str.charCodeAt(i);HEAP16[outPtr>>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i<str.length;++i){var codeUnit=str.charCodeAt(i);if(codeUnit>=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i<str.length;++i){var codeUnit=str.charCodeAt(i);if(codeUnit>=55296&&codeUnit<=57343)++i;len+=4}return len}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;if(ENVIRONMENT_IS_PTHREAD){buffer=Module["buffer"]}function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||1073741824;if(ENVIRONMENT_IS_PTHREAD){wasmMemory=Module["wasmMemory"];buffer=Module["buffer"]}else{if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_MEMORY/65536,"maximum":INITIAL_MEMORY/65536,"shared":true});if(!(wasmMemory.buffer instanceof SharedArrayBuffer)){err("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag");if(ENVIRONMENT_IS_NODE){console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)")}throw Error("bad memory")}}}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(ENVIRONMENT_IS_PTHREAD)return;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function exitRuntime(){if(ENVIRONMENT_IS_PTHREAD)return;PThread.terminateAllThreads();runtimeExited=true}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(ENVIRONMENT_IS_PTHREAD){postMessage({"cmd":"onAbort","arg":what})}else{if(Module["onAbort"]){Module["onAbort"](what)}}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="data:application/octet-stream;base64,AGFzbQEAAAABwwVaYAF/AX9gAX8AYAJ/fwF/YAJ/fwBgA39/fwF/YAN/f34AYAN/f38AYAR/f39/AX9gBn9/f39/fwF/YAR/f39/AGAFf39/f38Bf2AAAGAFf39/f38AYAh/f39/f39/fwBgAAF/YAZ/f39/f38AYAh/f39/f39/fwF/YAd/f39/f39/AX9gAX0BfWAHf39/f39/fwBgBX9+fn5+AGADf35/AX5gBX9/f39+AX9gBH9/f38BfmAKf39/f39/f39/fwBgA39/fwF8YAR/f35+AX9gBH9+fn8AYAp/f39/f39/f39/AX9gCX9/f39/f39/fwBgB39/f39/fn4Bf2AGf39/f35+AX9gBX9/fn9/AGADf398AX9gAAF+YAV/f35+fgF/YAJ/fgBgAXwBfWADf399AX9gAnx/AXxgDH9/f39/f39/f39/fwF/YAN/fn8Bf2AEf39/fQF8YA9/f39/f39/f39/f39/f38AYAt/f39/f39/f39/fwF/YAZ/fH9/f38Bf2ABfAF8YAN/f30AYAl/f39/f39/f38Bf2AFf39/f3wBf2AAAXxgA39/fgF/YAF9AX9gBH9/fn8Bf2ACf3wAYAh/f35+fn9/fwF/YAR+fn5+AX9gBn9/fn5/fwF/YAJ+fwF/YAJ9fQF9YAV/f39/fQBgBn9/f35+fwF/YAN+fn4Bf2ACfn4BfGACfHwBfGAGf39/f399AX9gBH9/f30Bf2ADf39/AX1gBH9/f34BfmACfn4BfWACf38BfmABfwF+YAF+AX9gBH9/fX8AYAF9AGACf30AYAJ9fQBgA399fQBgA319fQBgBH99fX0AYAR9fX19AGAFf319fX0AYAt/f39/f39/f39/fwBgAn1/AX9gBn9/f399fwBgBn9/fX19fwBgBX9+fn5+AX9gBH9/fn4AYAV/f399fQBgBH9/f38BfALFAjUBYQFiAAYBYQFjAAABYQFkAAYBYQFlAAsBYQFmAAEBYQFnAAwBYQFoADIBYQFpAA8BYQFqAAIBYQFrAAABYQFsAAYBYQFtAAEBYQFuAAEBYQFvAAsBYQFwAAcBYQFxAAABYQFyAAcBYQFzAAQBYQF0AAMBYQF1AAYBYQF2AAIBYQF3AAABYQF4AAEBYQF5ABkBYQF6AAoBYQFBABMBYQFCAAEBYQFDAAoBYQFEAAABYQFF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