@wllama/wllama
Version:
WebAssembly binding for llama.cpp - Enabling on-browser LLM inference
1 lines • 326 kB
JavaScript
var __defProp=Object.defineProperty,__defProps=Object.defineProperties,__getOwnPropDescs=Object.getOwnPropertyDescriptors,__getOwnPropSymbols=Object.getOwnPropertySymbols,__hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable,__knownSymbol=(e,r)=>(r=Symbol[e])?r:Symbol.for("Symbol."+e),__defNormalProp=(e,r,t)=>r in e?__defProp(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,__spreadValues=(e,r)=>{for(var t in r||(r={}))__hasOwnProp.call(r,t)&&__defNormalProp(e,t,r[t]);if(__getOwnPropSymbols)for(var t of __getOwnPropSymbols(r))__propIsEnum.call(r,t)&&__defNormalProp(e,t,r[t]);return e},__spreadProps=(e,r)=>__defProps(e,__getOwnPropDescs(r)),__publicField=(e,r,t)=>__defNormalProp(e,"symbol"!=typeof r?r+"":r,t),__async=(e,r,t)=>new Promise(((a,n)=>{var s=e=>{try{o(t.next(e))}catch(e){n(e)}},i=e=>{try{o(t.throw(e))}catch(e){n(e)}},o=e=>e.done?a(e.value):Promise.resolve(e.value).then(s,i);o((t=t.apply(e,r)).next())})),__await=function(e,r){this[0]=e,this[1]=r},__asyncGenerator=(e,r,t)=>{var a=(e,r,n,s)=>{try{var i=t[e](r),o=(r=i.value)instanceof __await,l=i.done;Promise.resolve(o?r[0]:r).then((t=>o?a("return"===e?e:"next",r[1]?{done:t.done,value:t.value}:t,n,s):n({value:t,done:l}))).catch((e=>a("throw",e,n,s)))}catch(e){s(e)}},n=e=>s[e]=r=>new Promise(((t,n)=>a(e,r,t,n))),s={};return t=t.apply(e,r),s[__knownSymbol("asyncIterator")]=()=>s,n("next"),n("throw"),n("return"),s},__forAwait=(e,r,t)=>(r=e[__knownSymbol("asyncIterator")])?r.call(e):(e=e[__knownSymbol("iterator")](),r={},(t=(t,a)=>(a=e[t])&&(r[t]=r=>new Promise(((t,n,s)=>(r=a.call(e,r),s=r.done,Promise.resolve(r.value).then((e=>t({value:e,done:s})),n))))))("next"),t("return"),r),GLUE_VERSION=1,GLUE_MESSAGE_PROTOTYPES={erro_evt:{name:"erro_evt",structName:"glue_msg_error",className:"GlueMsgError",fields:[{type:"str",name:"message",isNullable:!1}]},load_req:{name:"load_req",structName:"glue_msg_load_req",className:"GlueMsgLoadReq",fields:[{type:"arr_str",name:"model_paths",isNullable:!1},{type:"str",name:"mmproj_path",isNullable:!0},{type:"bool",name:"n_ctx_auto",isNullable:!1},{type:"bool",name:"use_mmap",isNullable:!1},{type:"bool",name:"use_mlock",isNullable:!1},{type:"int",name:"n_gpu_layers",isNullable:!1},{type:"int",name:"n_ctx",isNullable:!1},{type:"int",name:"n_threads",isNullable:!1},{type:"str",name:"model_alias",isNullable:!0},{type:"int",name:"log_level",isNullable:!0},{type:"bool",name:"embeddings",isNullable:!0},{type:"bool",name:"offload_kqv",isNullable:!0},{type:"int",name:"n_batch",isNullable:!0},{type:"int",name:"n_ubatch",isNullable:!0},{type:"int",name:"n_parallel",isNullable:!0},{type:"str",name:"pooling_type",isNullable:!0},{type:"str",name:"rope_scaling_type",isNullable:!0},{type:"float",name:"rope_freq_base",isNullable:!0},{type:"float",name:"rope_freq_scale",isNullable:!0},{type:"float",name:"yarn_ext_factor",isNullable:!0},{type:"float",name:"yarn_attn_factor",isNullable:!0},{type:"float",name:"yarn_beta_fast",isNullable:!0},{type:"float",name:"yarn_beta_slow",isNullable:!0},{type:"int",name:"yarn_orig_ctx",isNullable:!0},{type:"str",name:"cache_type_k",isNullable:!0},{type:"str",name:"cache_type_v",isNullable:!0},{type:"bool",name:"kv_unified",isNullable:!0},{type:"bool",name:"flash_attn",isNullable:!0},{type:"bool",name:"swa_full",isNullable:!0},{type:"int",name:"n_ctx_checkpoints",isNullable:!0},{type:"int",name:"checkpoint_min_step",isNullable:!0},{type:"str",name:"chat_template",isNullable:!0},{type:"bool",name:"jinja",isNullable:!0},{type:"arr_str",name:"default_template_kwargs_keys",isNullable:!0},{type:"arr_str",name:"default_template_kwargs_vals",isNullable:!0},{type:"bool",name:"reasoning",isNullable:!0},{type:"int",name:"image_min_tokens",isNullable:!0},{type:"int",name:"image_max_tokens",isNullable:!0},{type:"bool",name:"warmup",isNullable:!0},{type:"bool",name:"no_kv_offload",isNullable:!0},{type:"bool",name:"mmproj_offload",isNullable:!0},{type:"bool",name:"cont_batching",isNullable:!0},{type:"int",name:"n_keep",isNullable:!0},{type:"bool",name:"ctx_shift",isNullable:!0},{type:"bool",name:"cache_idle_slots",isNullable:!0},{type:"int",name:"n_cache_reuse",isNullable:!0},{type:"arr_str",name:"lora_paths",isNullable:!0},{type:"arr_float",name:"lora_scales",isNullable:!0},{type:"bool",name:"lora_init_without_apply",isNullable:!0},{type:"str",name:"spec_draft_model",isNullable:!0},{type:"int",name:"spec_draft_ngl",isNullable:!0},{type:"int",name:"spec_draft_n_max",isNullable:!0},{type:"int",name:"spec_draft_n_min",isNullable:!0},{type:"float",name:"spec_draft_p_min",isNullable:!0},{type:"int",name:"spec_draft_threads",isNullable:!0},{type:"int",name:"spec_draft_threads_batch",isNullable:!0},{type:"arr_str",name:"kv_overrides_keys",isNullable:!0},{type:"arr_str",name:"kv_overrides_vals",isNullable:!0},{type:"int",name:"reasoning_budget_tokens",isNullable:!0},{type:"str",name:"reasoning_budget_message",isNullable:!0},{type:"str",name:"reasoning_format",isNullable:!0},{type:"bool",name:"skip_chat_parsing",isNullable:!0},{type:"bool",name:"prefill_assistant",isNullable:!0}]},load_res:{name:"load_res",structName:"glue_msg_load_res",className:"GlueMsgLoadRes",fields:[{type:"bool",name:"success",isNullable:!1},{type:"int",name:"n_ctx",isNullable:!1},{type:"int",name:"n_batch",isNullable:!1},{type:"int",name:"n_ubatch",isNullable:!1},{type:"int",name:"n_vocab",isNullable:!1},{type:"int",name:"n_ctx_train",isNullable:!1},{type:"int",name:"n_embd",isNullable:!1},{type:"int",name:"n_layer",isNullable:!1},{type:"arr_str",name:"metadata_key",isNullable:!1},{type:"arr_str",name:"metadata_val",isNullable:!1},{type:"int",name:"token_bos",isNullable:!1},{type:"int",name:"token_eos",isNullable:!1},{type:"int",name:"token_eot",isNullable:!1},{type:"arr_int",name:"list_tokens_eog",isNullable:!1},{type:"bool",name:"add_bos_token",isNullable:!1},{type:"bool",name:"add_eos_token",isNullable:!1},{type:"bool",name:"has_encoder",isNullable:!1},{type:"int",name:"token_decoder_start",isNullable:!1},{type:"str",name:"media_marker",isNullable:!1},{type:"bool",name:"has_image_input",isNullable:!1},{type:"bool",name:"has_audio_input",isNullable:!1}]},cmpl_req:{name:"cmpl_req",structName:"glue_msg_completion_req",className:"GlueMsgCompletionReq",fields:[{type:"bool",name:"is_chat",isNullable:!1},{type:"str",name:"data_json",isNullable:!1},{type:"arr_raw",name:"files",isNullable:!1}]},cmpl_res:{name:"cmpl_res",structName:"glue_msg_completion_res",className:"GlueMsgCompletionRes",fields:[{type:"bool",name:"success",isNullable:!1},{type:"int",name:"req_id",isNullable:!1}]},embd_req:{name:"embd_req",structName:"glue_msg_embedding_req",className:"GlueMsgEmbeddingReq",fields:[{type:"str",name:"data_json",isNullable:!1},{type:"arr_raw",name:"files",isNullable:!1}]},embd_res:{name:"embd_res",structName:"glue_msg_embedding_res",className:"GlueMsgEmbeddingRes",fields:[{type:"bool",name:"success",isNullable:!1},{type:"int",name:"req_id",isNullable:!1}]},rrnk_req:{name:"rrnk_req",structName:"glue_msg_rerank_req",className:"GlueMsgRerankReq",fields:[{type:"str",name:"data_json",isNullable:!1}]},rrnk_res:{name:"rrnk_res",structName:"glue_msg_rerank_res",className:"GlueMsgRerankRes",fields:[{type:"bool",name:"success",isNullable:!1},{type:"int",name:"req_id",isNullable:!1}]},gres_req:{name:"gres_req",structName:"glue_msg_get_result_req",className:"GlueMsgGetResultReq",fields:[{type:"int",name:"req_id",isNullable:!1}]},gres_res:{name:"gres_res",structName:"glue_msg_get_result_res",className:"GlueMsgGetResultRes",fields:[{type:"bool",name:"success",isNullable:!1},{type:"bool",name:"has_more",isNullable:!1},{type:"bool",name:"is_error",isNullable:!1},{type:"str",name:"data_json",isNullable:!1}]},cncl_req:{name:"cncl_req",structName:"glue_msg_cancel_req",className:"GlueMsgCancelReq",fields:[{type:"int",name:"req_id",isNullable:!1}]},cncl_res:{name:"cncl_res",structName:"glue_msg_cancel_res",className:"GlueMsgCancelRes",fields:[{type:"bool",name:"success",isNullable:!1}]},tbop_req:{name:"tbop_req",structName:"glue_msg_test_backend_ops_req",className:"GlueMsgTestBackendOpsReq",fields:[{type:"arr_str",name:"args",isNullable:!1}]},tbop_res:{name:"tbop_res",structName:"glue_msg_test_backend_ops_res",className:"GlueMsgTestBackendOpsRes",fields:[{type:"int",name:"retcode",isNullable:!1},{type:"bool",name:"success",isNullable:!1}]}},GLUE_MAGIC=new Uint8Array([71,76,85,69]),GLUE_DTYPE_NULL=0,GLUE_DTYPE_BOOL=1,GLUE_DTYPE_INT=2,GLUE_DTYPE_FLOAT=3,GLUE_DTYPE_STRING=4,GLUE_DTYPE_RAW=5,GLUE_DTYPE_ARRAY_BOOL=6,GLUE_DTYPE_ARRAY_INT=7,GLUE_DTYPE_ARRAY_FLOAT=8,GLUE_DTYPE_ARRAY_STRING=9,GLUE_DTYPE_ARRAY_RAW=10,TYPE_MAP={str:GLUE_DTYPE_STRING,int:GLUE_DTYPE_INT,float:GLUE_DTYPE_FLOAT,bool:GLUE_DTYPE_BOOL,raw:GLUE_DTYPE_RAW,arr_str:GLUE_DTYPE_ARRAY_STRING,arr_int:GLUE_DTYPE_ARRAY_INT,arr_float:GLUE_DTYPE_ARRAY_FLOAT,arr_bool:GLUE_DTYPE_ARRAY_BOOL,arr_raw:GLUE_DTYPE_ARRAY_RAW,null:GLUE_DTYPE_NULL};function glueDeserialize(e){let r=0;const t=new DataView(e.buffer),a=()=>{const e=t.getUint32(r,!0);return r+=4,e},n=()=>{const e=t.getInt32(r,!0);return r+=4,e},s=()=>{const e=t.getFloat32(r,!0);return r+=4,e},i=()=>0!==a(),o=t=>{const n=null!=t?t:a(),s=(new TextDecoder).decode(e.slice(r,r+n));return r+=n,s},l=()=>{const t=a(),n=e.slice(r,r+t);return r+=t,n},u=e=>{const r=a(),t=new Array(r);for(let a=0;a<r;a++)t[a]=e();return t},d=e=>{switch(e.type){case"str":return o();case"int":return n();case"float":return s();case"bool":return i();case"raw":return l();case"arr_str":return u(o);case"arr_int":return u(n);case"arr_float":return u(s);case"arr_bool":return u(i);case"arr_raw":return u(l);case"null":return null}},m=e[0]===GLUE_MAGIC[0]&&e[1]===GLUE_MAGIC[1]&&e[2]===GLUE_MAGIC[2]&&e[3]===GLUE_MAGIC[3];if(r+=4,!m)throw new Error("Invalid magic number");if(a()!==GLUE_VERSION)throw new Error("Invalid version number");const c=o(8),p=GLUE_MESSAGE_PROTOTYPES[c];if(!p)throw new Error(`Unknown message name: ${c}`);const f={_name:c};for(const e of p.fields){const r=a();if(r!==GLUE_DTYPE_NULL){if(r!==TYPE_MAP[e.type])throw new Error(`${c}: Expect field ${e.name} to have type ${e.type}`);f[e.name]=d(e)}else{if(!e.isNullable)throw new Error(`${c}: Expect field ${e.name} to be non-nullable`);f[e.name]=null}}return f}function glueSerialize(e){const r=GLUE_MESSAGE_PROTOTYPES[e._name];if(!r)throw new Error(`Unknown message name: ${e._name}`);const t=[],a=e=>{const r=new ArrayBuffer(4);new DataView(r).setUint32(0,e,!0),t.push(new Uint8Array(r))},n=e=>{const r=new ArrayBuffer(4);new DataView(r).setInt32(0,e,!0),t.push(new Uint8Array(r))},s=e=>{const r=new ArrayBuffer(4);new DataView(r).setFloat32(0,e,!0),t.push(new Uint8Array(r))},i=e=>{a(e?1:0)},o=e=>{const r=(new TextEncoder).encode(e);a(r.byteLength),t.push(r)},l=e=>{a(e.byteLength),t.push(e)},u=(e,r)=>{a(e.length);for(const t of e)r(t)};t.push(GLUE_MAGIC),a(GLUE_VERSION);{const r=(new TextEncoder).encode(e._name);t.push(r)}for(const t of r.fields){const r=e[t.name];if(!t.isNullable&&null==r)throw new Error(`${e._name}: Expect field ${t.name} to be non-nullable`);if(null!=r)switch(a(TYPE_MAP[t.type]),t.type){case"str":o(r);break;case"int":n(r);break;case"float":s(r);break;case"bool":i(r);break;case"raw":l(r);break;case"arr_str":u(r,o);break;case"arr_int":u(r,n);break;case"arr_float":u(r,s);break;case"arr_bool":u(r,i);break;case"arr_raw":u(r,l)}else a(GLUE_DTYPE_NULL)}const d=t.reduce(((e,r)=>e+r.byteLength),0),m=new Uint8Array(d);let c=0;for(const e of t)m.set(e,c),c+=e.byteLength;return m}var WASM_SOURCE_MAP={default:"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",compat:"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"},cache=new Map;function loadMap(e){return __async(this,null,(function*(){if(cache.has(e))return cache.get(e);const r=WASM_SOURCE_MAP[e];if(!r)throw new Error(`No source map for build "${e}"`);const t=Uint8Array.from(atob(r),(e=>e.charCodeAt(0))),a=new DecompressionStream("gzip"),n=a.writable.getWriter();n.write(t),n.close();const s=yield new Response(a.readable).arrayBuffer(),i=new DataView(s),o=new Uint8Array(s),l=i.getUint32(0,!0),u=i.getUint32(4,!0),d=i.getUint32(8,!0),m=new TextDecoder,c=[];let p=12;for(let e=0;e<d;e++){const e=o[p++];c.push(m.decode(o.subarray(p,p+e))),p+=e}const f=[];for(let e=0;e<u;e++){const e=i.getUint16(p,!0);p+=2,f.push(65535===e?null:c[e])}const g={firstId:l,funcNames:f};return cache.set(e,g),g}))}var Debug={decodeFuncIds:(e,r)=>__async(void 0,null,(function*(){const t=r?"compat":"default",{firstId:a,funcNames:n}=yield loadMap(t);return e.map((e=>{const r=e-a;return{funcId:e,name:r>=0&&r<n.length&&n[r]?n[r]:"(unknown)"}}))})),decodeStackTrace:(e,r)=>__async(void 0,null,(function*(){const t=[...new Set([...e.matchAll(/wasm-function\[(\d+)\]/g)].map((e=>parseInt(e[1]))))];if(0===t.length)return e;return(yield Debug.decodeFuncIds(t,r)).map((e=>"(unknown)"===e.name?` wasm-func[${e.funcId}] (unknown)`:` wasm-func[${e.funcId}] (${e.name})`)).join("\n")}))},textDecoder=new TextDecoder,URL_PARTS_REGEX=/-(\d{5})-of-(\d{5})\.gguf(?:\?.*)?$/,parseShardNumber=e=>{const r=e.match(URL_PARTS_REGEX);return r?{baseURL:e.replace(URL_PARTS_REGEX,""),current:parseInt(r[1]),total:parseInt(r[2])}:{baseURL:e,current:1,total:1}},sortFileByShard=e=>{if(e.every((e=>!!e.name))&&e.length>1){e.sort(((e,r)=>{const t=parseShardNumber(e.name),a=parseShardNumber(r.name);return t.current-a.current}))}},isMmproj=e=>__async(void 0,null,(function*(){const r=e.slice(0,131072),t=yield r.arrayBuffer(),a=new Uint8Array(t),n=(new TextEncoder).encode("general.architecture"),s=(new TextEncoder).encode("clip");let i=-1;e:for(let e=0;e<=a.length-n.length;e++){for(let r=0;r<n.length;r++)if(a[e+r]!==n[r])continue e;i=e;break}if(-1===i)return!1;if(i+32+4>a.length)return!1;if(new DataView(t).getBigUint64(i+24,!0)!==BigInt("4"))return!1;for(let e=0;e<s.length;e++)if(a[i+32+e]!==s[e])return!1;return!0})),absoluteUrl=e=>"undefined"==typeof document?new URL(e,self.location.href).href:new URL(e,document.baseURI).href,padDigits=(e,r)=>Array(Math.max(r-String(e).length+1,0)).join("0")+e,sumArr=e=>e.reduce(((e,r)=>e+r),0),isString=e=>!!(null==e?void 0:e.startsWith),MMPROJ_FILE_NAME="mmproj.gguf",prepareBlobs=e=>__async(void 0,null,(function*(){const r=[];let t=null;for(const a of e)(yield isMmproj(a))?t=a:r.push(a);sortFileByShard(r);const a=r.map(((e,t)=>({blob:e,name:`model-${padDigits(t+1,5)}-of-${padDigits(r.length,5)}.gguf`})));return t&&a.push({blob:t,name:MMPROJ_FILE_NAME}),{llm:a.filter((e=>e.name!==MMPROJ_FILE_NAME)),mmproj:t?{blob:t,name:MMPROJ_FILE_NAME}:null,all:a}})),isSupportMultiThread=()=>{return e=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]),__async(void 0,null,(function*(){try{return"undefined"!=typeof MessageChannel&&(new MessageChannel).port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(e)}catch(e){return!1}}));var e},isSupportExceptions=()=>__async(void 0,null,(function*(){return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,8,1,6,0,6,64,25,11,11]))})),isSupportSIMD=()=>__async(void 0,null,(function*(){return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]))})),isSupportJSPI=()=>!!WebAssembly.Suspending,isSupportWebGPU=()=>!!navigator.gpu,isSupportMem64=()=>{try{return new WebAssembly.Memory({address:"i64",initial:BigInt("1")}),!0}catch(e){return!1}},checkEnvironmentCompatible=()=>__async(void 0,null,(function*(){if(!(yield isSupportExceptions()))throw new Error("WebAssembly runtime does not support exception handling");if(!(yield isSupportSIMD()))throw new Error("WebAssembly runtime does not support SIMD")})),isFirefox=()=>!!navigator.userAgent.match(/Firefox\/([0-9\.]+)(?:\s|$)/),GGUF_FILE_REGEX=/^.*\.gguf(?:\?.*)?$/,isValidGgufFile=e=>GGUF_FILE_REGEX.test(e),isSafariMobile=()=>!!navigator.userAgent.match(/Version\/([0-9\._]+).*Mobile.*Safari.*/),createWorker=e=>{const r=URL.createObjectURL(isString(e)?new Blob([e],{type:"text/javascript"}):e);return new Worker(r,{type:"module"})},cbToAsyncIter=e=>(...r)=>{let t,a,n=[];return n.push(new Promise(((e,r)=>{t=e,a=r}))),e(...r,((e,r,s)=>{s?a(s):(t([e,r]),n.push(new Promise(((e,r)=>{t=e,a=r}))))})),function(){return __asyncGenerator(this,null,(function*(){let e;for(let r=0,t=!1;!t;r++)[e,t]=yield new __await(n[r]),delete n[r],void 0!==e&&(yield e)}))}()},canUseAsyncFileRead=e=>isSupportJSPI()||e,needCompat=()=>!isSupportJSPI()||!isSupportMem64(),LIBLLAMA_VERSION="b10663-83d855c",LLAMA_CPP_WORKER_CODE="// Start the main llama.cpp\nlet wllamaMalloc;\nlet wllamaStart;\nlet wllamaAction;\nlet wllamaExit;\nlet wllamaDebug;\n\nlet Module = null;\nlet isCompat = false;\nlet lastStack = '';\nlet isAborted = false;\nlet hasMultithread = false;\n\n//////////////////////////////////////////////////////////////\n// UTILS\n//////////////////////////////////////////////////////////////\n\n// send message back to main thread\nconst msg = (data, transfer) => postMessage(data, transfer);\n\n// Convert CPP log into JS log\nconst cppLogToJSLog = (line) => {\n const matched = line.match(/@@(DEBUG|INFO|WARN|ERROR)@@(.*)/);\n return !!matched\n ? {\n level: (matched[1] === 'INFO' ? 'debug' : matched[1]).toLowerCase(),\n text: matched[2],\n }\n : { level: 'log', text: line };\n};\n\nconst getHeapU8 = () => {\n const buffer = Module.wasmMemory.buffer;\n return new Uint8Array(buffer);\n};\n\nconst toSizeT = (num) => {\n return isCompat ? Number(num) : BigInt(num);\n};\n\n// Get module config that forwards stdout/err to main thread\nconst getWModuleConfig = (_argMainScriptBlob) => {\n var pathConfig = RUN_OPTIONS.pathConfig;\n var pthreadPoolSize = RUN_OPTIONS.nbThread;\n var argMainScriptBlob = _argMainScriptBlob;\n\n isCompat = RUN_OPTIONS.compat;\n hasMultithread = pthreadPoolSize > 1;\n\n msg({\n verb: 'console.debug',\n args: [\n `Multithread enabled: ${hasMultithread}, pthreadPoolSize: ${pthreadPoolSize}`,\n ],\n });\n\n if (!pathConfig['wllama.wasm']) {\n throw new Error('\"wllama.wasm\" is missing in pathConfig');\n }\n return {\n noInitialRun: true,\n print: function (text) {\n if (arguments.length > 1)\n text = Array.prototype.slice.call(arguments).join(' ');\n msg({ verb: 'console.log', args: [text] });\n },\n printErr: function (text) {\n if (arguments.length > 1)\n text = Array.prototype.slice.call(arguments).join(' ');\n if (text.startsWith('@@STACK@@')) {\n lastStack = text.slice('@@STACK@@'.length);\n return;\n }\n const logLine = cppLogToJSLog(text);\n msg({ verb: 'console.' + logLine.level, args: [logLine.text] });\n },\n locateFile: function (filename, basePath) {\n const p = pathConfig[filename];\n const truncate = (str) =>\n str.length > 128 ? `${str.substr(0, 128)}...` : str;\n if (filename.match(/wllama\\.worker\\.js/)) {\n msg({\n verb: 'console.error',\n args: [\n '\"wllama.worker.js\" is removed from v2.2.1. Hint: make sure to clear browser\\'s cache.',\n ],\n });\n } else {\n msg({\n verb: 'console.debug',\n args: [`Loading \"${filename}\" from \"${truncate(p)}\"`],\n });\n return p;\n }\n },\n mainScriptUrlOrBlob: hasMultithread\n ? argMainScriptBlob\n : 'throw new Error(\"Multithreading is not enabled\")',\n pthreadPoolSize: hasMultithread ? pthreadPoolSize : 0,\n wasmMemory: hasMultithread ? getWasmMemory() : null,\n onAbort: function (message) {\n isAborted = true;\n msg({ verb: 'signal.abort', args: ['abort', message, lastStack, null] });\n },\n onExit: function (code) {\n isAborted = true;\n const callstack = new Error().stack.toString();\n msg({\n verb: 'signal.abort',\n args: ['abort', 'exit(' + code + ')', callstack, null],\n });\n },\n };\n};\n\n// Get the memory to be used by wasm. (Only used in multi-thread mode)\n// Because we have a weird OOM issue on iOS, we need to try some values\n// See: https://github.com/emscripten-core/emscripten/issues/19144\n// https://github.com/godotengine/godot/issues/70621\nconst getWasmMemory = () => {\n let minBytes = 128 * 1024 * 1024;\n let maxBytes = 4096 * 1024 * 1024;\n let stepBytes = 128 * 1024 * 1024;\n while (maxBytes > minBytes) {\n try {\n const wasmMemory = new WebAssembly.Memory({\n initial: toSizeT(minBytes / 65536),\n maximum: toSizeT(maxBytes / 65536),\n shared: true,\n address: isCompat ? undefined : 'i64',\n });\n return wasmMemory;\n } catch (e) {\n maxBytes -= stepBytes;\n continue; // retry\n }\n }\n throw new Error('Cannot allocate WebAssembly.Memory');\n};\n\n//////////////////////////////////////////////////////////////\n// HEAPFS PATCH\n//////////////////////////////////////////////////////////////\n\n/**\n * By default, emscripten uses memfs. The way it works is by\n * allocating new Uint8Array in javascript heap. This is not good\n * because it requires files to be copied to wasm heap each time\n * a file is read.\n *\n * HeapFS is an alternative, which resolves this problem by\n * allocating space for file directly inside wasm heap. This\n * allows us to mmap without doing any copy.\n *\n * For llama.cpp, this is great because we use MAP_SHARED\n *\n * Ref: https://github.com/ngxson/wllama/pull/39\n * Ref: https://github.com/emscripten-core/emscripten/blob/main/src/library_memfs.js\n *\n * Note 29/05/2024 @ngxson\n * Due to ftell() being limited to MAX_LONG, we cannot load files bigger than 2^31 bytes (or 2GB)\n * Ref: https://github.com/emscripten-core/emscripten/blob/main/system/lib/libc/musl/src/stdio/ftell.c\n */\n\nconst fsNameToFile = {}; // map Name => File\nconst fsIdToFile = {}; // map ID => File\nlet currFileId = 0;\n\n// Patch and redirect memfs calls to wllama\nconst patchHeapFS = () => {\n const m = Module;\n // save functions\n m.MEMFS.stream_ops._read = m.MEMFS.stream_ops.read;\n m.MEMFS.stream_ops._write = m.MEMFS.stream_ops.write;\n m.MEMFS.stream_ops._llseek = m.MEMFS.stream_ops.llseek;\n m.MEMFS.stream_ops._allocate = m.MEMFS.stream_ops.allocate;\n m.MEMFS.stream_ops._mmap = m.MEMFS.stream_ops.mmap;\n m.MEMFS.stream_ops._msync = m.MEMFS.stream_ops.msync;\n\n const patchStream = (stream) => {\n const name = stream.node.name;\n if (fsNameToFile[name]) {\n const f = fsNameToFile[name];\n const ptr = Number(f.ptr);\n stream.node.contents = getHeapU8().subarray(ptr, ptr + f.size);\n stream.node.usedBytes = f.size;\n }\n };\n\n // replace \"read\" functions\n m.MEMFS.stream_ops.read = function (\n stream,\n buffer,\n offset,\n length,\n position\n ) {\n patchStream(stream);\n return m.MEMFS.stream_ops._read(stream, buffer, offset, length, position);\n };\n m.MEMFS.ops_table.file.stream.read = m.MEMFS.stream_ops.read;\n\n // replace \"llseek\" functions\n m.MEMFS.stream_ops.llseek = function (stream, offset, whence) {\n patchStream(stream);\n return m.MEMFS.stream_ops._llseek(stream, offset, whence);\n };\n m.MEMFS.ops_table.file.stream.llseek = m.MEMFS.stream_ops.llseek;\n\n // replace \"mmap\" functions\n m.MEMFS.stream_ops.mmap = function (stream, length, position, prot, flags) {\n patchStream(stream);\n const name = stream.node.name;\n if (fsNameToFile[name]) {\n const f = fsNameToFile[name];\n const mmapPtr = f.ptr + toSizeT(position);\n return {\n ptr: mmapPtr,\n allocated: false,\n };\n } else {\n return m.MEMFS.stream_ops._mmap(stream, length, position, prot, flags);\n }\n };\n m.MEMFS.ops_table.file.stream.mmap = m.MEMFS.stream_ops.mmap;\n\n // mount FS\n m.FS.mkdir('/models');\n m.FS.mount(m.MEMFS, { root: '.' }, '/models');\n};\n\n// Allocate a new file in wllama heapfs, returns file ID\nconst heapfsAlloc = (name, size, allocBuffer) => {\n if (size < 1) {\n throw new Error('File size must be bigger than 0');\n }\n const m = Module;\n const ptr = toSizeT(allocBuffer ? m.mmapAlloc(size) : 0);\n const file = {\n ptr: ptr,\n size: size,\n id: currFileId++,\n };\n fsIdToFile[file.id] = file;\n fsNameToFile[name] = file;\n return file.id;\n};\n\n// Add new file to wllama heapfs, return number of written bytes\nconst heapfsWrite = (id, buffer, offset) => {\n if (fsIdToFile[id]) {\n const { ptr, size } = fsIdToFile[id];\n const afterWriteByte = offset + buffer.byteLength;\n if (afterWriteByte > size) {\n throw new Error(\n `File ID ${id} write out of bound, afterWriteByte = ${afterWriteByte} while size = ${size}`\n );\n }\n getHeapU8().set(buffer, Number(ptr) + offset);\n return buffer.byteLength;\n } else {\n throw new Error(`File ID ${id} not found in heapfs`);\n }\n};\n\n//////////////////////////////////////////////////////////////\n// ASYNC FILE READ\n//////////////////////////////////////////////////////////////\n\nlet isAwaitReading = false;\nlet pendingReadPromise = null;\nlet pendingReadResolve = null;\nlet pendingReadReject = null;\n\nconst _stripModelsPrefix = (path) => path.replace(/^\\/?models\\//, '');\n\n// Called from EM_ASYNC_JS stub in wllama-fs.h (path is already a JS string)\nconst _wllama_js_file_read = async (path, offset, req_size, out_ptr) => {\n const name = _stripModelsPrefix(path);\n\n pendingReadPromise = new Promise((res, rej) => {\n pendingReadResolve = res;\n pendingReadReject = rej;\n });\n isAwaitReading = true;\n\n postMessage({ verb: 'fs.read_req', args: [name, offset, req_size] });\n\n let data;\n try {\n data = await pendingReadPromise;\n } finally {\n isAwaitReading = false;\n pendingReadResolve = null;\n pendingReadReject = null;\n }\n\n const bytes = new Uint8Array(data);\n getHeapU8().set(bytes, out_ptr);\n return toSizeT(bytes.length);\n};\n\n//////////////////////////////////////////////////////////////\n// MAIN CODE\n//////////////////////////////////////////////////////////////\n\nconst callWrapper = (name, ret, args, isAsync) => {\n const fn = Module.cwrap(\n name,\n ret,\n args,\n isAsync ? { async: true } : undefined\n );\n return async (action, req) => {\n // console.log(`Calling ${name} with action:`, action, 'and req:', req);\n let result;\n try {\n if (args.length === 2) {\n result = isAsync ? await fn(action, req) : fn(action, req);\n } else {\n result = fn();\n }\n } catch (ex) {\n console.error(ex);\n throw ex;\n }\n return result;\n };\n};\n\n// re-entering the wasm while a call is suspended (JSPI / asyncify) corrupts its state, so only one call runs at a time and the rest wait in the queue\nlet wasmCallBusy = false;\nconst wasmCallQueue = [];\n\nconst runWasmCall = async (callbackId, fn) => {\n if (isAborted) {\n // the wasm is dead, fail fast instead of calling into it\n msg({ callbackId, err: 'wllama has crashed, please reload the module' });\n return;\n }\n if (wasmCallBusy) {\n wasmCallQueue.push({ callbackId, fn });\n return;\n }\n wasmCallBusy = true;\n try {\n await fn();\n } finally {\n wasmCallBusy = false;\n if (isAborted) {\n // do not touch the wasm again after it aborted; the main thread already rejected the queued tasks\n wasmCallQueue.length = 0;\n } else {\n const next = wasmCallQueue.shift();\n if (next) runWasmCall(next.callbackId, next.fn);\n }\n }\n};\n\nconst runAction = async (data) => {\n const { args, callbackId } = data;\n const argAction = args[0];\n const argEncodedMsg = args[1];\n try {\n const inputPtr = await wllamaMalloc(toSizeT(argEncodedMsg.byteLength), 0);\n // copy data to wasm heap\n const inputBuffer = new Uint8Array(\n getHeapU8().buffer,\n Number(inputPtr),\n argEncodedMsg.byteLength\n );\n inputBuffer.set(argEncodedMsg, 0);\n const outputPtr = await wllamaAction(argAction, inputPtr);\n // length of output buffer is written at the first 4 bytes of input buffer\n const outputLen = new Uint32Array(\n getHeapU8().buffer,\n Number(inputPtr),\n 1\n )[0];\n // copy the output buffer to JS heap\n const outputBuffer = new Uint8Array(outputLen);\n const outputSrcView = new Uint8Array(\n getHeapU8().buffer,\n Number(outputPtr),\n outputLen\n );\n outputBuffer.set(outputSrcView, 0); // copy it\n msg({ callbackId, result: outputBuffer }, [outputBuffer.buffer]);\n } catch (err) {\n handleError(err);\n }\n};\n\nfunction handleError(err) {\n // If WASM already aborted, onAbort already sent signal.abort; skip to avoid\n // re-reporting the resulting WebAssembly.RuntimeError as a JS exception.\n if (isAborted) return;\n\n const message = err ? err.message || String(err) : 'Unknown error';\n const stack = err ? err.stack || String(err) : '';\n msg({\n verb: 'signal.abort',\n args: ['exception', message, stack, err],\n });\n}\n\nonmessage = async (e) => {\n if (!e.data) return;\n const { verb, args, callbackId } = e.data;\n\n // fs.read_res arrives while wasm is JSPI-suspended; resolve the pending promise.\n if (verb === 'fs.read_res') {\n if (pendingReadResolve) {\n pendingReadResolve(args[0]);\n }\n return;\n }\n\n // Guard: while awaiting a file read, reject any other incoming task.\n if (isAwaitReading) {\n if (callbackId) {\n msg({\n callbackId,\n err: 'Worker is suspended waiting for file data (JSPI)',\n });\n }\n return;\n }\n\n if (!callbackId) {\n msg({ verb: 'console.error', args: ['callbackId is required', e.data] });\n return;\n }\n\n if (verb === 'module.init') {\n const argMainScriptBlob = args[0];\n const argUseAsyncFile = args[1];\n try {\n Module = getWModuleConfig(argMainScriptBlob);\n Module.preRun = () => {\n if (argUseAsyncFile) {\n Module.ENV['USE_ASYNC_FILE'] = '1';\n }\n };\n Module.onRuntimeInitialized = () => {\n // async call once module is ready\n // init FS\n patchHeapFS();\n // init cwrap\n const pointer = isCompat ? 'number' : 'bigint';\n // TODO: note sure why emscripten cannot bind if there is only 1 argument\n wllamaMalloc = callWrapper('wllama_malloc', pointer, [\n 'number',\n pointer,\n ]);\n wllamaStart = callWrapper('wllama_start', 'string', [], true);\n wllamaAction = callWrapper(\n 'wllama_action',\n pointer,\n ['string', pointer],\n true\n );\n wllamaExit = callWrapper('wllama_exit', 'string', []);\n wllamaDebug = callWrapper('wllama_debug', 'string', []);\n msg({ callbackId, result: null });\n };\n wModuleInit();\n } catch (err) {\n handleError(err);\n }\n return;\n }\n\n if (verb === 'fs.alloc') {\n const argFilename = args[0];\n const argSize = args[1];\n const argAllocBuffer = args[2];\n try {\n // create blank file\n const emptyBuffer = new ArrayBuffer(0);\n Module['FS_createDataFile'](\n '/models',\n argFilename,\n emptyBuffer,\n true,\n true,\n true\n );\n // alloc data on heap\n const fileId = heapfsAlloc(argFilename, argSize, argAllocBuffer);\n msg({ callbackId, result: { fileId } });\n } catch (err) {\n handleError(err);\n }\n return;\n }\n\n if (verb === 'fs.write') {\n const argFileId = args[0];\n const argBuffer = args[1];\n const argOffset = args[2];\n try {\n const writtenBytes = heapfsWrite(argFileId, argBuffer, argOffset);\n msg({ callbackId, result: { writtenBytes } });\n } catch (err) {\n handleError(err);\n }\n return;\n }\n\n if (verb === 'wllama.start') {\n await runWasmCall(callbackId, async () => {\n try {\n const result = await wllamaStart();\n msg({ callbackId, result });\n } catch (err) {\n handleError(err);\n }\n });\n return;\n }\n\n if (verb === 'wllama.action') {\n await runWasmCall(callbackId, () => runAction(e.data));\n return;\n }\n\n if (verb === 'wllama.exit') {\n await runWasmCall(callbackId, async () => {\n try {\n const result = await wllamaExit();\n msg({ callbackId, result });\n } catch (err) {\n handleError(err);\n }\n });\n return;\n }\n\n if (verb === 'wllama.debug') {\n await runWasmCall(callbackId, async () => {\n try {\n const result = await wllamaDebug();\n msg({ callbackId, result });\n } catch (err) {\n handleError(err);\n }\n });\n return;\n }\n};\n",OPFS_UTILS_WORKER_CODE="let accessHandle;\nlet abortController = new AbortController();\n\nasync function openFile(filename) {\n const opfsRoot = await navigator.storage.getDirectory();\n const cacheDir = await opfsRoot.getDirectoryHandle('cache', { create: true });\n const fileHandler = await cacheDir.getFileHandle(filename, { create: true });\n accessHandle = await fileHandler.createSyncAccessHandle();\n accessHandle.truncate(0); // clear file content\n}\n\nasync function writeFile(buf) {\n accessHandle.write(buf);\n}\n\nasync function closeFile() {\n accessHandle.flush();\n accessHandle.close();\n}\n\nasync function writeTextFile(filename, str) {\n await openFile(filename);\n await writeFile(new TextEncoder().encode(str));\n await closeFile();\n}\n\nconst throttled = (func, delay) => {\n let lastRun = 0;\n return (...args) => {\n const now = Date.now();\n if (now - lastRun > delay) {\n lastRun = now;\n func.apply(null, args);\n }\n };\n};\n\nconst assertNonNull = (val) => {\n if (val === null || val === undefined) {\n throw new Error('OPFS Worker: Assertion failed');\n }\n};\n\n// respond to main thread\nconst resOK = () => postMessage({ ok: true });\nconst resProgress = (loaded, total) =>\n postMessage({ progress: { loaded, total } });\nconst resErr = (err) => postMessage({ err });\n\nonmessage = async (e) => {\n try {\n if (!e.data) return;\n\n /**\n * @param {Object} e.data\n *\n * Fine-control FS actions:\n * - { action: 'open', filename: 'string' }\n * - { action: 'write', buf: ArrayBuffer }\n * - { action: 'close' }\n *\n * Simple write API:\n * - { action: 'write-simple', filename: 'string', buf: ArrayBuffer }\n *\n * Download API:\n * - { action: 'download', url: 'string', filename: 'string', options: Object, metadataFileName: 'string' }\n * - { action: 'download-abort' }\n */\n const {\n action,\n filename,\n buf,\n url,\n options,\n metadataFileName,\n metadataAdditional,\n } = e.data;\n\n if (action === 'open') {\n assertNonNull(filename);\n await openFile(filename);\n return resOK();\n } else if (action === 'write') {\n assertNonNull(buf);\n await writeFile(buf);\n return resOK();\n } else if (action === 'close') {\n await closeFile();\n return resOK();\n } else if (action === 'write-simple') {\n assertNonNull(filename);\n assertNonNull(buf);\n await openFile(filename);\n await writeFile(buf);\n await closeFile();\n return resOK();\n } else if (action === 'download') {\n assertNonNull(url);\n assertNonNull(filename);\n assertNonNull(metadataFileName);\n assertNonNull(options);\n assertNonNull(options.aborted);\n abortController = new AbortController();\n if (options.aborted) abortController.abort();\n const response = await fetch(url, {\n ...options,\n signal: abortController.signal,\n });\n const contentLength = response.headers.get('content-length');\n const etag = (response.headers.get('etag') || '').replace(\n /[^A-Za-z0-9]/g,\n ''\n );\n const total = parseInt(contentLength, 10);\n const reader = response.body.getReader();\n await openFile(filename);\n let loaded = 0;\n const throttledProgress = throttled(resProgress, 100);\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n loaded += value.byteLength;\n await writeFile(value);\n throttledProgress(loaded, total);\n }\n resProgress(total, total); // 100% done\n await closeFile();\n // make sure this is in-sync with CacheEntryMetadata\n await writeTextFile(\n metadataFileName,\n JSON.stringify({\n originalURL: url,\n originalSize: total,\n etag,\n ...metadataAdditional,\n })\n );\n return resOK();\n } else if (action === 'download-abort') {\n if (abortController) {\n abortController.abort();\n }\n return;\n }\n\n throw new Error('OPFS Worker: Invalid action', e.data);\n } catch (err) {\n return resErr(err);\n }\n};\n",WLLAMA_EMSCRIPTEN_CODE='var Module=typeof Module!="undefined"?Module:{};var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";var ENVIRONMENT_IS_PTHREAD=ENVIRONMENT_IS_WORKER&&self.name?.startsWith("em-pthread");if(ENVIRONMENT_IS_NODE){var worker_threads=require("worker_threads");global.Worker=worker_threads.Worker;ENVIRONMENT_IS_WORKER=!worker_threads.isMainThread;ENVIRONMENT_IS_PTHREAD=ENVIRONMENT_IS_WORKER&&worker_threads["workerData"]=="em-pthread"}var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=globalThis.document?.currentScript?.src;if(typeof __filename!="undefined"){_scriptName=__filename}else if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");scriptDirectory=__dirname+"/";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}if(!ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var defaultPrint=console.log.bind(console);var defaultPrintErr=console.error.bind(console);if(ENVIRONMENT_IS_NODE){var utils=require("util");var stringify=a=>typeof a=="object"?utils.inspect(a):a;defaultPrint=(...args)=>fs.writeSync(1,args.map(stringify).join(" ")+"\\n");defaultPrintErr=(...args)=>fs.writeSync(2,args.map(stringify).join(" ")+"\\n")}var out=defaultPrint;var err=defaultPrintErr;var wasmBinary;var wasmModule;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var isFileURI=filename=>filename.startsWith("file://");function growMemViews(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}}if(ENVIRONMENT_IS_NODE&&ENVIRONMENT_IS_PTHREAD){var parentPort=worker_threads["parentPort"];parentPort.on("message",msg=>global.onmessage?.({data:msg}));Object.assign(globalThis,{self:global,postMessage:msg=>parentPort["postMessage"](msg)});process.on("uncaughtException",err=>{postMessage({cmd:"uncaughtException",error:err});process.exit(1)})}var startWorker;if(ENVIRONMENT_IS_PTHREAD){var initializedJS=false;self.onunhandledrejection=e=>{throw e.reason||e};async function handleMessage(e){try{var msgData=e["data"];var cmd=msgData.cmd;if(cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);startWorker=()=>{postMessage({cmd:"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};for(const handler of msgData.handlers){if(!Module[handler]||Module[handler].proxy){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler,args})};if(handler=="print")out=Module[handler];if(handler=="printErr")err=Module[handler]}}wasmMemory=msgData.wasmMemory;updateMemoryViews();wasmModule=msgData.wasmModule;createWasm();run()}else if(cmd==="run"){establishStackSpace(msgData.pthread_ptr);__emscripten_thread_init(msgData.pthread_ptr,0,0,1,0,0);PThread.threadInitTLS();__emscripten_thread_mailbox_await(msgData.pthread_ptr);if(!initializedJS){initializedJS=true}try{await invokeEntryPoint(msgData.start_routine,msgData.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(msgData.target==="setimmediate"){}else if(cmd==="checkMailbox"){if(initializedJS){checkMailbox()}}else if(cmd){err(`worker: received unknown command ${cmd}`);err(msgData)}}catch(ex){__emscripten_thread_crashed();throw ex}}self.onmessage=handleMessage}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function initMemory(){if(ENVIRONMENT_IS_PTHREAD){return}if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||134217728;wasmMemory=new WebAssembly.Memory({initial:BigInt(INITIAL_MEMORY/65536),maximum:65536n,shared:true,address:"i64"})}updateMemoryViews()}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;if(ENVIRONMENT_IS_PTHREAD)return startWorker();if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();wasmExports["__wasm_call_ctors"]();FS.ignorePermissions=false}function preMain(){}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(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";if(runtimeInitialized){___trap()}var e=new WebAssembly.RuntimeError(what);throw e}var wasmBinaryFile;function findWasmBinary(){return locateFile("wllama.wasm")}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){assignWasmImports();if(!wasmImports.__instrumented){wasmImports.__instrumented=true;Asyncify.instrumentWasmImports(wasmImports)}var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmExports=Asyncify.instrumentWasmExports(wasmExports);wasmExports=applySignatureConversions(wasmExports);registerTLSInit(wasmExports["_emscripten_tls_init"]);assignWasmExports(wasmExports);wasmModule=module;removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){return receiveInstance(result["instance"],result["module"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})})}if(ENVIRONMENT_IS_PTHREAD){var instance=new WebAssembly.Instance(wasmModule,getWasmImports());return receiveInstance(instance,wasmModule)}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var terminateWorker=worker=>{worker.terminate();worker.onmessage=e=>{}};var cleanupThread=pthread_ptr=>{var worker=PThread.pthreads[pthread_ptr];PThread.returnWorkerToPool(worker)};var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var runDependencies=0;var dependenciesFulfilled=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}};var addRunDependency=id=>{runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)};var spawnThread=threadParams=>{var worker=PThread.getNewWorker();if(!worker){return 6}PThread.runningWorkers.push(worker);PThread.pthreads[threadParams.pthread_ptr]=worker;worker.pthread_ptr=threadParams.pthread_ptr;var msg={cmd:"run",start_routine:threadParams.startRoutine,arg:threadParams.arg,pthread_ptr:threadParams.pthread_ptr};if(ENVIRONMENT_IS_NODE){worker.unref()}worker.postMessage(msg,threadParams.transferList);return 0};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var stackSave=()=>_emscripten_stack_get_current();var stackRestore=val=>__emscripten_stack_restore(val);var stackAlloc=sz=>__emscripten_stack_alloc(sz);var proxyToMainThread=(funcIndex,emAsmAddr,sync,...callArgs)=>{var serializedNumCallArgs=callArgs.length*2;var sp=stackSave();var args=stackAlloc(serializedNumCallArgs*8);var b=args/8;for(var i=0;i<callArgs.length;i++){var arg=callArgs[i];if(typeof arg=="bigint"){(growMemViews(),HEAP64)[b+2*i]=1n;(growMemViews(),HEAP64)[b+2*i+1]=arg}else{(growMemViews(),HEAP64)[b+2*i]=0n;(growMemViews(),HEAPF64)[b+2*i+1]=arg}}var rtn=__emscripten_run_js_on_main_thread(funcIndex,emAsmAddr,serializedNumCallArgs,args,sync);stackRestore(sp);return rtn};function _proc_exit(code){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(0,0,1,code);EXITSTATUS=code;if(!keepRuntimeAlive()){PThread.terminateAllThreads();Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))}function exitOnMainThread(returnCode){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(1,0,0,returnCode);_exit(returnCode)}var exitJS=(status,implicit)=>{EXITSTATUS=status;if(ENVIRONMENT_IS_PTHREAD){exitOnMainThread(status);throw"unwind"}_proc_exit(status)};var _exit=exitJS;var PThread={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init(){if(!ENVIRONMENT_IS_PTHREAD){PThread.initMainThread()}},initMainThread(){var pthreadPoolSize=Module["pthreadPoolSize"];while(pthreadPoolSize--){PThread.allocateUnusedWorker()}addOnPreRun(async()=>{var pthreadPoolReady=PThread.loadWasmModuleToAllWorkers();addRunDependency("loading-workers");await pthreadPoolReady;removeRunDependency("loading-workers")})},terminateAllThreads:()=>{for(var worker of PThread.runningWorkers){terminateWorker(worker)}for(var worker of PThread.unusedWorkers){terminateWorker(worker)}PThread.unusedWorkers=[];PThread.runningWorkers=[];PThread.pthreads={}},returnWorkerToPool:worker=>{var pthread_ptr=worker.pthread_ptr;delete PThread.pthreads[pthread_ptr];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);worker.pthread_ptr=0;__emscripten_thread_free_data(pthread_ptr)},threadInitTLS(){PThread.tlsInitFunctions.forEach(f=>f())},loadWasmModuleToWorker:worker=>new Promise(onFinishedLoading=>{worker.onmessage=e=>{var d=e["data"];var cmd=d.cmd;if(d.targetThread&&d.targetThread!=_pthread_self()){var targetWorker=PThread.pthreads[d.targetThread];if(targetWorker){targetWorker.postMessage(d,d.transferList)}else{err(`Internal error! Worker sent a message "${cmd}" to target pthread ${d.targetThread}, but that thread no longer exists!`)}return}if(cmd==="checkMailbox"){checkMailbox()}else if(cmd==="spawnThread"){spawnThread(d)}else if(cmd==="cleanupThread"){callUserCallback(()=>cleanupThread(d.thread))}else if(cmd==="loaded"){worker.loaded=true;if(ENVIRONMENT_IS_NODE&&!worker.pthread_ptr){worker.unref()}onFinishedLoading(worker)}else if(d.target==="setimmediate"){worker.postMessage(d)}else if(cmd==="uncaughtException"){worker.onerror(d.error)}else if(cmd==="callHandler"){Module[d.handler](...d.args)}else if(cmd){err(`worker sent an unknown command ${cmd}`)}};worker.onerror=e=>{var message="worker sent an error!";err(`${message} ${e.filename}:${e.lineno}: ${e.message}`);throw e};if(ENVIRONMENT_IS_NODE){worker.on("message",data=>worker.onmessage({data}));worker.on("error",e=>worker.onerror(e))}var handlers=[];var knownHandlers=["onExit","onAbort","print","printErr"];for(var handler of knownHandlers){if(Module.propertyIsEnumerable(handler)){handlers.push(handler)}}worker.postMessage({cmd:"load",handlers,wasmMemory,wasmModule})}),async loadWasmModuleToAllWorkers(){if(ENVIRONMENT_IS_PTHREAD){return}let pthreadPoolReady=Promise.all(PThread.unusedWorkers.map(PThread.loadWasmModuleToWorker));return pthreadPoolReady},allocateUnusedWorker(){var worker;var pthreadMainJs=_scriptName;if(Module["mainScriptUrlOrBlob"]){pthreadMainJs=Module["mainScriptUrlOrBlob"];if(typeof pthreadMainJs!="string"){pthreadMainJs=URL.createObjectURL(pthreadMainJs)}}worker=new Worker(pthreadMainJs,{workerData:"em-pthread",name:"em-pthread"});PThread.unusedWorkers.push(worker)},getNewWorker(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}return PThread.unusedWorkers.pop()}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);function establishStackSpace(pthread_ptr){var stackHigh=Number((growMemViews(),HEAPU64)[(pthread_ptr+88)/8]);var stackSize=Number((growMemViews(),HEAPU64)[(pthread_ptr+96)/8]);var stackLow=stackHigh-stackSize;_emscripten_stack_set_limits(stackHigh,stackLow);stackRestore(stackHigh)}var wasmTableMirror=[];var getWasmTableEntry=funcPtr=>{funcPtr=Number(funcPtr);var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(BigInt(funcPtr));if(Asyncify.isAsyncExport(func)){wasmTableMirror[funcPtr]=func=Asyncify.makeAsyncFunction(func)}}return func};var invokeEntryPoint=async(ptr,arg)=>{runtimeKeepaliveCounter=0;noExitRuntime=0;var result=(a1=>WebAssembly.promising(getWasmTableEntry(ptr)).call(null,BigInt(a1)))(arg);function finish(result){if(keepRuntimeAlive()){EXITSTATUS=result;return}__emscripten_thread_exit(result)}result=await result;finish(result)};invokeEntryPoint.isAsync=true;var noExitRuntime=true;var registerTLSInit=tlsInitFunc=>PThread.tlsInitFunctions.push(tlsInitFunc);var wasmMemory;function pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(2,0,1,pthread_ptr,attr,startRoutine,arg);return ___pthread_create_js(pthread_ptr,attr,startRoutine,arg)}var _emscripten_has_threading_support=()=>!!globalThis.SharedArrayBuffer;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>num<INT53_MIN||num>INT53_MAX?NaN:Number(num);function ___pthread_create_js(pthread_ptr,attr,startRoutine,arg){pthread_ptr=bigintToI53Checked(pthread_ptr);attr=bigintToI53Checked(attr);startRoutine=bigintToI53Checked(startRoutine);arg=bigintToI53Checked(arg);if(!_emscripten_has_threading_support()){return 6}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length===0||error)){return pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg)}if(error)return error;var threadParams={startRoutine,pthread_ptr,arg,transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd="spawnThread";postMessage(threadParams,transferList);return 0}return spawnThread(threadParams)}var syscallGetVarargP=()=>{var ret=Number((growMemViews(),HEAPU64)[SYSCALLS.varargs/8]);SYSCALLS.varargs+=8;return ret};var syscallGetVarargI=()=>{var ret=(growMemViews(),HEAP32)[+SYSCALLS.varargs/4];SYSCALLS.varargs+=4;return ret};var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\\/]+|\\/)\\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>view=>view.set(crypto.getRandomValues(new Uint8Array(view.byteLength)));var randomFill=view=>{(randomFill=initRandomFill())(view)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(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 UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.buffer instanceof ArrayBuffer?heapOrArray.subarray(idx,endPtr):heapOrArray.slice(idx,endPtr))}var str="";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[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};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var c=str.charCodeAt(i);if(c<=127){len++}else if(c<=2047){len+=2}else if(c>=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var 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.codePointAt(i);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;i++}}heap[outIdx]=0;return outIdx-startIdx};var 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 FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}}else if(globalThis.window?.prompt){result=window.prompt("Input: ");if(result!==null){result+="\\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.atime=Date.now()}return bytesRead},write(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.mtime=stream.node.ctime=Date.now()}return i}},default_tty_ops:{get_char(tty){return FS_stdin_getChar()},put_char(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var zeroMemory=(ptr,size)=>(growMemViews(),HEAPU8).fill(0,ptr,ptr+size);var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var mmapAlloc=size=>{size=alignMemory(size,65536);var ptr=_emscripten_builtin_memalign(65536,size);if(ptr)zeroMemory(ptr,size);return ptr};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}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,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.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(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)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(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.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){if(!MEMFS.doesNotExistError){MEMFS.doesNotExistError=new FS.ErrnoError(44);MEMFS.doesNotExistError.stack="<generic error, no stack>"}throw MEMFS.doesNotExistError},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(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(stream,buffer,offset,length,position,canOwn){if(buffer.buffer===(growMemViews(),HEAP8).buffer){canOwn=false}if(!length)return 0;var node=stream.node;node.mtime=node.ctime=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=buffer.slice(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(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(28)}return position},mmap(stream,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents&&contents.buffer===(growMemViews(),HEAP8).buffer){allocated=false;ptr=contents.byteOffset}else{allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}if(contents){if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}(growMemViews(),HEAP8).set(contents,ptr)}}return{ptr,allocated}},msync(stream,buffer,offset,length,mmapFlags){MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS_modeStringToFlags=str=>{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>id;var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!="undefined")Browser.init();for(var plugin of preloadPlugins){if(plugin["canHandle"](fullname)){return plugin["handle"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url=="string"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,readFiles:{},ErrnoError:class{name="ErrnoError";constructor(errno){this.errno=errno}},FSStream:class{shared={};get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);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}if(parts[i]==="."){continue}if(parts[i]===".."){current_path=PATH.dirname(current_path);if(FS.isRoot(current)){path=current_path+"/"+parts.slice(i+1).join("/");nlinks--;continue linkloop}else{current=current.parent}continue}current_path=PATH.join2(current_path,parts[i]);try{current=FS.lookupNode(current,parts[i])}catch(e){if(e?.errno===44&&islast&&opts.noent_okay){return{path:current_path}}throw e}if(FS.isMountpoint(current)&&(!islast||opts.follow_mount)){current=current.mounted.root}if(FS.isLink(current.mode)&&(!islast||opts.follow)){if(!current.node_ops.readlink){throw new FS.ErrnoError(52)}var link=current.node_ops.readlink(current);if(!PATH.isAbs(link)){link=PATH.dirname(current_path)+"/"+link}path=link+"/"+parts.slice(i+1).join("/");continue linkloop}}return{path:current_path,node:current}}throw new FS.ErrnoError(32)},getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){if(!FS.isDir(dir.mode)){return 54}try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);setattr(arg,attr)},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}for(var mount of mounts){if(mount.type.syncfs){mount.type.syncfs(mount,populate,done)}else{done(null)}}},mount(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type,opts,mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);for(var[hash,current]of Object.entries(FS.nameTable)){while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}}node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev(path,mode,dev){if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink(oldpath,newpath){if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);old_node.parent=new_dir}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return readdir(node)},unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},truncate(path,len){if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}if(Module["logReadFiles"]&&!(flags&1)){if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed(stream){return stream.fd===null},llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},mmap(stream,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}if(!length){throw new FS.ErrnoError(28)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){abort(`Invalid encoding type "${opts.encoding}"`)}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"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){data=new Uint8Array(intArrayFromString(data,true))}if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{abort("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length,llseek:()=>0});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomFill(randomBuffer);randomLeft=randomBuffer.byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input){FS.createDevice("/dev","stdin",input)}else{FS.symlink("/dev/tty","/dev/stdin")}if(output){FS.createDevice("/dev","stdout",null,output)}else{FS.symlink("/dev/tty","/dev/stdout")}if(error){FS.createDevice("/dev","stderr",null,error)}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},staticInit(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},init(input,output,error){FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;for(var stream of FS.streams){if(stream){FS.close(stream)}}},findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath(parent,path,canRead,canWrite){parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){if(e.errno!=20)throw e}parent=current}return current},createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}},createDevice(parent,name,input,output){var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(!!input,!!output);FS.createDevice.major??=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open(stream){stream.seekable=false},close(stream){if(output?.buffer?.length){output(10)}},read(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(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.atime=Date.now()}return bytesRead},write(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.mtime=stream.node.ctime=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(globalThis.XMLHttpRequest){abort("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{try{obj.contents=readBinary(obj.url)}catch(e){throw new FS.ErrnoError(29)}}},createLazyFile(parent,name,url,canRead,canWrite){class LazyUint8Array{lengthKnown=false;chunks=[];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]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn\'t load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)abort("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)abort("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn\'t load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")abort("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,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={};for(const[key,fn]of Object.entries(node.stream_ops)){stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}}function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i<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}stream_ops.read=(stream,buffer,offset,length,position)=>{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,(growMemViews(),HEAP8),ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>ptr?UTF8ArrayToString((growMemViews(),HEAPU8),ptr,maxBytesToRead,ignoreNul):"";var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return dir+"/"+path},writeStat(buf,stat){(growMemViews(),HEAPU32)[buf/4]=stat.dev;(growMemViews(),HEAPU32)[(buf+4)/4]=stat.mode;(growMemViews(),HEAPU64)[(buf+8)/8]=BigInt(stat.nlink);(growMemViews(),HEAPU32)[(buf+16)/4]=stat.uid;(growMemViews(),HEAPU32)[(buf+20)/4]=stat.gid;(growMemViews(),HEAPU32)[(buf+24)/4]=stat.rdev;(growMemViews(),HEAP64)[(buf+32)/8]=BigInt(stat.size);(growMemViews(),HEAP32)[(buf+40)/4]=4096;(growMemViews(),HEAP32)[(buf+44)/4]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();(growMemViews(),HEAP64)[(buf+48)/8]=BigInt(Math.floor(atime/1e3));(growMemViews(),HEAPU64)[(buf+56)/8]=BigInt(atime%1e3*1e3*1e3);(growMemViews(),HEAP64)[(buf+64)/8]=BigInt(Math.floor(mtime/1e3));(growMemViews(),HEAPU64)[(buf+72)/8]=BigInt(mtime%1e3*1e3*1e3);(growMemViews(),HEAP64)[(buf+80)/8]=BigInt(Math.floor(ctime/1e3));(growMemViews(),HEAPU64)[(buf+88)/8]=BigInt(ctime%1e3*1e3*1e3);(growMemViews(),HEAP64)[(buf+96)/8]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){(growMemViews(),HEAPU32)[(buf+8)/4]=stats.bsize;(growMemViews(),HEAPU32)[(buf+72)/4]=stats.bsize;(growMemViews(),HEAP64)[(buf+16)/8]=BigInt(stats.blocks);(growMemViews(),HEAP64)[(buf+24)/8]=BigInt(stats.bfree);(growMemViews(),HEAP64)[(buf+32)/8]=BigInt(stats.bavail);(growMemViews(),HEAP64)[(buf+40)/8]=BigInt(stats.files);(growMemViews(),HEAP64)[(buf+48)/8]=BigInt(stats.ffree);(growMemViews(),HEAPU32)[(buf+56)/4]=stats.fsid;(growMemViews(),HEAPU32)[(buf+80)/4]=stats.flags;(growMemViews(),HEAPU32)[(buf+64)/4]=stats.namelen},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=(growMemViews(),HEAPU8).slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_fcntl64(fd,cmd,varargs){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(3,0,1,fd,cmd,varargs);varargs=bigintToI53Checked(varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();stream.flags|=arg;return 0}case 5:{var arg=syscallGetVarargP();var offset=0;(growMemViews(),HEAP16)[(arg+offset)/2]=2;return 0}case 6:case 7:return 0}return-28}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_fstat64(fd,buf){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(4,0,1,fd,buf);buf=bigintToI53Checked(buf);try{return SYSCALLS.writeStat(buf,FS.fstat(fd))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,(growMemViews(),HEAPU8),outPtr,maxBytesToWrite);function ___syscall_getcwd(buf,size){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(5,0,1,buf,size);buf=bigintToI53Checked(buf);size=bigintToI53Checked(size);try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd)+1;if(size<cwdLengthInBytes)return-68;stringToUTF8(cwd,buf,size);return cwdLengthInBytes}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_getdents64(fd,dirp,count){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(6,0,1,fd,dirp,count);dirp=bigintToI53Checked(dirp);count=bigintToI53Checked(count);try{var stream=SYSCALLS.getStreamFromFD(fd);stream.getdents||=FS.readdir(stream.path);var struct_size=280;var pos=0;var off=FS.llseek(stream,0,1);var startIdx=Math.floor(off/struct_size);var endIdx=Math.min(stream.getdents.length,startIdx+Math.floor(count/struct_size));for(var idx=startIdx;idx<endIdx;idx++){var id;var type;var name=stream.getdents[idx];if(name==="."){id=stream.node.id;type=4}else if(name===".."){var lookup=FS.lookupPath(stream.path,{parent:true});id=lookup.node.id;type=4}else{var child;try{child=FS.lookupNode(stream.node,name)}catch(e){if(e?.errno===28){continue}throw e}id=child.id;type=FS.isChrdev(child.mode)?2:FS.isDir(child.mode)?4:FS.isLink(child.mode)?10:8}(growMemViews(),HEAP64)[(dirp+pos)/8]=BigInt(id);(growMemViews(),HEAP64)[(dirp+pos+8)/8]=BigInt((idx+1)*struct_size);(growMemViews(),HEAP16)[(dirp+pos+16)/2]=280;(growMemViews(),HEAP8)[dirp+pos+18]=type;stringToUTF8(name,dirp+pos+19,256);pos+=struct_size}FS.llseek(stream,idx*struct_size,0);return pos}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(7,0,1,fd,op,varargs);varargs=bigintToI53Checked(varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();(growMemViews(),HEAP32)[argp/4]=termios.c_iflag||0;(growMemViews(),HEAP32)[(argp+4)/4]=termios.c_oflag||0;(growMemViews(),HEAP32)[(argp+8)/4]=termios.c_cflag||0;(growMemViews(),HEAP32)[(argp+12)/4]=termios.c_lflag||0;for(var i=0;i<32;i++){(growMemViews(),HEAP8)[argp+i+17]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=(growMemViews(),HEAP32)[argp/4];var c_oflag=(growMemViews(),HEAP32)[(argp+4)/4];var c_cflag=(growMemViews(),HEAP32)[(argp+8)/4];var c_lflag=(growMemViews(),HEAP32)[(argp+12)/4];var c_cc=[];for(var i=0;i<32;i++){c_cc.push((growMemViews(),HEAP8)[argp+i+17])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();(growMemViews(),HEAP32)[argp/4]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21537:case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();(growMemViews(),HEAP16)[argp/2]=winsize[0];(growMemViews(),HEAP16)[(argp+2)/2]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_lstat64(path,buf){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(8,0,1,path,buf);path=bigintToI53Checked(path);buf=bigintToI53Checked(buf);try{path=SYSCALLS.getStr(path);return SYSCALLS.writeStat(buf,FS.lstat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_newfstatat(dirfd,path,buf,flags){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(9,0,1,dirfd,path,buf,flags);path=bigintToI53Checked(path);buf=bigintToI53Checked(buf);try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~6400;path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.writeStat(buf,nofollow?FS.lstat(path):FS.stat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(10,0,1,dirfd,path,flags,varargs);path=bigintToI53Checked(path);varargs=bigintToI53Checked(varargs);SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_stat64(path,buf){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(11,0,1,path,buf);path=bigintToI53Checked(path);buf=bigintToI53Checked(buf);try{path=SYSCALLS.getStr(path);return SYSCALLS.writeStat(buf,FS.stat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __abort_js=()=>abort("");function __emscripten_init_main_thread_js(tb){tb=bigintToI53Checked(tb);__emscripten_thread_init(tb,!ENVIRONMENT_IS_WORKER,1,!ENVIRONMENT_IS_WEB,5242880,false);PThread.threadInitTLS()}var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var maybeExit=()=>{if(!keepRuntimeAlive()){try{if(ENVIRONMENT_IS_PTHREAD){if(_pthread_self())__emscripten_thread_exit(EXITSTATUS);return}_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};function __emscripten_thread_mailbox_await(pthread_ptr){pthread_ptr=bigintToI53Checked(pthread_ptr);if(Atomics.waitAsync){var wait=Atomics.waitAsync((growMemViews(),HEAP32),pthread_ptr/4,pthread_ptr);wait.value.then(checkMailbox);var waitingAsync=pthread_ptr+228;Atomics.store((growMemViews(),HEAP32),waitingAsync/4,1)}}var checkMailbox=()=>callUserCallback(()=>{var pthread_ptr=_pthread_self();if(pthread_ptr){__emscripten_thread_mailbox_await(pthread_ptr);__emscripten_check_mailbox()}});function __emscripten_notify_mailbox_postmessage(targetThread,currThreadId){targetThread=bigintToI53Checked(targetThread);currThreadId=bigintToI53Checked(currThreadId);if(targetThread==currThreadId){setTimeout(checkMailbox)}else if(ENVIRONMENT_IS_PTHREAD){postMessage({targetThread,cmd:"checkMailbox"})}else{var worker=PThread.pthreads[targetThread];if(!worker){return}worker.postMessage({cmd:"checkMailbox"})}}var proxiedJSCallArgs=[];function __emscripten_receive_on_main_thread_js(funcIndex,emAsmAddr,callingThread,numCallArgs,args){emAsmAddr=bigintToI53Checked(emAsmAddr);callingThread=bigintToI53Checked(callingThread);args=bigintToI53Checked(args);numCallArgs/=2;proxiedJSCallArgs.length=numCallArgs;var b=args/8;for(var i=0;i<numCallArgs;i++){if((growMemViews(),HEAP64)[b+2*i]){proxiedJSCallArgs[i]=(growMemViews(),HEAP64)[b+2*i+1]}else{proxiedJSCallArgs[i]=(growMemViews(),HEAPF64)[b+2*i+1]}}var func=proxiedFunctionTable[funcIndex];PThread.currentProxiedOperationCallerThread=callingThread;var rtn=func(...proxiedJSCallArgs);PThread.currentProxiedOperationCallerThread=0;if(typeof rtn=="bigint"){rtn=bigintToI53Checked(rtn)}return rtn}function __emscripten_thread_cleanup(thread){thread=bigintToI53Checked(thread);if(!ENVIRONMENT_IS_PTHREAD)cleanupThread(thread);else postMessage({cmd:"cleanupThread",thread})}function __emscripten_thread_set_strongref(thread){thread=bigintToI53Checked(thread);if(ENVIRONMENT_IS_NODE){PThread.pthreads[thread].ref()}}var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var MONTH_DAYS_LEAP_CUMULATIVE=[0,31,60,91,121,152,182,213,244,274,305,335];var MONTH_DAYS_REGULAR_CUMULATIVE=[0,31,59,90,120,151,181,212,243,273,304,334];var ydayFromDate=date=>{var leap=isLeapYear(date.getFullYear());var monthDaysCumulative=leap?MONTH_DAYS_LEAP_CUMULATIVE:MONTH_DAYS_REGULAR_CUMULATIVE;var yday=monthDaysCumulative[date.getMonth()]+date.getDate()-1;return yday};function __localtime_js(time,tmPtr){time=bigintToI53Checked(time);tmPtr=bigintToI53Checked(tmPtr);var date=new Date(time*1e3);(growMemViews(),HEAP32)[tmPtr/4]=date.getSeconds();(growMemViews(),HEAP32)[(tmPtr+4)/4]=date.getMinutes();(growMemViews(),HEAP32)[(tmPtr+8)/4]=date.getHours();(growMemViews(),HEAP32)[(tmPtr+12)/4]=date.getDate();(growMemViews(),HEAP32)[(tmPtr+16)/4]=date.getMonth();(growMemViews(),HEAP32)[(tmPtr+20)/4]=date.getFullYear()-1900;(growMemViews(),HEAP32)[(tmPtr+24)/4]=date.getDay();var yday=ydayFromDate(date)|0;(growMemViews(),HEAP32)[(tmPtr+28)/4]=yday;(growMemViews(),HEAP64)[(tmPtr+40)/8]=BigInt(-(date.getTimezoneOffset()*60));var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;(growMemViews(),HEAP32)[(tmPtr+32)/4]=dst}function __mmap_js(len,prot,flags,fd,offset,allocated,addr){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(12,0,1,len,prot,flags,fd,offset,allocated,addr);len=bigintToI53Checked(len);offset=bigintToI53Checked(offset);allocated=bigintToI53Checked(allocated);addr=bigintToI53Checked(addr);try{var stream=SYSCALLS.getStreamFromFD(fd);var res=FS.mmap(stream,len,offset,prot,flags);var ptr=res.ptr;(growMemViews(),HEAP32)[allocated/4]=res.allocated;(growMemViews(),HEAPU64)[addr/8]=BigInt(ptr);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function __munmap_js(addr,len,prot,flags,fd,offset){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(13,0,1,addr,len,prot,flags,fd,offset);addr=bigintToI53Checked(addr);len=bigintToI53Checked(len);offset=bigintToI53Checked(offset);try{var stream=SYSCALLS.getStreamFromFD(fd);if(prot&2){SYSCALLS.doMsync(addr,stream,len,flags,offset)}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __tzset_js=function(timezone,daylight,std_name,dst_name){timezone=bigintToI53Checked(timezone);daylight=bigintToI53Checked(daylight);std_name=bigintToI53Checked(std_name);dst_name=bigintToI53Checked(dst_name);var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);(growMemViews(),HEAPU64)[timezone/8]=BigInt(stdTimezoneOffset*60);(growMemViews(),HEAP32)[daylight/4]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);if(summerOffset<winterOffset){stringToUTF8(winterName,std_name,17);stringToUTF8(summerName,dst_name,17)}else{stringToUTF8(winterName,dst_name,17);stringToUTF8(summerName,std_name,17)}};var _emscripten_get_now=()=>performance.timeOrigin+performance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);ptime=bigintToI53Checked(ptime);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);(growMemViews(),HEAP64)[ptime/8]=BigInt(nsec);return 0}var _emscripten_check_blocking_allowed=()=>{};var runtimeKeepalivePush=()=>{runtimeKeepaliveCounter+=1};var _emscripten_exit_with_live_runtime=()=>{runtimeKeepalivePush();throw"unwind"};var jsStackTrace=()=>(new Error).stack.toString();var getCallstack=flags=>{var callstack=jsStackTrace();var lines=callstack.split("\\n");callstack="";var firefoxRe=new RegExp("\\\\s*(.*?)@(.*?):([0-9]+):([0-9]+)");var chromeRe=new RegExp("\\\\s*at (.*?) \\\\((.*):(.*):(.*)\\\\)");for(var line of lines){var symbolName="";var file="";var lineno=0;var column=0;var parts=chromeRe.exec(line);if(parts?.length==5){symbolName=parts[1];file=parts[2];lineno=parts[3];column=parts[4]}else{parts=firefoxRe.exec(line);if(parts?.length>=4){symbolName=parts[1];file=parts[2];lineno=parts[3];column=parts[4]|0}else{callstack+=line+"\\n";continue}}if(symbolName=="_emscripten_log"||symbolName=="_emscripten_get_callstack"){callstack="";continue}if(flags&24){if(flags&64){file=file.substring(file.replace(/\\\\/g,"/").lastIndexOf("/")+1)}callstack+=` at ${symbolName} (${file}:${lineno}:${column})\\n`}}callstack=callstack.replace(/\\s+$/,"");return callstack};function _emscripten_get_callstack(flags,str,maxbytes){str=bigintToI53Checked(str);var callstack=getCallstack(flags);if(!str||maxbytes<=0){return lengthBytesUTF8(callstack)+1}var bytesWrittenExcludingNull=stringToUTF8(callstack,str,maxbytes);return bytesWrittenExcludingNull+1}var getHeapMax=()=>4294967296;var _emscripten_get_heap_max=()=>BigInt(getHeapMax());var _emscripten_has_asyncify=()=>2;var _emscripten_num_logical_cores=()=>ENVIRONMENT_IS_NODE?require("os").cpus().length:navigator["hardwareConcurrency"];var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(BigInt(pages));updateMemoryViews();return 1}catch(e){}};function _emscripten_resize_heap(requestedSize){requestedSize=bigintToI53Checked(requestedSize);var oldSize=(growMemViews(),HEAPU8).length;if(requestedSize<=oldSize){return false}var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false}var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var writeI53ToI64=(ptr,num)=>{(growMemViews(),HEAPU32)[ptr/4]=num;var lower=(growMemViews(),HEAPU32)[ptr/4];(growMemViews(),HEAPU32)[(ptr+4)/4]=(num-lower)/4294967296};var stringToNewUTF8=str=>{var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret};var readI53FromI64=ptr=>(growMemViews(),HEAPU32)[ptr/4]+(growMemViews(),HEAP32)[(ptr+4)/4]*4294967296;var WebGPU={Internals:{jsObjects:[],jsObjectInsert:(ptr,jsObject)=>{WebGPU.Internals.jsObjects[ptr]=jsObject},bufferOnUnmaps:[],futures:[],futureInsert:(futureId,promise)=>{WebGPU.Internals.futures[futureId]=new Promise(resolve=>promise.finally(()=>resolve(futureId)))}},getJsObject:ptr=>{if(!ptr)return undefined;return WebGPU.Internals.jsObjects[ptr]},importJsAdapter:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateAdapter(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsBindGroup:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateBindGroup(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsBindGroupLayout:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateBindGroupLayout(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsBuffer:(buffer,parentPtr=0)=>{assert(buffer.mapState==="unmapped");var bufferPtr=_emwgpuCreateBuffer(parentPtr);WebGPU.Internals.jsObjectInsert(bufferPtr,buffer);return bufferPtr},importJsCommandBuffer:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateCommandBuffer(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsCommandEncoder:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateCommandEncoder(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsComputePassEncoder:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateComputePassEncoder(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsComputePipeline:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateComputePipeline(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsDevice:(device,parentPtr=0)=>{var queuePtr=_emwgpuCreateQueue(parentPtr);var devicePtr=_emwgpuCreateDevice(parentPtr,queuePtr);WebGPU.Internals.jsObjectInsert(queuePtr,device.queue);WebGPU.Internals.jsObjectInsert(devicePtr,device);return devicePtr},importJsExternalTexture:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateExternalTexture(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsPipelineLayout:(obj,parentPtr=0)=>{var ptr=_emwgpuCreatePipelineLayout(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsQuerySet:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateQuerySet(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsQueue:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateQueue(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsRenderBundle:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateRenderBundle(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsRenderBundleEncoder:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateRenderBundleEncoder(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsRenderPassEncoder:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateRenderPassEncoder(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsRenderPipeline:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateRenderPipeline(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsSampler:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateSampler(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsShaderModule:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateShaderModule(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsSurface:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateSurface(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsTexture:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateTexture(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsTextureView:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateTextureView(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},errorCallback:(callback,type,message,userdata)=>{var sp=stackSave();var messagePtr=stringToUTF8OnStack(message);((a1,a2,a3)=>getWasmTableEntry(callback).call(null,a1,BigInt(a2),BigInt(a3)))(type,BigInt(messagePtr),userdata);stackRestore(sp)},iterateExtensions:(root,handlers)=>{for(var ptr=Number((growMemViews(),HEAPU64)[root/8]);ptr;ptr=Number((growMemViews(),HEAPU64)[ptr/8])){var sType=(growMemViews(),HEAP32)[(ptr+8)/4];var handler=handlers[sType](ptr)}},setStringView:(ptr,data,length)=>{(growMemViews(),HEAPU64)[ptr/8]=BigInt(data);(growMemViews(),HEAPU64)[(ptr+8)/8]=BigInt(length)},makeStringFromStringView:stringViewPtr=>{var ptr=Number((growMemViews(),HEAPU64)[stringViewPtr/8]);var length=Number((growMemViews(),HEAPU64)[(stringViewPtr+8)/8]);return UTF8ToString(ptr,length)},makeStringFromOptionalStringView:stringViewPtr=>{var ptr=Number((growMemViews(),HEAPU64)[stringViewPtr/8]);var length=Number((growMemViews(),HEAPU64)[(stringViewPtr+8)/8]);if(!ptr){if(length===0){return""}return undefined}return UTF8ToString(ptr,length)},makeColor:ptr=>({r:(growMemViews(),HEAPF64)[ptr/8],g:(growMemViews(),HEAPF64)[(ptr+8)/8],b:(growMemViews(),HEAPF64)[(ptr+16)/8],a:(growMemViews(),HEAPF64)[(ptr+24)/8]}),makeExtent3D:ptr=>({width:(growMemViews(),HEAPU32)[ptr/4],height:(growMemViews(),HEAPU32)[(ptr+4)/4],depthOrArrayLayers:(growMemViews(),HEAPU32)[(ptr+8)/4]}),makeOrigin3D:ptr=>({x:(growMemViews(),HEAPU32)[ptr/4],y:(growMemViews(),HEAPU32)[(ptr+4)/4],z:(growMemViews(),HEAPU32)[(ptr+8)/4]}),makeTexelCopyTextureInfo:ptr=>({texture:WebGPU.getJsObject(Number((growMemViews(),HEAPU64)[ptr/8])),mipLevel:(growMemViews(),HEAPU32)[(ptr+8)/4],origin:WebGPU.makeOrigin3D(ptr+12),aspect:WebGPU.TextureAspect[(growMemViews(),HEAP32)[(ptr+24)/4]]}),makeTexelCopyBufferLayout:ptr=>{var bytesPerRow=(growMemViews(),HEAPU32)[(ptr+8)/4];var rowsPerImage=(growMemViews(),HEAPU32)[(ptr+12)/4];return{offset:readI53FromI64(ptr),bytesPerRow:bytesPerRow===4294967295?undefined:bytesPerRow,rowsPerImage:rowsPerImage===4294967295?undefined:rowsPerImage}},makeTexelCopyBufferInfo:ptr=>{var layoutPtr=ptr+0;var bufferCopyView=WebGPU.makeTexelCopyBufferLayout(layoutPtr);bufferCopyView["buffer"]=WebGPU.getJsObject(Number((growMemViews(),HEAPU64)[(ptr+16)/8]));return bufferCopyView},makePassTimestampWrites:ptr=>{if(ptr===0)return undefined;return{querySet:WebGPU.getJsObject(Number((growMemViews(),HEAPU64)[(ptr+8)/8])),beginningOfPassWriteIndex:(growMemViews(),HEAPU32)[(ptr+16)/4],endOfPassWriteIndex:(growMemViews(),HEAPU32)[(ptr+20)/4]}},makePipelineConstants:(constantCount,constantsPtr)=>{if(!constantCount)return;var constants={};for(var i=0;i<constantCount;++i){var entryPtr=constantsPtr+32*i;var key=WebGPU.makeStringFromStringView(entryPtr+8);constants[key]=(growMemViews(),HEAPF64)[(entryPtr+24)/8]}return constants},makePipelineLayout:layoutPtr=>{if(!layoutPtr)return"auto";return WebGPU.getJsObject(layoutPtr)},makeComputeState:ptr=>{if(!ptr)return undefined;var desc={module:WebGPU.getJsObject(Number((growMemViews(),HEAPU64)[(ptr+8)/8])),constants:WebGPU.makePipelineConstants(Number((growMemViews(),HEAPU64)[(ptr+32)/8]),Number((growMemViews(),HEAPU64)[(ptr+40)/8])),entryPoint:WebGPU.makeStringFromOptionalStringView(ptr+16)};return desc},makeComputePipelineDesc:descriptor=>{var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+8),layout:WebGPU.makePipelineLayout(Number((growMemViews(),HEAPU64)[(descriptor+24)/8])),compute:WebGPU.makeComputeState(descriptor+32)};return desc},makeRenderPipelineDesc:descriptor=>{function makePrimitiveState(psPtr){if(!psPtr)return undefined;return{topology:WebGPU.PrimitiveTopology[(growMemViews(),HEAP32)[(psPtr+8)/4]],stripIndexFormat:WebGPU.IndexFormat[(growMemViews(),HEAP32)[(psPtr+12)/4]],frontFace:WebGPU.FrontFace[(growMemViews(),HEAP32)[(psPtr+16)/4]],cullMode:WebGPU.CullMode[(growMemViews(),HEAP32)[(psPtr+20)/4]],unclippedDepth:!!(growMemViews(),HEAPU32)[(psPtr+24)/4]}}function makeBlendComponent(bdPtr){if(!bdPtr)return undefined;return{operation:WebGPU.BlendOperation[(growMemViews(),HEAP32)[bdPtr/4]],srcFactor:WebGPU.BlendFactor[(growMemViews(),HEAP32)[(bdPtr+4)/4]],dstFactor:WebGPU.BlendFactor[(growMemViews(),HEAP32)[(bdPtr+8)/4]]}}function makeBlendState(bsPtr){if(!bsPtr)return undefined;return{alpha:makeBlendComponent(bsPtr+12),color:makeBlendComponent(bsPtr+0)}}function makeColorState(csPtr){var format=WebGPU.TextureFormat[(growMemViews(),HEAP32)[(csPtr+8)/4]];return format?{format,blend:makeBlendState(Number((growMemViews(),HEAPU64)[(csPtr+16)/8])),writeMask:(growMemViews(),HEAPU32)[(csPtr+24)/4]}:undefined}function makeColorStates(count,csArrayPtr){var states=[];for(var i=0;i<count;++i){states.push(makeColorState(csArrayPtr+32*i))}return states}function makeStencilStateFace(ssfPtr){return{compare:WebGPU.CompareFunction[(growMemViews(),HEAP32)[ssfPtr/4]],failOp:WebGPU.StencilOperation[(growMemViews(),HEAP32)[(ssfPtr+4)/4]],depthFailOp:WebGPU.StencilOperation[(growMemViews(),HEAP32)[(ssfPtr+8)/4]],passOp:WebGPU.StencilOperation[(growMemViews(),HEAP32)[(ssfPtr+12)/4]]}}function makeDepthStencilState(dssPtr){if(!dssPtr)return undefined;return{format:WebGPU.TextureFormat[(growMemViews(),HEAP32)[(dssPtr+8)/4]],depthWriteEnabled:!!(growMemViews(),HEAPU32)[(dssPtr+12)/4],depthCompare:WebGPU.CompareFunction[(growMemViews(),HEAP32)[(dssPtr+16)/4]],stencilFront:makeStencilStateFace(dssPtr+20),stencilBack:makeStencilStateFace(dssPtr+36),stencilReadMask:(growMemViews(),HEAPU32)[(dssPtr+52)/4],stencilWriteMask:(growMemViews(),HEAPU32)[(dssPtr+56)/4],depthBias:(growMemViews(),HEAP32)[(dssPtr+60)/4],depthBiasSlopeScale:(growMemViews(),HEAPF32)[(dssPtr+64)/4],depthBiasClamp:(growMemViews(),HEAPF32)[(dssPtr+68)/4]}}function makeVertexAttribute(vaPtr){return{format:WebGPU.VertexFormat[(growMemViews(),HEAP32)[(vaPtr+8)/4]],offset:readI53FromI64(vaPtr+16),shaderLocation:(growMemViews(),HEAPU32)[(vaPtr+24)/4]}}function makeVertexAttributes(count,vaArrayPtr){var vas=[];for(var i=0;i<count;++i){vas.push(makeVertexAttribute(vaArrayPtr+i*32))}return vas}function makeVertexBuffer(vbPtr){if(!vbPtr)return undefined;var stepMode=WebGPU.VertexStepMode[(growMemViews(),HEAP32)[(vbPtr+8)/4]];var attributeCount=Number((growMemViews(),HEAPU64)[(vbPtr+24)/8]);if(!stepMode&&!attributeCount){return null}return{arrayStride:readI53FromI64(vbPtr+16),stepMode,attributes:makeVertexAttributes(attributeCount,Number((growMemViews(),HEAPU64)[(vbPtr+32)/8]))}}function makeVertexBuffers(count,vbArrayPtr){if(!count)return undefined;var vbs=[];for(var i=0;i<count;++i){vbs.push(makeVertexBuffer(vbArrayPtr+i*40))}return vbs}function makeVertexState(viPtr){if(!viPtr)return undefined;var desc={module:WebGPU.getJsObject(Number((growMemViews(),HEAPU64)[(viPtr+8)/8])),constants:WebGPU.makePipelineConstants(Number((growMemViews(),HEAPU64)[(viPtr+32)/8]),Number((growMemViews(),HEAPU64)[(viPtr+40)/8])),buffers:makeVertexBuffers(Number((growMemViews(),HEAPU64)[(viPtr+48)/8]),Number((growMemViews(),HEAPU64)[(viPtr+56)/8])),entryPoint:WebGPU.makeStringFromOptionalStringView(viPtr+16)};return desc}function makeMultisampleState(msPtr){if(!msPtr)return undefined;return{count:(growMemViews(),HEAPU32)[(msPtr+8)/4],mask:(growMemViews(),HEAPU32)[(msPtr+12)/4],alphaToCoverageEnabled:!!(growMemViews(),HEAPU32)[(msPtr+16)/4]}}function makeFragmentState(fsPtr){if(!fsPtr)return undefined;var desc={module:WebGPU.getJsObject(Number((growMemViews(),HEAPU64)[(fsPtr+8)/8])),constants:WebGPU.makePipelineConstants(Number((growMemViews(),HEAPU64)[(fsPtr+32)/8]),Number((growMemViews(),HEAPU64)[(fsPtr+40)/8])),targets:makeColorStates(Number((growMemViews(),HEAPU64)[(fsPtr+48)/8]),Number((growMemViews(),HEAPU64)[(fsPtr+56)/8])),entryPoint:WebGPU.makeStringFromOptionalStringView(fsPtr+16)};return desc}var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+8),layout:WebGPU.makePipelineLayout(Number((growMemViews(),HEAPU64)[(descriptor+24)/8])),vertex:makeVertexState(descriptor+32),primitive:makePrimitiveState(descriptor+96),depthStencil:makeDepthStencilState(Number((growMemViews(),HEAPU64)[(descriptor+128)/8])),multisample:makeMultisampleState(descriptor+136),fragment:makeFragmentState(Number((growMemViews(),HEAPU64)[(descriptor+160)/8]))};return desc},fillLimitStruct:(limits,limitsOutPtr)=>{var nextInChainPtr=Number((growMemViews(),HEAPU64)[limitsOutPtr/8]);function setLimitValueU32(name,basePtr,limitOffset,fallbackValue=0){var limitValue=limits[name]??fallbackValue;(growMemViews(),HEAPU32)[(basePtr+limitOffset)/4]=limitValue}function setLimitValueU64(name,basePtr,limitOffset,fallbackValue=0){var limitValue=limits[name]??fallbackValue;writeI53ToI64(basePtr+limitOffset,limitValue)}setLimitValueU32("maxTextureDimension1D",limitsOutPtr,8);setLimitValueU32("maxTextureDimension2D",limitsOutPtr,12);setLimitValueU32("maxTextureDimension3D",limitsOutPtr,16);setLimitValueU32("maxTextureArrayLayers",limitsOutPtr,20);setLimitValueU32("maxBindGroups",limitsOutPtr,24);setLimitValueU32("maxBindGroupsPlusVertexBuffers",limitsOutPtr,28);setLimitValueU32("maxBindingsPerBindGroup",limitsOutPtr,32);setLimitValueU32("maxDynamicUniformBuffersPerPipelineLayout",limitsOutPtr,36);setLimitValueU32("maxDynamicStorageBuffersPerPipelineLayout",limitsOutPtr,40);setLimitValueU32("maxSampledTexturesPerShaderStage",limitsOutPtr,44);setLimitValueU32("maxSamplersPerShaderStage",limitsOutPtr,48);setLimitValueU32("maxStorageBuffersPerShaderStage",limitsOutPtr,52);setLimitValueU32("maxStorageTexturesPerShaderStage",limitsOutPtr,56);setLimitValueU32("maxUniformBuffersPerShaderStage",limitsOutPtr,60);setLimitValueU32("minUniformBufferOffsetAlignment",limitsOutPtr,80);setLimitValueU32("minStorageBufferOffsetAlignment",limitsOutPtr,84);setLimitValueU64("maxUniformBufferBindingSize",limitsOutPtr,64);setLimitValueU64("maxStorageBufferBindingSize",limitsOutPtr,72);setLimitValueU32("maxVertexBuffers",limitsOutPtr,88);setLimitValueU64("maxBufferSize",limitsOutPtr,96);setLimitValueU32("maxVertexAttributes",limitsOutPtr,104);setLimitValueU32("maxVertexBufferArrayStride",limitsOutPtr,108);setLimitValueU32("maxInterStageShaderVariables",limitsOutPtr,112);setLimitValueU32("maxColorAttachments",limitsOutPtr,116);setLimitValueU32("maxColorAttachmentBytesPerSample",limitsOutPtr,120);setLimitValueU32("maxComputeWorkgroupStorageSize",limitsOutPtr,124);setLimitValueU32("maxComputeInvocationsPerWorkgroup",limitsOutPtr,128);setLimitValueU32("maxComputeWorkgroupSizeX",limitsOutPtr,132);setLimitValueU32("maxComputeWorkgroupSizeY",limitsOutPtr,136);setLimitValueU32("maxComputeWorkgroupSizeZ",limitsOutPtr,140);setLimitValueU32("maxComputeWorkgroupsPerDimension",limitsOutPtr,144);setLimitValueU32("maxImmediateSize",limitsOutPtr,148);if(nextInChainPtr!==0){var sType=(growMemViews(),HEAP32)[(nextInChainPtr+8)/4];var compatibilityModeLimitsPtr=nextInChainPtr;setLimitValueU32("maxStorageBuffersInVertexStage",compatibilityModeLimitsPtr,16,limits.maxStorageBuffersPerShaderStage);setLimitValueU32("maxStorageBuffersInFragmentStage",compatibilityModeLimitsPtr,24,limits.maxStorageBuffersPerShaderStage);setLimitValueU32("maxStorageTexturesInVertexStage",compatibilityModeLimitsPtr,20,limits.maxStorageTexturesPerShaderStage);setLimitValueU32("maxStorageTexturesInFragmentStage",compatibilityModeLimitsPtr,28,limits.maxStorageTexturesPerShaderStage)}},fillAdapterInfoStruct:(info,infoStruct)=>{(growMemViews(),HEAPU32)[(infoStruct+88)/4]=info.subgroupMinSize;(growMemViews(),HEAPU32)[(infoStruct+92)/4]=info.subgroupMaxSize;var strs=info.vendor+info.architecture+info.device+info.description;var strPtr=stringToNewUTF8(strs);var vendorLen=lengthBytesUTF8(info.vendor);WebGPU.setStringView(infoStruct+8,strPtr,vendorLen);strPtr+=vendorLen;var architectureLen=lengthBytesUTF8(info.architecture);WebGPU.setStringView(infoStruct+24,strPtr,architectureLen);strPtr+=architectureLen;var deviceLen=lengthBytesUTF8(info.device);WebGPU.setStringView(infoStruct+40,strPtr,deviceLen);strPtr+=deviceLen;var descriptionLen=lengthBytesUTF8(info.description);WebGPU.setStringView(infoStruct+56,strPtr,descriptionLen);strPtr+=descriptionLen;(growMemViews(),HEAP32)[(infoStruct+72)/4]=2;var adapterType=info.isFallbackAdapter?3:4;(growMemViews(),HEAP32)[(infoStruct+76)/4]=adapterType;(growMemViews(),HEAPU32)[(infoStruct+80)/4]=0;(growMemViews(),HEAPU32)[(infoStruct+84)/4]=0},AddressMode:[,"clamp-to-edge","repeat","mirror-repeat"],BlendFactor:[,"zero","one","src","one-minus-src","src-alpha","one-minus-src-alpha","dst","one-minus-dst","dst-alpha","one-minus-dst-alpha","src-alpha-saturated","constant","one-minus-constant","src1","one-minus-src1","src1-alpha","one-minus-src1-alpha"],BlendOperation:[,"add","subtract","reverse-subtract","min","max"],BufferBindingType:[,,"uniform","storage","read-only-storage"],BufferMapState:[,"unmapped","pending","mapped"],CompareFunction:[,"never","less","equal","less-equal","greater","not-equal","greater-equal","always"],CompilationInfoRequestStatus:[,"success","callback-cancelled"],ComponentSwizzle:[,"0","1","r","g","b","a"],CompositeAlphaMode:[,"opaque","premultiplied","unpremultiplied","inherit"],CullMode:[,"none","front","back"],ErrorFilter:[,"validation","out-of-memory","internal"],FeatureLevel:[,"compatibility","core"],FeatureName:{1:"core-features-and-limits",2:"depth-clip-control",3:"depth32float-stencil8",4:"texture-compression-bc",5:"texture-compression-bc-sliced-3d",6:"texture-compression-etc2",7:"texture-compression-astc",8:"texture-compression-astc-sliced-3d",9:"timestamp-query",10:"indirect-first-instance",11:"shader-f16",12:"rg11b10ufloat-renderable",13:"bgra8unorm-storage",14:"float32-filterable",15:"float32-blendable",16:"clip-distances",17:"dual-source-blending",18:"subgroups",19:"texture-formats-tier1",20:"texture-formats-tier2",21:"primitive-index",22:"texture-component-swizzle",327692:"chromium-experimental-unorm16-texture-formats",327729:"chromium-experimental-multi-draw-indirect"},FilterMode:[,"nearest","linear"],FrontFace:[,"ccw","cw"],IndexFormat:[,"uint16","uint32"],InstanceFeatureName:[,"timed-wait-any","shader-source-spirv","multiple-devices-per-adapter"],LoadOp:[,"load","clear"],MipmapFilterMode:[,"nearest","linear"],OptionalBool:["false","true"],PowerPreference:[,"low-power","high-performance"],PredefinedColorSpace:[,"srgb","display-p3"],PrimitiveTopology:[,"point-list","line-list","line-strip","triangle-list","triangle-strip"],QueryType:[,"occlusion","timestamp"],SamplerBindingType:[,,"filtering","non-filtering","comparison"],Status:[,"success","error"],StencilOperation:[,"keep","zero","replace","invert","increment-clamp","decrement-clamp","increment-wrap","decrement-wrap"],StorageTextureAccess:[,,"write-only","read-only","read-write"],StoreOp:[,"store","discard"],SurfaceGetCurrentTextureStatus:[,"success-optimal","success-suboptimal","timeout","outdated","lost","error"],TextureAspect:[,"all","stencil-only","depth-only"],TextureDimension:[,"1d","2d","3d"],TextureFormat:[,"r8unorm","r8snorm","r8uint","r8sint","r16unorm","r16snorm","r16uint","r16sint","r16float","rg8unorm","rg8snorm","rg8uint","rg8sint","r32float","r32uint","r32sint","rg16unorm","rg16snorm","rg16uint","rg16sint","rg16float","rgba8unorm","rgba8unorm-srgb","rgba8snorm","rgba8uint","rgba8sint","bgra8unorm","bgra8unorm-srgb","rgb10a2uint","rgb10a2unorm","rg11b10ufloat","rgb9e5ufloat","rg32float","rg32uint","rg32sint","rgba16unorm","rgba16snorm","rgba16uint","rgba16sint","rgba16float","rgba32float","rgba32uint","rgba32sint","stencil8","depth16unorm","depth24plus","depth24plus-stencil8","depth32float","depth32float-stencil8","bc1-rgba-unorm","bc1-rgba-unorm-srgb","bc2-rgba-unorm","bc2-rgba-unorm-srgb","bc3-rgba-unorm","bc3-rgba-unorm-srgb","bc4-r-unorm","bc4-r-snorm","bc5-rg-unorm","bc5-rg-snorm","bc6h-rgb-ufloat","bc6h-rgb-float","bc7-rgba-unorm","bc7-rgba-unorm-srgb","etc2-rgb8unorm","etc2-rgb8unorm-srgb","etc2-rgb8a1unorm","etc2-rgb8a1unorm-srgb","etc2-rgba8unorm","etc2-rgba8unorm-srgb","eac-r11unorm","eac-r11snorm","eac-rg11unorm","eac-rg11snorm","astc-4x4-unorm","astc-4x4-unorm-srgb","astc-5x4-unorm","astc-5x4-unorm-srgb","astc-5x5-unorm","astc-5x5-unorm-srgb","astc-6x5-unorm","astc-6x5-unorm-srgb","astc-6x6-unorm","astc-6x6-unorm-srgb","astc-8x5-unorm","astc-8x5-unorm-srgb","astc-8x6-unorm","astc-8x6-unorm-srgb","astc-8x8-unorm","astc-8x8-unorm-srgb","astc-10x5-unorm","astc-10x5-unorm-srgb","astc-10x6-unorm","astc-10x6-unorm-srgb","astc-10x8-unorm","astc-10x8-unorm-srgb","astc-10x10-unorm","astc-10x10-unorm-srgb","astc-12x10-unorm","astc-12x10-unorm-srgb","astc-12x12-unorm","astc-12x12-unorm-srgb"],TextureSampleType:[,,"float","unfilterable-float","depth","sint","uint"],TextureViewDimension:[,"1d","2d","2d-array","cube","cube-array","3d"],ToneMappingMode:[,"standard","extended"],VertexFormat:[,"uint8","uint8x2","uint8x4","sint8","sint8x2","sint8x4","unorm8","unorm8x2","unorm8x4","snorm8","snorm8x2","snorm8x4","uint16","uint16x2","uint16x4","sint16","sint16x2","sint16x4","unorm16","unorm16x2","unorm16x4","snorm16","snorm16x2","snorm16x4","float16","float16x2","float16x4","float32","float32x2","float32x3","float32x4","uint32","uint32x2","uint32x3","uint32x4","sint32","sint32x2","sint32x3","sint32x4","unorm10-10-10-2","unorm8x4-bgra"],VertexStepMode:[,"vertex","instance"],WGSLLanguageFeatureName:[,"readonly_and_readwrite_storage_textures","packed_4x8_integer_dot_product","unrestricted_pointer_parameters","pointer_composite_access","uniform_buffer_standard_layout","subgroup_id","texture_and_sampler_let","subgroup_uniformity","texture_formats_tier1"]};var emwgpuStringToInt_DeviceLostReason={undefined:1,unknown:1,destroyed:2};var runtimeKeepalivePop=()=>{runtimeKeepaliveCounter-=1};function _emwgpuAdapterRequestDevice(adapterPtr,futureId,deviceLostFutureId,devicePtr,queuePtr,descriptor){adapterPtr=bigintToI53Checked(adapterPtr);futureId=bigintToI53Checked(futureId);deviceLostFutureId=bigintToI53Checked(deviceLostFutureId);devicePtr=bigintToI53Checked(devicePtr);queuePtr=bigintToI53Checked(queuePtr);descriptor=bigintToI53Checked(descriptor);var adapter=WebGPU.getJsObject(adapterPtr);var desc={};if(descriptor){var requiredFeatureCount=Number((growMemViews(),HEAPU64)[(descriptor+24)/8]);if(requiredFeatureCount){var requiredFeaturesPtr=Number((growMemViews(),HEAPU64)[(descriptor+32)/8]);desc["requiredFeatures"]=Array.from((growMemViews(),HEAPU32).subarray(requiredFeaturesPtr/4,(requiredFeaturesPtr+requiredFeatureCount*4)/4),feature=>WebGPU.FeatureName[feature])}var limitsPtr=Number((growMemViews(),HEAPU64)[(descriptor+40)/8]);if(limitsPtr){var nextInChainPtr=Number((growMemViews(),HEAPU64)[limitsPtr/8]);var requiredLimits={};function setLimitU32IfDefined(name,basePtr,limitOffset,ignoreIfZero=false){var ptr=basePtr+limitOffset;var value=(growMemViews(),HEAPU32)[ptr/4];if(value!=4294967295&&(!ignoreIfZero||value!=0)){requiredLimits[name]=value}}function setLimitU64IfDefined(name,basePtr,limitOffset){var ptr=basePtr+limitOffset;var limitPart1=(growMemViews(),HEAPU32)[ptr/4];var limitPart2=(growMemViews(),HEAPU32)[(ptr+4)/4];if(limitPart1!=4294967295||limitPart2!=4294967295){requiredLimits[name]=readI53FromI64(ptr)}}setLimitU32IfDefined("maxTextureDimension1D",limitsPtr,8);setLimitU32IfDefined("maxTextureDimension2D",limitsPtr,12);setLimitU32IfDefined("maxTextureDimension3D",limitsPtr,16);setLimitU32IfDefined("maxTextureArrayLayers",limitsPtr,20);setLimitU32IfDefined("maxBindGroups",limitsPtr,24);setLimitU32IfDefined("maxBindGroupsPlusVertexBuffers",limitsPtr,28);setLimitU32IfDefined("maxBindingsPerBindGroup",limitsPtr,32);setLimitU32IfDefined("maxDynamicUniformBuffersPerPipelineLayout",limitsPtr,36);setLimitU32IfDefined("maxDynamicStorageBuffersPerPipelineLayout",limitsPtr,40);setLimitU32IfDefined("maxSampledTexturesPerShaderStage",limitsPtr,44);setLimitU32IfDefined("maxSamplersPerShaderStage",limitsPtr,48);setLimitU32IfDefined("maxStorageBuffersPerShaderStage",limitsPtr,52);setLimitU32IfDefined("maxStorageTexturesPerShaderStage",limitsPtr,56);setLimitU32IfDefined("maxUniformBuffersPerShaderStage",limitsPtr,60);setLimitU32IfDefined("minUniformBufferOffsetAlignment",limitsPtr,80);setLimitU32IfDefined("minStorageBufferOffsetAlignment",limitsPtr,84);setLimitU64IfDefined("maxUniformBufferBindingSize",limitsPtr,64);setLimitU64IfDefined("maxStorageBufferBindingSize",limitsPtr,72);setLimitU32IfDefined("maxVertexBuffers",limitsPtr,88);setLimitU64IfDefined("maxBufferSize",limitsPtr,96);setLimitU32IfDefined("maxVertexAttributes",limitsPtr,104);setLimitU32IfDefined("maxVertexBufferArrayStride",limitsPtr,108);setLimitU32IfDefined("maxInterStageShaderVariables",limitsPtr,112);setLimitU32IfDefined("maxColorAttachments",limitsPtr,116);setLimitU32IfDefined("maxColorAttachmentBytesPerSample",limitsPtr,120);setLimitU32IfDefined("maxComputeWorkgroupStorageSize",limitsPtr,124);setLimitU32IfDefined("maxComputeInvocationsPerWorkgroup",limitsPtr,128);setLimitU32IfDefined("maxComputeWorkgroupSizeX",limitsPtr,132);setLimitU32IfDefined("maxComputeWorkgroupSizeY",limitsPtr,136);setLimitU32IfDefined("maxComputeWorkgroupSizeZ",limitsPtr,140);setLimitU32IfDefined("maxComputeWorkgroupsPerDimension",limitsPtr,144);setLimitU32IfDefined("maxImmediateSize",limitsPtr,148,true);if(nextInChainPtr!==0){var sType=(growMemViews(),HEAP32)[(nextInChainPtr+8)/4];var compatibilityModeLimitsPtr=nextInChainPtr;if("maxStorageBuffersInVertexStage"in GPUSupportedLimits.prototype){setLimitU32IfDefined("maxStorageBuffersInVertexStage",compatibilityModeLimitsPtr,16);setLimitU32IfDefined("maxStorageTexturesInVertexStage",compatibilityModeLimitsPtr,20);setLimitU32IfDefined("maxStorageBuffersInFragmentStage",compatibilityModeLimitsPtr,24);setLimitU32IfDefined("maxStorageTexturesInFragmentStage",compatibilityModeLimitsPtr,28)}}desc["requiredLimits"]=requiredLimits}var defaultQueuePtr=Number((growMemViews(),HEAPU64)[(descriptor+48)/8]);if(defaultQueuePtr){var defaultQueueDesc={label:WebGPU.makeStringFromOptionalStringView(defaultQueuePtr+8)};desc["defaultQueue"]=defaultQueueDesc}desc["label"]=WebGPU.makeStringFromOptionalStringView(descriptor+8)}runtimeKeepalivePush();WebGPU.Internals.futureInsert(futureId,adapter.requestDevice(desc).then(device=>{runtimeKeepalivePop();callUserCallback(()=>{WebGPU.Internals.jsObjectInsert(queuePtr,device.queue);WebGPU.Internals.jsObjectInsert(devicePtr,device);devicePtr=BigInt(devicePtr);WebGPU.Internals.futureInsert(deviceLostFutureId,device.lost.then(info=>{callUserCallback(()=>{device.onuncapturederror=ev=>{};var sp=stackSave();var messagePtr=stringToUTF8OnStack(info.message);_emwgpuOnDeviceLostCompleted(deviceLostFutureId,emwgpuStringToInt_DeviceLostReason[info.reason],BigInt(messagePtr));stackRestore(sp)})}));device.onuncapturederror=ev=>{var type=5;if(ev.error instanceof GPUValidationError)type=2;else if(ev.error instanceof GPUOutOfMemoryError)type=3;else if(ev.error instanceof GPUInternalError)type=4;var sp=stackSave();var messagePtr=stringToUTF8OnStack(ev.error.message);_emwgpuOnUncapturedError(BigInt(devicePtr),type,BigInt(messagePtr));stackRestore(sp)};_emwgpuOnRequestDeviceCompleted(futureId,1,BigInt(devicePtr),0n)})},ex=>{runtimeKeepalivePop();callUserCallback(()=>{var sp=stackSave();var messagePtr=stringToUTF8OnStack(ex.message);_emwgpuOnRequestDeviceCompleted(futureId,3,BigInt(devicePtr),BigInt(messagePtr));if(deviceLostFutureId){_emwgpuOnDeviceLostCompleted(deviceLostFutureId,4,BigInt(messagePtr))}stackRestore(sp)})}))}function _emwgpuBufferDestroy(bufferPtr){bufferPtr=bigintToI53Checked(bufferPtr);var buffer=WebGPU.getJsObject(bufferPtr);var onUnmap=WebGPU.Internals.bufferOnUnmaps[bufferPtr];if(onUnmap){for(var i=0;i<onUnmap.length;++i){onUnmap[i]()}delete WebGPU.Internals.bufferOnUnmaps[bufferPtr]}buffer.destroy()}var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};var _emwgpuBufferGetConstMappedRange=function(bufferPtr,offset,size){bufferPtr=bigintToI53Checked(bufferPtr);offset=bigintToI53Checked(offset);size=bigintToI53Checked(size);var ret=(()=>{var buffer=WebGPU.getJsObject(bufferPtr);if(size==-1)size=undefined;var mapped;try{mapped=buffer.getMappedRange(offset,size)}catch(ex){return 0n}var data=_memalign(16,mapped.byteLength);(growMemViews(),HEAPU8).set(new Uint8Array(mapped),data);WebGPU.Internals.bufferOnUnmaps[bufferPtr].push(()=>_free(data));return data})();return BigInt(ret)};var _emwgpuBufferMapAsync=function(bufferPtr,futureId,mode,offset,size){bufferPtr=bigintToI53Checked(bufferPtr);futureId=bigintToI53Checked(futureId);mode=bigintToI53Checked(mode);offset=bigintToI53Checked(offset);size=bigintToI53Checked(size);var buffer=WebGPU.getJsObject(bufferPtr);WebGPU.Internals.bufferOnUnmaps[bufferPtr]=[];if(size==-1)size=undefined;runtimeKeepalivePush();WebGPU.Internals.futureInsert(futureId,buffer.mapAsync(mode,offset,size).then(()=>{runtimeKeepalivePop();callUserCallback(()=>{_emwgpuOnMapAsyncCompleted(futureId,1,0n)})},ex=>{runtimeKeepalivePop();callUserCallback(()=>{var sp=stackSave();var messagePtr=stringToUTF8OnStack(ex.message);var status=ex.name==="AbortError"?4:ex.name==="OperationError"?3:0;_emwgpuOnMapAsyncCompleted(futureId,status,BigInt(messagePtr));delete WebGPU.Internals.bufferOnUnmaps[bufferPtr]})}))};function _emwgpuBufferUnmap(bufferPtr){bufferPtr=bigintToI53Checked(bufferPtr);var buffer=WebGPU.getJsObject(bufferPtr);var onUnmap=WebGPU.Internals.bufferOnUnmaps[bufferPtr];if(!onUnmap){return}for(var i=0;i<onUnmap.length;++i){onUnmap[i]()}delete WebGPU.Internals.bufferOnUnmaps[bufferPtr];buffer.unmap()}function _emwgpuDelete(ptr){ptr=bigintToI53Checked(ptr);delete WebGPU.Internals.jsObjects[ptr]}function _emwgpuDeviceCreateBuffer(devicePtr,descriptor,bufferPtr){devicePtr=bigintToI53Checked(devicePtr);descriptor=bigintToI53Checked(descriptor);bufferPtr=bigintToI53Checked(bufferPtr);var mappedAtCreation=!!(growMemViews(),HEAPU32)[(descriptor+40)/4];var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+8),usage:(growMemViews(),HEAPU32)[(descriptor+24)/4],size:readI53FromI64(descriptor+32),mappedAtCreation};var device=WebGPU.getJsObject(devicePtr);var buffer;try{buffer=device.createBuffer(desc)}catch(ex){return false}WebGPU.Internals.jsObjectInsert(bufferPtr,buffer);if(mappedAtCreation){WebGPU.Internals.bufferOnUnmaps[bufferPtr]=[]}return true}function _emwgpuDeviceCreateShaderModule(devicePtr,descriptor,shaderModulePtr){devicePtr=bigintToI53Checked(devicePtr);descriptor=bigintToI53Checked(descriptor);shaderModulePtr=bigintToI53Checked(shaderModulePtr);var nextInChainPtr=Number((growMemViews(),HEAPU64)[descriptor/8]);var sType=(growMemViews(),HEAP32)[(nextInChainPtr+8)/4];var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+8),code:""};switch(sType){case 2:{desc["code"]=WebGPU.makeStringFromStringView(nextInChainPtr+16);break}}var device=WebGPU.getJsObject(devicePtr);WebGPU.Internals.jsObjectInsert(shaderModulePtr,device.createShaderModule(desc))}var _emwgpuDeviceDestroy=devicePtr=>{const device=WebGPU.getJsObject(devicePtr);device.onuncapturederror=null;device.destroy()};function _emwgpuInstanceRequestAdapter(instancePtr,futureId,options,adapterPtr){instancePtr=bigintToI53Checked(instancePtr);futureId=bigintToI53Checked(futureId);options=bigintToI53Checked(options);adapterPtr=bigintToI53Checked(adapterPtr);var opts;if(options){opts={featureLevel:WebGPU.FeatureLevel[(growMemViews(),HEAP32)[(options+8)/4]],powerPreference:WebGPU.PowerPreference[(growMemViews(),HEAP32)[(options+12)/4]],forceFallbackAdapter:!!(growMemViews(),HEAPU32)[(options+16)/4]};var nextInChainPtr=Number((growMemViews(),HEAPU64)[options/8]);if(nextInChainPtr!==0){var sType=(growMemViews(),HEAP32)[(nextInChainPtr+8)/4];var webxrOptions=nextInChainPtr;opts.xrCompatible=!!(growMemViews(),HEAPU32)[(webxrOptions+16)/4]}}if(!("gpu"in navigator)){var sp=stackSave();var messagePtr=stringToUTF8OnStack("WebGPU not available on this browser (navigator.gpu is not available)");_emwgpuOnRequestAdapterCompleted(futureId,3,BigInt(adapterPtr),BigInt(messagePtr));stackRestore(sp);return}runtimeKeepalivePush();WebGPU.Internals.futureInsert(futureId,navigator.gpu.requestAdapter(opts).then(adapter=>{runtimeKeepalivePop();callUserCallback(()=>{if(adapter){WebGPU.Internals.jsObjectInsert(adapterPtr,adapter);_emwgpuOnRequestAdapterCompleted(futureId,1,BigInt(adapterPtr),0n)}else{var sp=stackSave();var messagePtr=stringToUTF8OnStack("WebGPU not available on this browser (requestAdapter returned null)");_emwgpuOnRequestAdapterCompleted(futureId,3,BigInt(adapterPtr),BigInt(messagePtr));stackRestore(sp)}})},ex=>{runtimeKeepalivePop();callUserCallback(()=>{var sp=stackSave();var messagePtr=stringToUTF8OnStack(ex.message);_emwgpuOnRequestAdapterCompleted(futureId,4,BigInt(adapterPtr),BigInt(messagePtr));stackRestore(sp)})}))}var _emwgpuQueueOnSubmittedWorkDone=function(queuePtr,futureId){queuePtr=bigintToI53Checked(queuePtr);futureId=bigintToI53Checked(futureId);var queue=WebGPU.getJsObject(queuePtr);runtimeKeepalivePush();WebGPU.Internals.futureInsert(futureId,queue.onSubmittedWorkDone().then(()=>{runtimeKeepalivePop();callUserCallback(()=>{_emwgpuOnWorkDoneCompleted(futureId,1)})}))};var _emwgpuWaitAny=function(futurePtr,futureCount,timeoutMSPtr){futurePtr=bigintToI53Checked(futurePtr);futureCount=bigintToI53Checked(futureCount);timeoutMSPtr=bigintToI53Checked(timeoutMSPtr);return Asyncify.handleAsync(async()=>{var promises=[];if(timeoutMSPtr){var timeoutMS=(growMemViews(),HEAP32)[timeoutMSPtr/4];promises.length=futureCount+1;promises[futureCount]=new Promise(resolve=>setTimeout(resolve,timeoutMS,0))}else{promises.length=futureCount}for(var i=0;i<futureCount;++i){var futureId=readI53FromI64(futurePtr+i*8);if(!(futureId in WebGPU.Internals.futures)){return futureId}promises[i]=WebGPU.Internals.futures[futureId]}const firstResolvedFuture=await Promise.race(promises);delete WebGPU.Internals.futures[firstResolvedFuture];return firstResolvedFuture})};_emwgpuWaitAny.isAsync=true;var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.language||"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};function _environ_get(__environ,environ_buf){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(14,0,1,__environ,environ_buf);__environ=bigintToI53Checked(__environ);environ_buf=bigintToI53Checked(environ_buf);var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;(growMemViews(),HEAPU64)[(__environ+envp)/8]=BigInt(ptr);bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=8}return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(15,0,1,penviron_count,penviron_buf_size);penviron_count=bigintToI53Checked(penviron_count);penviron_buf_size=bigintToI53Checked(penviron_buf_size);var strings=getEnvStrings();(growMemViews(),HEAPU64)[penviron_count/8]=BigInt(strings.length);var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}(growMemViews(),HEAPU64)[penviron_buf_size/8]=BigInt(bufSize);return 0}function _fd_close(fd){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(16,0,1,fd);try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i<iovcnt;i++){var ptr=Number((growMemViews(),HEAPU64)[iov/8]);var len=Number((growMemViews(),HEAPU64)[(iov+8)/8]);iov+=16;var curr=FS.read(stream,(growMemViews(),HEAP8),ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break;if(typeof offset!="undefined"){offset+=curr}}return ret};function _fd_read(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(17,0,1,fd,iov,iovcnt,pnum);iov=bigintToI53Checked(iov);iovcnt=bigintToI53Checked(iovcnt);pnum=bigintToI53Checked(pnum);try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt);(growMemViews(),HEAPU64)[pnum/8]=BigInt(num);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(18,0,1,fd,offset,whence,newOffset);offset=bigintToI53Checked(offset);newOffset=bigintToI53Checked(newOffset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);(growMemViews(),HEAP64)[newOffset/8]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i<iovcnt;i++){var ptr=Number((growMemViews(),HEAPU64)[iov/8]);var len=Number((growMemViews(),HEAPU64)[(iov+8)/8]);iov+=16;var curr=FS.write(stream,(growMemViews(),HEAP8),ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len){break}if(typeof offset!="undefined"){offset+=curr}}return ret};function _fd_write(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(19,0,1,fd,iov,iovcnt,pnum);iov=bigintToI53Checked(iov);iovcnt=bigintToI53Checked(iovcnt);pnum=bigintToI53Checked(pnum);try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);(growMemViews(),HEAPU64)[pnum/8]=BigInt(num);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _random_get(buffer,size){buffer=bigintToI53Checked(buffer);size=bigintToI53Checked(size);try{randomFill((growMemViews(),HEAPU8).subarray(buffer,buffer+size));return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _wgpuAdapterGetInfo(adapterPtr,info){adapterPtr=bigintToI53Checked(adapterPtr);info=bigintToI53Checked(info);var adapter=WebGPU.getJsObject(adapterPtr);WebGPU.fillAdapterInfoStruct(adapter.info,info);return 1}function _wgpuAdapterGetLimits(adapterPtr,limitsOutPtr){adapterPtr=bigintToI53Checked(adapterPtr);limitsOutPtr=bigintToI53Checked(limitsOutPtr);var adapter=WebGPU.getJsObject(adapterPtr);WebGPU.fillLimitStruct(adapter.limits,limitsOutPtr);return 1}function _wgpuAdapterHasFeature(adapterPtr,featureEnumValue){adapterPtr=bigintToI53Checked(adapterPtr);var adapter=WebGPU.getJsObject(adapterPtr);return adapter.features.has(WebGPU.FeatureName[featureEnumValue])}var _wgpuBufferGetSize=function(bufferPtr){bufferPtr=bigintToI53Checked(bufferPtr);var ret=(()=>{var buffer=WebGPU.getJsObject(bufferPtr);return buffer.size})();return BigInt(ret)};var _wgpuCommandEncoderBeginComputePass=function(encoderPtr,descriptor){encoderPtr=bigintToI53Checked(encoderPtr);descriptor=bigintToI53Checked(descriptor);var ret=(()=>{var desc;if(descriptor){desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+8),timestampWrites:WebGPU.makePassTimestampWrites(Number((growMemViews(),HEAPU64)[(descriptor+24)/8]))}}var commandEncoder=WebGPU.getJsObject(encoderPtr);var ptr=_emwgpuCreateComputePassEncoder(0n);WebGPU.Internals.jsObjectInsert(ptr,commandEncoder.beginComputePass(desc));return ptr})();return BigInt(ret)};function _wgpuCommandEncoderCopyBufferToBuffer(encoderPtr,srcPtr,srcOffset,dstPtr,dstOffset,size){encoderPtr=bigintToI53Checked(encoderPtr);srcPtr=bigintToI53Checked(srcPtr);srcOffset=bigintToI53Checked(srcOffset);dstPtr=bigintToI53Checked(dstPtr);dstOffset=bigintToI53Checked(dstOffset);size=bigintToI53Checked(size);var commandEncoder=WebGPU.getJsObject(encoderPtr);var src=WebGPU.getJsObject(srcPtr);var dst=WebGPU.getJsObject(dstPtr);commandEncoder.copyBufferToBuffer(src,srcOffset,dst,dstOffset,size)}var _wgpuCommandEncoderFinish=function(encoderPtr,descriptor){encoderPtr=bigintToI53Checked(encoderPtr);descriptor=bigintToI53Checked(descriptor);var ret=(()=>{var commandEncoder=WebGPU.getJsObject(encoderPtr);var ptr=_emwgpuCreateCommandBuffer(0n);WebGPU.Internals.jsObjectInsert(ptr,commandEncoder.finish());return ptr})();return BigInt(ret)};function _wgpuComputePassEncoderDispatchWorkgroups(passPtr,x,y,z){passPtr=bigintToI53Checked(passPtr);var pass=WebGPU.getJsObject(passPtr);pass.dispatchWorkgroups(x,y,z)}function _wgpuComputePassEncoderEnd(passPtr){passPtr=bigintToI53Checked(passPtr);var pass=WebGPU.getJsObject(passPtr);pass.end()}function _wgpuComputePassEncoderSetBindGroup(passPtr,groupIndex,groupPtr,dynamicOffsetCount,dynamicOffsetsPtr){passPtr=bigintToI53Checked(passPtr);groupPtr=bigintToI53Checked(groupPtr);dynamicOffsetCount=bigintToI53Checked(dynamicOffsetCount);dynamicOffsetsPtr=bigintToI53Checked(dynamicOffsetsPtr);var pass=WebGPU.getJsObject(passPtr);var group=WebGPU.getJsObject(groupPtr);if(dynamicOffsetCount==0){pass.setBindGroup(groupIndex,group)}else{pass.setBindGroup(groupIndex,group,(growMemViews(),HEAPU32),dynamicOffsetsPtr/4,dynamicOffsetCount)}}function _wgpuComputePassEncoderSetPipeline(passPtr,pipelinePtr){passPtr=bigintToI53Checked(passPtr);pipelinePtr=bigintToI53Checked(pipelinePtr);var pass=WebGPU.getJsObject(passPtr);var pipeline=WebGPU.getJsObject(pipelinePtr);pass.setPipeline(pipeline)}var _wgpuComputePipelineGetBindGroupLayout=function(pipelinePtr,groupIndex){pipelinePtr=bigintToI53Checked(pipelinePtr);var ret=(()=>{var pipeline=WebGPU.getJsObject(pipelinePtr);var ptr=_emwgpuCreateBindGroupLayout(0n);WebGPU.Internals.jsObjectInsert(ptr,pipeline.getBindGroupLayout(groupIndex));return ptr})();return BigInt(ret)};var _wgpuDeviceCreateBindGroup=function(devicePtr,descriptor){devicePtr=bigintToI53Checked(devicePtr);descriptor=bigintToI53Checked(descriptor);var ret=(()=>{function makeEntry(entryPtr){var bufferPtr=Number((growMemViews(),HEAPU64)[(entryPtr+16)/8]);var samplerPtr=Number((growMemViews(),HEAPU64)[(entryPtr+40)/8]);var textureViewPtr=Number((growMemViews(),HEAPU64)[(entryPtr+48)/8]);var externalTexturePtr=0;WebGPU.iterateExtensions(entryPtr,{327681:ptr=>{externalTexturePtr=Number((growMemViews(),HEAPU64)[(ptr+16)/8])}});var resource;if(bufferPtr){var size=readI53FromI64(entryPtr+32);if(size==-1)size=undefined;resource={buffer:WebGPU.getJsObject(bufferPtr),offset:readI53FromI64(entryPtr+24),size}}else{resource=WebGPU.getJsObject(samplerPtr||textureViewPtr||externalTexturePtr)}return{binding:(growMemViews(),HEAPU32)[(entryPtr+8)/4],resource}}function makeEntries(count,entriesPtrs){var entries=[];for(var i=0;i<count;++i){entries.push(makeEntry(entriesPtrs+56*i))}return entries}var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+8),layout:WebGPU.getJsObject(Number((growMemViews(),HEAPU64)[(descriptor+24)/8])),entries:makeEntries(Number((growMemViews(),HEAPU64)[(descriptor+32)/8]),Number((growMemViews(),HEAPU64)[(descriptor+40)/8]))};var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreateBindGroup(0n);WebGPU.Internals.jsObjectInsert(ptr,device.createBindGroup(desc));return ptr})();return BigInt(ret)};var _wgpuDeviceCreateCommandEncoder=function(devicePtr,descriptor){devicePtr=bigintToI53Checked(devicePtr);descriptor=bigintToI53Checked(descriptor);var ret=(()=>{var desc;if(descriptor){desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+8)}}var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreateCommandEncoder(0n);WebGPU.Internals.jsObjectInsert(ptr,device.createCommandEncoder(desc));return ptr})();return BigInt(ret)};var _wgpuDeviceCreateComputePipeline=function(devicePtr,descriptor){devicePtr=bigintToI53Checked(devicePtr);descriptor=bigintToI53Checked(descriptor);var ret=(()=>{var desc=WebGPU.makeComputePipelineDesc(descriptor);var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreateComputePipeline(0n);WebGPU.Internals.jsObjectInsert(ptr,device.createComputePipeline(desc));return ptr})();return BigInt(ret)};function _wgpuInstanceHasWGSLLanguageFeature(instance,featureEnumValue){instance=bigintToI53Checked(instance);if(!("wgslLanguageFeatures"in navigator.gpu)){return false}return navigator.gpu.wgslLanguageFeatures.has(WebGPU.WGSLLanguageFeatureName[featureEnumValue])}var _wgpuQueueSubmit=function(queuePtr,commandCount,commands){queuePtr=bigintToI53Checked(queuePtr);commandCount=bigintToI53Checked(commandCount);commands=bigintToI53Checked(commands);var queue=WebGPU.getJsObject(queuePtr);var cmds=Array.from((growMemViews(),HEAP64).subarray(commands/8,(commands+commandCount*8)/8),id=>WebGPU.getJsObject(id));queue.submit(cmds)};function _wgpuQueueWriteBuffer(queuePtr,bufferPtr,bufferOffset,data,size){queuePtr=bigintToI53Checked(queuePtr);bufferPtr=bigintToI53Checked(bufferPtr);bufferOffset=bigintToI53Checked(bufferOffset);data=bigintToI53Checked(data);size=bigintToI53Checked(size);var queue=WebGPU.getJsObject(queuePtr);var buffer=WebGPU.getJsObject(bufferPtr);var subarray=(growMemViews(),HEAPU8).subarray(data,data+size);queue.writeBuffer(buffer,bufferOffset,subarray,0,size)}var Asyncify={instrumentWasmImports(imports){var importPattern=/^(invoke_.*|__asyncjs__.*)$/;for(let[x,original]of Object.entries(imports)){if(typeof original=="function"){let isAsyncifyImport=original.isAsync||importPattern.test(x);if(isAsyncifyImport){imports[x]=original=new WebAssembly.Suspending(original)}}}},instrumentFunction(original){var wrapper=(...args)=>original(...args);return wrapper},instrumentWasmExports(exports){var exportPattern=/^(wllama_start|wllama_action|main|__main_argc_argv)$/;Asyncify.asyncExports=new Set;var ret={};for(let[x,original]of Object.entries(exports)){if(typeof original=="function"){let isAsyncifyExport=exportPattern.test(x);if(isAsyncifyExport){Asyncify.asyncExports.add(original);original=Asyncify.makeAsyncFunction(original)}var wrapper=Asyncify.instrumentFunction(original);ret[x]=wrapper}else{ret[x]=original}}return ret},asyncExports:null,isAsyncExport(func){return Asyncify.asyncExports?.has(func)},handleAsync:async startAsync=>{runtimeKeepalivePush();try{return await startAsync()}finally{runtimeKeepalivePop()}},handleSleep:startAsync=>Asyncify.handleAsync(()=>new Promise(startAsync)),makeAsyncFunction(original){return WebAssembly.promising(original)}};var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{(growMemViews(),HEAP8).set(array,buffer)};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={pointer:p=>BigInt(p),string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return BigInt(ret)},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return BigInt(ret)}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(Number(ret))}if(returnType==="pointer")return Number(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(...cArgs);function onDone(ret){if(stack!==0)stackRestore(stack);return convertReturnValue(ret)}var asyncMode=opts?.async;if(asyncMode)return ret.then(onDone);ret=onDone(ret);return ret};var cwrap=(ident,returnType,argTypes,opts)=>{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};var FS_createPath=(...args)=>FS.createPath(...args);var FS_unlink=(...args)=>FS.unlink(...args);var FS_createLazyFile=(...args)=>FS.createLazyFile(...args);var FS_createDevice=(...args)=>FS.createDevice(...args);PThread.init();FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();{initMemory();if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}Module["ENV"]=ENV;Module["mmapAlloc"]=mmapAlloc;Module["wasmMemory"]=wasmMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["FS_preloadFile"]=FS_preloadFile;Module["FS_unlink"]=FS_unlink;Module["FS_createPath"]=FS_createPath;Module["FS_createDevice"]=FS_createDevice;Module["FS"]=FS;Module["FS_createDataFile"]=FS_createDataFile;Module["FS_createLazyFile"]=FS_createLazyFile;Module["MEMFS"]=MEMFS;var proxiedFunctionTable=[_proc_exit,exitOnMainThread,pthreadCreateProxied,___syscall_fcntl64,___syscall_fstat64,___syscall_getcwd,___syscall_getdents64,___syscall_ioctl,___syscall_lstat64,___syscall_newfstatat,___syscall_openat,___syscall_stat64,__mmap_js,__munmap_js,_environ_get,_environ_sizes_get,_fd_close,_fd_read,_fd_seek,_fd_write];function __asyncjs__js_file_read(path_ptr,offset,req_size,out_ptr){return Asyncify.handleAsync(async()=>await _wllama_js_file_read(UTF8ToString(Number(path_ptr)),Number(offset),Number(req_size),Number(out_ptr)))}__asyncjs__js_file_read.sig="jjjjj";var _malloc,_free,_wllama_malloc,_wllama_start,_wllama_action,_wllama_exit,_wllama_debug,_main,_emwgpuCreateBindGroup,_emwgpuCreateBindGroupLayout,_emwgpuCreateCommandBuffer,_emwgpuCreateCommandEncoder,_emwgpuCreateComputePassEncoder,_emwgpuCreateComputePipeline,_emwgpuCreateExternalTexture,_emwgpuCreatePipelineLayout,_emwgpuCreateQuerySet,_emwgpuCreateRenderBundle,_emwgpuCreateRenderBundleEncoder,_emwgpuCreateRenderPassEncoder,_emwgpuCreateRenderPipeline,_emwgpuCreateSampler,_emwgpuCreateSurface,_emwgpuCreateTexture,_emwgpuCreateTextureView,_emwgpuCreateAdapter,_emwgpuCreateBuffer,_emwgpuCreateDevice,_emwgpuCreateQueue,_emwgpuCreateShaderModule,_emwgpuOnDeviceLostCompleted,_emwgpuOnMapAsyncCompleted,_emwgpuOnRequestAdapterCompleted,_emwgpuOnRequestDeviceCompleted,_emwgpuOnWorkDoneCompleted,_emwgpuOnUncapturedError,__emscripten_tls_init,_pthread_self,_emscripten_builtin_memalign,__emscripten_thread_init,__emscripten_thread_crashed,__emscripten_run_js_on_main_thread,__emscripten_thread_free_data,__emscripten_thread_exit,__emscripten_check_mailbox,_memalign,___trap,_emscripten_stack_set_limits,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current,__indirect_function_table,wasmTable;function assignWasmExports(wasmExports){_malloc=wasmExports["malloc"];_free=wasmExports["free"];_wllama_malloc=Module["_wllama_malloc"]=wasmExports["wllama_malloc"];_wllama_start=Module["_wllama_start"]=wasmExports["wllama_start"];_wllama_action=Module["_wllama_action"]=wasmExports["wllama_action"];_wllama_exit=Module["_wllama_exit"]=wasmExports["wllama_exit"];_wllama_debug=Module["_wllama_debug"]=wasmExports["wllama_debug"];_main=Module["_main"]=wasmExports["main"];_emwgpuCreateBindGroup=wasmExports["emwgpuCreateBindGroup"];_emwgpuCreateBindGroupLayout=wasmExports["emwgpuCreateBindGroupLayout"];_emwgpuCreateCommandBuffer=wasmExports["emwgpuCreateCommandBuffer"];_emwgpuCreateCommandEncoder=wasmExports["emwgpuCreateCommandEncoder"];_emwgpuCreateComputePassEncoder=wasmExports["emwgpuCreateComputePassEncoder"];_emwgpuCreateComputePipeline=wasmExports["emwgpuCreateComputePipeline"];_emwgpuCreateExternalTexture=wasmExports["emwgpuCreateExternalTexture"];_emwgpuCreatePipelineLayout=wasmExports["emwgpuCreatePipelineLayout"];_emwgpuCreateQuerySet=wasmExports["emwgpuCreateQuerySet"];_emwgpuCreateRenderBundle=wasmExports["emwgpuCreateRenderBundle"];_emwgpuCreateRenderBundleEncoder=wasmExports["emwgpuCreateRenderBundleEncoder"];_emwgpuCreateRenderPassEncoder=wasmExports["emwgpuCreateRenderPassEncoder"];_emwgpuCreateRenderPipeline=wasmExports["emwgpuCreateRenderPipeline"];_emwgpuCreateSampler=wasmExports["emwgpuCreateSampler"];_emwgpuCreateSurface=wasmExports["emwgpuCreateSurface"];_emwgpuCreateTexture=wasmExports["emwgpuCreateTexture"];_emwgpuCreateTextureView=wasmExports["emwgpuCreateTextureView"];_emwgpuCreateAdapter=wasmExports["emwgpuCreateAdapter"];_emwgpuCreateBuffer=wasmExports["emwgpuCreateBuffer"];_emwgpuCreateDevice=wasmExports["emwgpuCreateDevice"];_emwgpuCreateQueue=wasmExports["emwgpuCreateQueue"];_emwgpuCreateShaderModule=wasmExports["emwgpuCreateShaderModule"];_emwgpuOnDeviceLostCompleted=wasmExports["emwgpuOnDeviceLostCompleted"];_emwgpuOnMapAsyncCompleted=wasmExports["emwgpuOnMapAsyncCompleted"];_emwgpuOnRequestAdapterCompleted=wasmExports["emwgpuOnRequestAdapterCompleted"];_emwgpuOnRequestDeviceCompleted=wasmExports["emwgpuOnRequestDeviceCompleted"];_emwgpuOnWorkDoneCompleted=wasmExports["emwgpuOnWorkDoneCompleted"];_emwgpuOnUncapturedError=wasmExports["emwgpuOnUncapturedError"];__emscripten_tls_init=wasmExports["_emscripten_tls_init"];_pthread_self=wasmExports["pthread_self"];_emscripten_builtin_memalign=wasmExports["emscripten_builtin_memalign"];__emscripten_thread_init=wasmExports["_emscripten_thread_init"];__emscripten_thread_crashed=wasmExports["_emscripten_thread_crashed"];__emscripten_run_js_on_main_thread=wasmExports["_emscripten_run_js_on_main_thread"];__emscripten_thread_free_data=wasmExports["_emscripten_thread_free_data"];__emscripten_thread_exit=wasmExports["_emscripten_thread_exit"];__emscripten_check_mailbox=wasmExports["_emscripten_check_mailbox"];_memalign=wasmExports["memalign"];___trap=wasmExports["__trap"];_emscripten_stack_set_limits=wasmExports["emscripten_stack_set_limits"];__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"];_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];__indirect_function_table=wasmTable=wasmExports["__indirect_function_table"]}var wasmImports;function assignWasmImports(){wasmImports={__asyncjs__js_file_read,__pthread_create_js:___pthread_create_js,__syscall_fcntl64:___syscall_fcntl64,__syscall_getcwd:___syscall_getcwd,__syscall_getdents64:___syscall_getdents64,__syscall_ioctl:___syscall_ioctl,__syscall_openat:___syscall_openat,__syscall_stat64:___syscall_stat64,_abort_js:__abort_js,_emscripten_init_main_thread_js:__emscripten_init_main_thread_js,_emscripten_notify_mailbox_postmessage:__emscripten_notify_mailbox_postmessage,_emscripten_receive_on_main_thread_js:__emscripten_receive_on_main_thread_js,_emscripten_thread_cleanup:__emscripten_thread_cleanup,_emscripten_thread_mailbox_await:__emscripten_thread_mailbox_await,_emscripten_thread_set_strongref:__emscripten_thread_set_strongref,_localtime_js:__localtime_js,_mmap_js:__mmap_js,_munmap_js:__munmap_js,_tzset_js:__tzset_js,clock_time_get:_clock_time_get,emscripten_check_blocking_allowed:_emscripten_check_blocking_allowed,emscripten_date_now:_emscripten_date_now,emscripten_exit_with_live_runtime:_emscripten_exit_with_live_runtime,emscripten_get_callstack:_emscripten_get_callstack,emscripten_get_heap_max:_emscripten_get_heap_max,emscripten_get_now:_emscripten_get_now,emscripten_has_asyncify:_emscripten_has_asyncify,emscripten_num_logical_cores:_emscripten_num_logical_cores,emscripten_resize_heap:_emscripten_resize_heap,emwgpuAdapterRequestDevice:_emwgpuAdapterRequestDevice,emwgpuBufferDestroy:_emwgpuBufferDestroy,emwgpuBufferGetConstMappedRange:_emwgpuBufferGetConstMappedRange,emwgpuBufferMapAsync:_emwgpuBufferMapAsync,emwgpuBufferUnmap:_emwgpuBufferUnmap,emwgpuDelete:_emwgpuDelete,emwgpuDeviceCreateBuffer:_emwgpuDeviceCreateBuffer,emwgpuDeviceCreateShaderModule:_emwgpuDeviceCreateShaderModule,emwgpuDeviceDestroy:_emwgpuDeviceDestroy,emwgpuInstanceRequestAdapter:_emwgpuInstanceRequestAdapter,emwgpuQueueOnSubmittedWorkDone:_emwgpuQueueOnSubmittedWorkDone,emwgpuWaitAny:_emwgpuWaitAny,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,exit:_exit,fd_close:_fd_close,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,memory:wasmMemory,random_get:_random_get,wgpuAdapterGetInfo:_wgpuAdapterGetInfo,wgpuAdapterGetLimits:_wgpuAdapterGetLimits,wgpuAdapterHasFeature:_wgpuAdapterHasFeature,wgpuBufferGetSize:_wgpuBufferGetSize,wgpuCommandEncoderBeginComputePass:_wgpuCommandEncoderBeginComputePass,wgpuCommandEncoderCopyBufferToBuffer:_wgpuCommandEncoderCopyBufferToBuffer,wgpuCommandEncoderFinish:_wgpuCommandEncoderFinish,wgpuComputePassEncoderDispatchWorkgroups:_wgpuComputePassEncoderDispatchWorkgroups,wgpuComputePassEncoderEnd:_wgpuComputePassEncoderEnd,wgpuComputePassEncoderSetBindGroup:_wgpuComputePassEncoderSetBindGroup,wgpuComputePassEncoderSetPipeline:_wgpuComputePassEncoderSetPipeline,wgpuComputePipelineGetBindGroupLayout:_wgpuComputePipelineGetBindGroupLayout,wgpuDeviceCreateBindGroup:_wgpuDeviceCreateBindGroup,wgpuDeviceCreateCommandEncoder:_wgpuDeviceCreateCommandEncoder,wgpuDeviceCreateComputePipeline:_wgpuDeviceCreateComputePipeline,wgpuInstanceHasWGSLLanguageFeature:_wgpuInstanceHasWGSLLanguageFeature,wgpuQueueSubmit:_wgpuQueueSubmit,wgpuQueueWriteBuffer:_wgpuQueueWriteBuffer}}function applySignatureConversions(wasmExports){wasmExports=Object.assign({},wasmExports);var makeWrapper_pp=f=>a0=>Number(f(BigInt(a0)));var makeWrapper__p=f=>a0=>f(BigInt(a0));var makeWrapper___PP=f=>(a0,a1,a2)=>f(a0,BigInt(a1?a1:0),BigInt(a2?a2:0));var makeWrapper_p=f=>()=>Number(f());var makeWrapper_ppp=f=>(a0,a1)=>Number(f(BigInt(a0),BigInt(a1)));var makeWrapper__p_____=f=>(a0,a1,a2,a3,a4,a5)=>f(BigInt(a0),a1,a2,a3,a4,a5);var makeWrapper___p_p_=f=>(a0,a1,a2,a3,a4)=>f(a0,BigInt(a1),a2,BigInt(a3),a4);var makeWrapper__pp=f=>(a0,a1)=>f(BigInt(a0),BigInt(a1));wasmExports["malloc"]=makeWrapper_pp(wasmExports["malloc"]);wasmExports["free"]=makeWrapper__p(wasmExports["free"]);wasmExports["main"]=makeWrapper___PP(wasmExports["main"]);wasmExports["pthread_self"]=makeWrapper_p(wasmExports["pthread_self"]);wasmExports["emscripten_builtin_memalign"]=makeWrapper_ppp(wasmExports["emscripten_builtin_memalign"]);wasmExports["_emscripten_thread_init"]=makeWrapper__p_____(wasmExports["_emscripten_thread_init"]);wasmExports["_emscripten_run_js_on_main_thread"]=makeWrapper___p_p_(wasmExports["_emscripten_run_js_on_main_thread"]);wasmExports["_emscripten_thread_free_data"]=makeWrapper__p(wasmExports["_emscripten_thread_free_data"]);wasmExports["_emscripten_thread_exit"]=makeWrapper__p(wasmExports["_emscripten_thread_exit"]);wasmExports["memalign"]=makeWrapper_ppp(wasmExports["memalign"]);wasmExports["emscripten_stack_set_limits"]=makeWrapper__pp(wasmExports["emscripten_stack_set_limits"]);wasmExports["_emscripten_stack_restore"]=makeWrapper__p(wasmExports["_emscripten_stack_restore"]);wasmExports["_emscripten_stack_alloc"]=makeWrapper_pp(wasmExports["_emscripten_stack_alloc"]);wasmExports["emscripten_stack_get_current"]=makeWrapper_p(wasmExports["emscripten_stack_get_current"]);return wasmExports}async function callMain(){var entryFunction=_main;var argc=0;var argv=0;try{var ret=entryFunction(argc,BigInt(argv));ret=await ret;exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(){if(runDependencies>0){dependenciesFulfilled=run;return}if(ENVIRONMENT_IS_PTHREAD){initRuntime();return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}async function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();Module["onRuntimeInitialized"]?.();var noInitialRun=Module["noInitialRun"]||false;if(!noInitialRun)await callMain();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}var wasmExports;if(!ENVIRONMENT_IS_PTHREAD){createWasm();run()}\n',FILE_READ_REQ_EVENT="fs.read_req",JSPI_STUB="\nif (!WebAssembly.Suspending) {\n // JSPI not available - stubs that keep the import/export tables valid.\n // Suspending wraps imports: identity is fine since async imports won't be called.\n WebAssembly.Suspending = function (fn) {\n // console.log(fn.toString());\n return fn;\n };\n // promising wraps exports: must return a Promise so ccall's ret.then() works.\n WebAssembly.promising = function (fn) {\n return function (...args) {\n try {\n return Promise.resolve(fn(...args));\n } catch (e) {\n return Promise.reject(e);\n }\n };\n };\n}\n",ProxyToWorker=class{constructor(e,r,t,a){__publicField(this,"resources"),__publicField(this,"logger"),__publicField(this,"suppressNativeLog"),__publicField(this,"taskQueue",[]),__publicField(this,"taskId",1),__publicField(this,"resultQueue",[]),__publicField(this,"busy",!1),__publicField(this,"worker"),__publicField(this,"multiThread"),__publicField(this,"nbThread"),__publicField(this,"useAsyncFile"),__publicField(this,"fileBlobs",new Map),this.resources=e,this.nbThread=r,this.multiThread=r>0,this.logger=a,this.suppressNativeLog=t,this.useAsyncFile=canUseAsyncFileRead(e.compat)}getModuleCode(){return __async(this,null,(function*(){if(this.resources.jsPath){if(this.resources.jsPath.code)return this.resources.jsPath.code;if(isString(this.resources.jsPath)){const e=yield fetch(this.resources.jsPath);if(!e.ok)throw new Error(`Failed to fetch worker code from ${this.resources.jsPath}`);return yield e.text()}throw new Error("No JS code provided for worker")}if(this.resources.compat)throw new Error("compat mode is enabled but no jsPath was provided. Pass a worker JS via setCompat() or install @wllama/wllama-compat.");return WLLAMA_EMSCRIPTEN_CODE}))}moduleInit(e){return __async(this,null,(function*(){let r=JSPI_STUB+(yield this.getModuleCode());this.resources.noWebGPU&&(r='try{Object.defineProperty(WorkerNavigator.prototype,"gpu",{get:()=>({requestAdapter:async()=>null})});}catch(e){}'+r);let t=r.replace("var Module","var ___Module");const a={pathConfig:{"wllama.wasm":this.resources.wasmPath},nbThread:this.nbThread,compat:this.resources.compat},n=[`const RUN_OPTIONS = ${JSON.stringify(a)};`,`function wModuleInit() { ${t}; return Module; }`,LLAMA_CPP_WORKER_CODE].join(";\n\n");this.worker=createWorker(n),this.worker.onmessage=this.onRecvMsg.bind(this),this.worker.onerror=this.logger.error;const s=yield this.pushTask({verb:"module.init",args:[new Blob([r],{type:"text/javascript"}),this.useAsyncFile],callbackId:this.taskId++}),i=[];for(const r of e){const e=!this.useAsyncFile,t=yield this.fileAlloc(r.name,r.blob.size,e);i.push(__spreadValues({id:t},r)),this.useAsyncFile&&this.fileBlobs.set(r.name,r.blob)}return this.useAsyncFile||(yield Promise.all(i.map((e=>this.fileWrite(e.id,e.blob))))),s}))}wllamaStart(){return __async(this,null,(function*(){const e=yield this.pushTask({verb:"wllama.start",args:[],callbackId:this.taskId++});return this.parseResult(e)}))}wllamaAction(e,r){return __async(this,null,(function*(){const t=glueSerialize(r);return glueDeserialize(yield this.pushTask({verb:"wllama.action",args:[e,t],callbackId:this.taskId++}))}))}wllamaExit(){return __async(this,null,(function*(){this.worker&&this.worker.terminate()}))}wllamaDebug(){return __async(this,null,(function*(){const e=yield this.pushTask({verb:"wllama.debug",args:[],callbackId:this.taskId++});return JSON.parse(e)}))}fileAlloc(e,r,t){return __async(this,null,(function*(){return(yield this.pushTask({verb:"fs.alloc",args:[e,r,t],callbackId:this.taskId++})).fileId}))}fileWrite(e,r){return __async(this,null,(function*(){const t=r.stream().getReader();let a=0;for(;;){const{done:r,value:n}=yield t.read();if(r)break;const s=n.byteLength;yield this.pushTask({verb:"fs.write",args:[e,n,a],callbackId:this.taskId++},[n.buffer]),a+=s}}))}fileReadResponse(e,r,t){return __async(this,null,(function*(){var a;try{const a=this.fileBlobs.get(e);if(!a)throw new Error(`blob not found for name="${e}"`);const n=a.slice(r,r+t),s=yield n.arrayBuffer();this.worker.postMessage({verb:"fs.read_res",args:[s]},{transfer:[s]})}catch(e){this.logger.error("fileReadResponse failed, terminating worker:",e),null==(a=this.worker)||a.terminate(),this.worker=void 0,this.abort(`File read failed: ${e}`,e.stack||"")}}))}parseResult(e){const r=JSON.parse(e);if(r&&r.error)throw new WllamaRuntimeError("Unknown error, please see console.log","");return r}pushTask(e,r){return new Promise(((t,a)=>{this.taskQueue.push({resolve:t,reject:a,param:e,buffers:r}),this.runTaskLoop()}))}runTaskLoop(){return __async(this,null,(function*(){var e;if(!this.busy){for(this.busy=!0;;){const r=this.taskQueue.shift();if(!r)break;this.resultQueue.push(r),this.worker.postMessage(r.param,isSafariMobile()?void 0:{transfer:null!=(e=r.buffers)?e:[]})}this.busy=!1}}))}onRecvMsg(e){if(!e.data)return;const{verb:r,args:t}=e.data,a=this.resources.compat;if(r&&r.startsWith("console.")){if(this.suppressNativeLog)return;return r.endsWith("debug")&&this.logger.debug(...t),r.endsWith("log")&&this.logger.log(...t),r.endsWith("warn")&&this.logger.warn(...t),void(r.endsWith("error")&&this.logger.error(...t))}if("signal.abort"===r){const[e,r,n,s]=t;return s&&this.logger.error(s),void(()=>{__async(this,null,(function*(){let t="",s=r.replace("Build with -sASSERTIONS for more info.","");"abort"===e?(s=`(ABORT) ${s}`,t=n.replace(/\|/g,"\n")):"exception"===e&&(t=n);const i=yield Debug.decodeStackTrace(t,a);this.logger.error(`Stack trace (${e}):\n`+i),this.abort(s,i)}))})()}if(r===FILE_READ_REQ_EVENT){const[e,r,a]=t;return void this.fileReadResponse(e,r,a).catch((()=>{}))}const{callbackId:n,result:s,err:i}=e.data;if(n){const e=this.resultQueue.findIndex((e=>e.param.callbackId===n));if(-1!==e){const r=this.resultQueue.splice(e,1)[0];i?r.reject(i):r.resolve(s)}else this.logger.error(`Cannot find waiting task with callbackId = ${n}`)}}abort(e,r){const t=new WllamaRuntimeError(0==e.length?"(unknown error)":e,r);for(;this.resultQueue.length>0;){const e=this.resultQueue.pop();if(!e)break;e.reject(t)}for(;this.taskQueue.length>0;){const e=this.taskQueue.pop();if(!e)break;e.reject(t)}}},HF_BASE="https://huggingface.co",DEFAULT_QUANTS=["Q4_K_M","Q8_0"];function fetchRepoFiles(e,r){return __async(this,null,(function*(){var t;const a=`${HF_BASE}/api/models/${e}/tree/main?recursive=true`,n={Accept:"application/json"};r&&(n.Authorization=`Bearer ${r}`);const s=yield fetch(a,{headers:n});if(!s.ok){let e=s.statusText;try{e=null!=(t=(yield s.json()).error)?t:e}catch(e){}throw new Error(`HF API error (${s.status}): ${e}`)}return s.json()}))}function firstShardPath(e,r){const t=r.match(/^(.+)-(\d{5})-of-(\d{5})\.gguf$/i);if(!t)return r;const a=`${t[1]}-00001-of-${t[3]}.gguf`;return e.some((e=>e.path===a))?a:r}function selectFile(e,r,t){const a=e.filter((e=>{if("file"!==e.type||!e.path.toLowerCase().endsWith(".gguf"))return!1;const r=e.path.toLowerCase().includes("mmproj");return t?r:!r}));if(0===a.length)return null;if(r){const e=r.toUpperCase(),t=a.find((r=>r.path.toUpperCase().includes(e)));return t?firstShardPath(a,t.path):null}for(const e of DEFAULT_QUANTS){const r=a.find((r=>r.path.toUpperCase().includes(e)));if(r)return firstShardPath(a,r.path)}return firstShardPath(a,a[0].path)}function getHFModelSource(e){return __async(this,null,(function*(){const{repo:r,file:t,quant:a,mmprojFile:n,mmprojQuant:s,hfToken:i}=e,o=yield fetchRepoFiles(r,i),l=null!=t?t:selectFile(o,a,!1);if(!l)throw new Error(`No GGUF file found in repo "${r}"`);const u={url:`${HF_BASE}/${r}/resolve/main/${l}`};if(n||void 0!==s){const e=null!=n?n:selectFile(o,s,!0);e&&(u.mmprojUrl=`${HF_BASE}/${r}/resolve/main/${e}`)}if(i){const e=new URLSearchParams({token:i});u.url+=`?${e}`,u.mmprojUrl&&(u.mmprojUrl+=`?${e}`)}return u}))}function getHFFileSHA256(e,r){return __async(this,null,(function*(){if(!e.includes("/resolve/"))return;const t=e.replace("/resolve/","/raw/");try{const e=(yield fetch(t,{headers:r}).then((e=>e.text()))).match(/^oid sha256:([0-9a-f]{64})$/m);return e?e[1]:void 0}catch(e){return}}))}var OPFSBackend=class{isSupported(){var e;return"undefined"!=typeof navigator&&"storage"in navigator&&!!(null==(e=navigator.storage)?void 0:e.getDirectory)}read(e){return __async(this,null,(function*(){try{const r=yield getCacheDir(),t=yield r.getFileHandle(e);return yield t.getFile()}catch(e){return null}}))}write(e,r){return __async(this,null,(function*(){const t=yield openWritable(e);yield t.truncate(0);const a=r.getReader();try{for(;;){const{done:e,value:r}=yield a.read();if(e)break;yield t.write(r)}}finally{yield t.close()}}))}getSize(e){return __async(this,null,(function*(){try{const r=yield getCacheDir(),t=yield r.getFileHandle(e);return(yield t.getFile()).size}catch(e){return-1}}))}list(){return __async(this,null,(function*(){const e=yield getCacheDir(),r=[];try{for(var t,a,n,s=__forAwait(e.entries());t=!(a=yield s.next()).done;t=!1){const[e,t]=a.value;if("file"===t.kind){const a=yield t.getFile();r.push({key:e,size:a.size})}}}catch(a){n=[a]}finally{try{t&&(a=s.return)&&(yield a.call(s))}finally{if(n)throw n[0]}}return r}))}delete(e){return __async(this,null,(function*(){try{const r=yield getCacheDir();yield r.removeEntry(e)}catch(e){if("NotFoundError"!==(null==e?void 0:e.name))throw e}}))}};function getCacheDir(){return __async(this,null,(function*(){return(yield navigator.storage.getDirectory()).getDirectoryHandle("cache",{create:!0})}))}function openWritable(e){return __async(this,null,(function*(){const r=createWorker(OPFS_UTILS_WORKER_CODE);let t,a;r.onmessage=e=>{e.data.ok?t(null):e.data.err&&a(e.data.err)},r.onerror=e=>{var r;return null==a?void 0:a(null!=(r=e.message)?r:e)};const n=e=>new Promise(((n,s)=>{t=n,a=s,r.postMessage(e,isSafariMobile()?void 0:{transfer:"buf"in e&&e.buf?[e.buf.buffer]:[]})}));return yield n({action:"open",filename:e}),{truncate:()=>__async(this,null,(function*(){})),write:e=>n({action:"write",buf:e}),close:()=>__async(this,null,(function*(){yield n({action:"close"}),r.terminate()}))}}))}function makeHash(e){return{algorithm:"SHA-256",value:e}}var COSInternalBackend=class{isSupported(){return"undefined"!=typeof navigator&&"crossOriginStorage"in navigator}read(e){return __async(this,null,(function*(){try{return(yield navigator.crossOriginStorage.requestFileHandle(makeHash(e))).getFile()}catch(e){return null}}))}write(e,r){return __async(this,null,(function*(){const t=yield navigator.crossOriginStorage.requestFileHandle(makeHash(e),{create:!0}),a=yield t.createWritable(),n=r.getReader();try{for(;;){const{done:e,value:r}=yield n.read();if(e)break;yield a.write(r)}}finally{yield a.close()}}))}getSize(e){return __async(this,null,(function*(){try{const r=yield navigator.crossOriginStorage.requestFileHandle(makeHash(e));return(yield r.getFile()).size}catch(e){return-1}}))}list(){return __async(this,null,(function*(){throw new Error("not implemented")}))}delete(e){return __async(this,null,(function*(){throw new Error("not implemented")}))}},COSBackend=class{constructor(){__publicField(this,"cos",new COSInternalBackend),__publicField(this,"priv",new OPFSBackend)}isSupported(){return this.priv.isSupported()}read(e,r){return __async(this,null,(function*(){if((null==r?void 0:r.sha256)&&this.cos.isSupported()){const e=yield this.cos.read(r.sha256);if(e)return e}return this.priv.read(e)}))}write(e,r,t){return __async(this,null,(function*(){(null==t?void 0:t.sha256)&&this.cos.isSupported()?yield this.cos.write(t.sha256,r):yield this.priv.write(e,r)}))}getSize(e,r){return __async(this,null,(function*(){if((null==r?void 0:r.sha256)&&this.cos.isSupported()){const e=yield this.cos.getSize(r.sha256);if(-1!==e)return e}return this.priv.getSize(e)}))}list(){return __async(this,null,(function*(){return this.priv.list()}))}delete(e){return __async(this,null,(function*(){return this.priv.delete(e)}))}},PREFIX_METADATA="__metadata__",POLYFILL_ETAG="polyfill_for_older_version";function hintFromMetadata(e){if(e)return e.sha256?{sha256:e.sha256}:void 0}var CacheManager=class{constructor(e=[new COSBackend]){__publicField(this,"sb");for(const r of e)if(r.isSupported())return void(this.sb=r);throw new Error("No supported storage backend found")}getNameFromURL(e){return __async(this,null,(function*(){return urlToFileName(e,"")}))}write(e,r,t){return __async(this,null,(function*(){yield this.sb.write(e,r),yield this.writeMetadata(e,t)}))}download(e){return __async(this,arguments,(function*(e,r={}){var t,a,n,s;const i=yield urlToFileName(e,""),o=yield getHFFileSHA256(e,null!=(t=r.headers)?t:{}),l=o?{sha256:o}:void 0,u=yield this.sb.getSize(i,l);if(-1!==u){const t=yield this.readMetadata(i);if((null==t?void 0:t.originalURL)===e&&t.originalSize===u)return;const s=yield fetch(e,__spreadValues({method:"HEAD"},r.headers?{headers:r.headers}:{})),l=parseInt(null!=(a=s.headers.get("content-length"))?a:"0",10),d=(s.headers.get("etag")||"").replace(/[^A-Za-z0-9]/g,"");if(l>0&&l===u)return void(yield this.writeMetadata(i,__spreadValues({originalURL:e,originalSize:l,etag:d,sha256:o},null!=(n=r.metadataAdditional)?n:{})));yield this.sb.delete(i),yield this.sb.delete(`${PREFIX_METADATA}${i}`)}const d=yield fetch(e,__spreadValues(__spreadValues({},r.headers?{headers:r.headers}:{}),r.signal?{signal:r.signal}:{}));if(!d.ok||!d.body)throw new Error(`Failed to fetch ${e}: HTTP ${d.status}`);const m=d.headers.get("content-length"),c=(d.headers.get("etag")||"").replace(/[^A-Za-z0-9]/g,""),p=parseInt(null!=m?m:"0",10),f=r.progressCallback;let g=0,h=0;const w=new TransformStream({transform(e,r){if(g+=e.byteLength,f){const e=Date.now();e-h>100&&(h=e,f({loaded:g,total:p}))}r.enqueue(e)},flush(){null==f||f({loaded:g,total:p||g})}}),b=__spreadValues({originalURL:e,originalSize:p,etag:c},null!=(s=r.metadataAdditional)?s:{});o&&(b.sha256=o),yield this.sb.write(i,d.body.pipeThrough(w),l),yield this.writeMetadata(i,b)}))}open(e){return __async(this,null,(function*(){const r=hintFromMetadata(yield this.getMetadata(e)),t=yield this.sb.read(e,r);if(t)return t;const a=yield urlToFileName(e,""),n=hintFromMetadata(yield this.getMetadata(a));return this.sb.read(a,n)}))}getSize(e){return __async(this,null,(function*(){const r=hintFromMetadata(yield this.getMetadata(e));return this.sb.getSize(e,r)}))}getMetadata(e){return __async(this,null,(function*(){const r=yield this.readMetadata(e);if(r)return r;const t=yield this.sb.getSize(e);return t>0?{etag:POLYFILL_ETAG,originalSize:t,originalURL:""}:null}))}readMetadata(e){return __async(this,null,(function*(){const r=yield this.sb.read(`${PREFIX_METADATA}${e}`);if(!r)return null;try{return yield new Response(r).json()}catch(e){return null}}))}list(){return __async(this,null,(function*(){const e=yield this.sb.list(),r={};for(const{key:t}of e)if(t.startsWith(PREFIX_METADATA)){const e=yield this.sb.read(t);if(e){const a=yield new Response(e).json().catch((()=>null));r[t.slice(PREFIX_METADATA.length)]=a}}const t=[];for(const{key:a,size:n}of e)a.startsWith(PREFIX_METADATA)||t.push({name:a,size:n,metadata:r[a]||{originalSize:n,originalURL:"",etag:""}});return t}))}clear(){return __async(this,null,(function*(){yield this.deleteMany((()=>!0))}))}delete(e){return __async(this,null,(function*(){const r=yield this.getNameFromURL(e);yield this.deleteMany((t=>t.name===e||t.name===r))}))}deleteMany(e){return __async(this,null,(function*(){const r=yield this.list();for(const t of r)e(t)&&(yield this.sb.delete(t.name),yield this.sb.delete(`${PREFIX_METADATA}${t.name}`))}))}writeMetadata(e,r){return __async(this,null,(function*(){const t=new Blob([JSON.stringify(r)],{type:"text/plain"});yield this.sb.write(`${PREFIX_METADATA}${e}`,t.stream())}))}},cache_manager_default=CacheManager;function urlToFileName(e,r){return __async(this,null,(function*(){const t=yield crypto.subtle.digest("SHA-1",(new TextEncoder).encode(e)),a=Array.from(new Uint8Array(t)).map((e=>e.toString(16).padStart(2,"0"))).join("");return`${r}${a}_${e.split("/").pop()}`}))}var DEFAULT_PARALLEL_DOWNLOADS=3,ModelValidationStatus=(e=>(e.VALID="valid",e.INVALID="invalid",e.DELETED="deleted",e))(ModelValidationStatus||{}),Model=class{constructor(e,r,t,a){__publicField(this,"modelManager"),__publicField(this,"url"),__publicField(this,"mmprojUrl"),__publicField(this,"size"),__publicField(this,"files"),this.modelManager=e,this.url=r,this.mmprojUrl=t,a?(this.files=this.getAllFiles(a),this.size=sumArr(this.files.map((e=>e.metadata.originalSize)))):(this.files=[],this.size=0)}open(){return __async(this,null,(function*(){if(-1===this.size)throw new WllamaError("Model is deleted from the cache; Call ModelManager.downloadModel to re-download the model","load_error");const e=[];for(const r of this.files){const t=yield this.modelManager.cacheManager.open(r.name);if(!t)throw new Error(`Failed to open file ${r.name}; Hint: the model may be invalid, please refresh it`);e.push(t)}return e}))}validate(){let e=ModelManager.parseModelUrl(this.url).length;if(this.mmprojUrl&&(e+=1),-1===this.size)return"deleted";if(this.size<16||this.files.length!==e)return"invalid";for(const e of this.files)if(!e.metadata||e.metadata.originalSize!==e.size)return"invalid";return"valid"}refresh(){return __async(this,arguments,(function*(e={}){var r;const t=ModelManager.parseModelUrl(this.url);this.mmprojUrl&&t.push(this.mmprojUrl);const a=t.map(((e,r)=>({url:e,index:r})));this.modelManager.logger.debug("Downloading model files:",t);const n=null!=(r=this.modelManager.params.parallelDownloads)?r:DEFAULT_PARALLEL_DOWNLOADS,s=yield this.getTotalDownloadSize(t),i=[],o=()=>__async(this,null,(function*(){for(;a.length>0;){const r=a.shift();if(!r)break;yield this.modelManager.cacheManager.download(r.url,__spreadProps(__spreadValues({},e),{metadataAdditional:{originalURL:r.url,mmprojURL:this.mmprojUrl},progressCallback:({loaded:t})=>{var a;i[r.index]=t,null==(a=e.progressCallback)||a.call(e,{loaded:sumArr(i),total:s})}}))}})),l=[];for(let e=0;e<n;e++)l.push(o()),i.push(0);yield Promise.all(l),this.files=this.getAllFiles(yield this.modelManager.cacheManager.list()),this.size=this.files.reduce(((e,r)=>e+r.metadata.originalSize),0)}))}remove(){return __async(this,null,(function*(){this.files=this.getAllFiles(yield this.modelManager.cacheManager.list()),yield this.modelManager.cacheManager.deleteMany((e=>!!this.files.find((r=>r.name===e.name)))),this.size=-1}))}getAllFiles(e){const r=new Set(ModelManager.parseModelUrl(this.url));this.mmprojUrl&&r.add(this.mmprojUrl);const t=[];for(const a of r){const r=e.find((e=>e.metadata.originalURL===a));if(!r)throw new Error(`Model file not found: ${a}`);t.push(r)}return t.sort(((e,r)=>e.metadata.originalURL.localeCompare(r.metadata.originalURL))),t}getTotalDownloadSize(e){return __async(this,null,(function*(){const r=(yield Promise.all(e.map((e=>fetch(e,{method:"HEAD"}))))).map((e=>Number(e.headers.get("content-length")||"0")));return sumArr(r)}))}},ModelManager=class e{constructor(e={}){__publicField(this,"cacheManager"),__publicField(this,"params"),__publicField(this,"logger"),this.cacheManager=e.cacheManager||new cache_manager_default,this.params=e,this.logger=e.logger||console}static parseModelUrl(e){var r;if(Array.isArray(e))return e;const t=/-(\d{5})-of-(\d{5})\.gguf(?:\?.*)?$/,a=e.match(/\.gguf(\?.*)?$/),n=null!=(r=null==a?void 0:a[1])?r:"",s=e.match(t);if(!s)return[e];const i=e.replace(t,""),o=s[2];return Array.from({length:Number(o)},((e,r)=>(r+1).toString().padStart(5,"0"))).map((e=>`${i}-${e}-of-${o}.gguf${n}`))}getModels(){return __async(this,arguments,(function*(r={}){const t=yield this.cacheManager.list();let a=[];for(const r of t){if(!r.metadata.originalURL)continue;const n=e.parseModelUrl(r.metadata.originalURL),s=r.metadata.mmprojURL;(1===n.length||n[0]===r.metadata.originalURL)&&a.push(new Model(this,r.metadata.originalURL,s,t))}return r.includeInvalid||(a=a.filter((e=>"valid"===e.validate()))),a}))}downloadModel(e){return __async(this,arguments,(function*(e,r={}){const t=isString(e)?{url:e}:e;if(!isValidGgufFile(t.url))throw new WllamaError(`Invalid model URL: ${t.url}; URL must ends with ".gguf"`,"download_error");const a=new Model(this,t.url,t.mmprojUrl);return"valid"!==a.validate()&&(yield a.refresh(r)),a}))}getModelOrDownload(e){return __async(this,arguments,(function*(e,r={}){var t;const a=(yield this.getModels()).find((r=>r.url===e.url));return a?(null==(t=r.progressCallback)||t.call(r,{loaded:a.size,total:a.size}),a):this.downloadModel(e,r)}))}clear(){return __async(this,null,(function*(){yield this.cacheManager.clear()}))}},LogLevel=(e=>(e[e.DEBUG=1]="DEBUG",e[e.INFO=2]="INFO",e[e.WARN=3]="WARN",e[e.ERROR=4]="ERROR",e))(LogLevel||{}),WasmCompatFromCDN={worker:"https://cdn.jsdelivr.net/npm/@wllama/wllama-compat@3.6.1/wasm/wllama.js",wasm:"https://cdn.jsdelivr.net/npm/@wllama/wllama-compat@3.6.1/wasm/wllama.wasm"},LoggerWithoutDebug=__spreadProps(__spreadValues({},console),{debug:()=>{}}),WllamaError=class extends Error{constructor(e,r="unknown_error"){super(e),__publicField(this,"type"),this.type=r}},WllamaAbortError=class extends Error{constructor(){super("Operation aborted"),__publicField(this,"name","AbortError")}},WllamaRuntimeError=class extends Error{constructor(e,r){super(e),__publicField(this,"name","RuntimeError"),__publicField(this,"stack"),this.stack=r}},Wllama=class{constructor(e,r={}){var t,a,n;if(__publicField(this,"cacheManager"),__publicField(this,"modelManager"),__publicField(this,"compat",null),__publicField(this,"proxy",null),__publicField(this,"config"),__publicField(this,"pathConfig"),__publicField(this,"useMultiThread",!1),__publicField(this,"nbThreads",1),__publicField(this,"useEmbeddings",!1),__publicField(this,"useRerank",!1),__publicField(this,"loadedContextInfo",null),__publicField(this,"seed"),__publicField(this,"bosToken",-1),__publicField(this,"eosToken",-1),__publicField(this,"eotToken",-1),__publicField(this,"eogTokens",new Set),__publicField(this,"addBosToken",!1),__publicField(this,"addEosToken",!1),__publicField(this,"mediaMarker"),__publicField(this,"chatTemplate"),__publicField(this,"metadata"),__publicField(this,"hasEncoder",!1),__publicField(this,"decoderStartToken",-1),__publicField(this,"chatTemplateKwargs",{}),checkEnvironmentCompatible(),!e)throw new WllamaError("AssetsPathConfig is required");this.pathConfig=e,this.config=r,this.cacheManager=null!=(t=r.cacheManager)?t:new cache_manager_default,this.modelManager=null!=(n=r.modelManager)?n:new ModelManager({cacheManager:this.cacheManager,logger:null!=(a=r.logger)?a:console,parallelDownloads:r.parallelDownloads,allowOffline:r.allowOffline}),this.setCompat("default")}logger(){var e;return null!=(e=this.config.logger)?e:console}checkModelLoaded(){if(!this.isModelLoaded())throw new WllamaError("loadModel() is not yet called","model_not_loaded")}static getLibllamaVersion(){return LIBLLAMA_VERSION}setCompat(e,r="safari"){"safari"===r&&isFirefox()?this.compat=null:this.compat="default"===e?WasmCompatFromCDN:e}isModelLoaded(){return!!this.proxy&&!!this.metadata}getBOS(){return this.bosToken}getEOS(){return this.eosToken}getEOT(){return this.eotToken}isTokenEOG(e){return e===this.eosToken||e===this.eotToken||this.eogTokens.has(e)}getDecoderStartToken(){return this.decoderStartToken}getModelMetadata(){return this.checkModelLoaded(),this.metadata}isMultithread(){return this.checkModelLoaded(),this.useMultiThread}getNumThreads(){return this.checkModelLoaded(),this.useMultiThread?this.nbThreads:1}isEncoderDecoderArchitecture(){return this.checkModelLoaded(),this.hasEncoder}mustAddBosToken(){return this.checkModelLoaded(),this.addBosToken}mustAddEosToken(){return this.checkModelLoaded(),this.addEosToken}getChatTemplate(){var e;return this.checkModelLoaded(),null!=(e=this.chatTemplate)?e:null}isSupportWebGPU(){return isSupportWebGPU()}loadModelFromUrl(e){return __async(this,arguments,(function*(e,r={}){var t;const a=isString(e)?{url:e}:e,n=null==(t=r.useCache)||t?yield this.modelManager.getModelOrDownload(a,r):yield this.modelManager.downloadModel(a,r),s=yield n.open();return yield this.loadModel(s,r)}))}loadModelFromHF(e){return __async(this,arguments,(function*(e,r={}){const t=yield getHFModelSource(e);return yield this.loadModelFromUrl(t,r)}))}loadModel(e){return __async(this,arguments,(function*(e,r={}){var t,a,n,s,i,o,l,u,d,m;const c=e instanceof Model?yield e.open():[...e];if(c.some((e=>0===e.size)))throw new WllamaError("Input model (or splits) must be non-empty Blob or File","load_error");if(!this.pathConfig.default)throw new WllamaError('"default" is missing from pathConfig',"load_error");if(this.proxy)throw new WllamaError("Module is already initialized","load_error");const p=yield isSupportMultiThread(),f=Math.floor((navigator.hardwareConcurrency||1)/2),g=null!=(t=r.n_threads)?t:f;this.nbThreads=g,this.useMultiThread=p&&g>1;const h=this.getWorkerResources();0===r.n_gpu_layers&&(h.noWebGPU=!0),this.proxy=new ProxyToWorker(h,this.useMultiThread?g:0,null!=(a=this.config.suppressNativeLog)&&a,this.logger());let w=null!=(n=r.log_level)?n:2;this.config.suppressNativeLog&&(w=9999);const b=yield prepareBlobs(c);yield this.proxy.moduleInit(b.all),this.logger().debug("Calling wllamaStart...");const v=yield this.proxy.wllamaStart();if(!v.success)throw new WllamaError(`Error while calling start function, result = ${v}`);this.logger().debug("Loading model...");const y=yield this.proxy.wllamaAction("load",{_name:"load_req",log_level:w,use_mmap:!canUseAsyncFileRead(h.compat),use_mlock:!1,n_gpu_layers:null!=(s=r.n_gpu_layers)?s:99999,n_ctx:null!=(i=r.n_ctx)?i:1024,n_threads:this.useMultiThread?g:1,n_ctx_auto:!1,mmproj_path:b.mmproj?`/models/${MMPROJ_FILE_NAME}`:void 0,model_paths:b.llm.map((e=>`models/${e.name}`)),embeddings:r.embeddings,offload_kqv:r.offload_kqv,n_batch:r.n_batch,n_ubatch:r.n_ubatch,pooling_type:r.pooling_type,rope_scaling_type:r.rope_scaling_type,rope_freq_base:r.rope_freq_base,rope_freq_scale:r.rope_freq_scale,yarn_ext_factor:r.yarn_ext_factor,yarn_attn_factor:r.yarn_attn_factor,yarn_beta_fast:r.yarn_beta_fast,yarn_beta_slow:r.yarn_beta_slow,yarn_orig_ctx:r.yarn_orig_ctx,cache_type_k:r.cache_type_k,cache_type_v:r.cache_type_v,n_parallel:null!=(o=r.n_parallel)?o:4,kv_unified:null==(l=r.kv_unified)||l,flash_attn:r.flash_attn,swa_full:r.swa_full,chat_template:r.chat_template,jinja:r.jinja,reasoning:r.reasoning,image_min_tokens:r.image_min_tokens,image_max_tokens:r.image_max_tokens,warmup:r.warmup,no_kv_offload:r.no_kv_offload,mmproj_offload:r.mmproj_offload,cont_batching:r.cont_batching,n_keep:r.n_keep,ctx_shift:r.ctx_shift,cache_idle_slots:r.cache_idle_slots,n_cache_reuse:r.n_cache_reuse,lora_paths:null==(u=r.lora_adapters)?void 0:u.map((e=>e.path)),lora_scales:null==(d=r.lora_adapters)?void 0:d.map((e=>{var r;return null!=(r=e.scale)?r:1})),lora_init_without_apply:r.lora_init_without_apply,spec_draft_model:r.spec_draft_model,spec_draft_ngl:r.spec_draft_ngl,spec_draft_n_max:r.spec_draft_n_max,spec_draft_n_min:r.spec_draft_n_min,spec_draft_p_min:r.spec_draft_p_min,spec_draft_threads:r.spec_draft_threads,spec_draft_threads_batch:r.spec_draft_threads_batch,kv_overrides_keys:r.kv_overrides?Object.keys(r.kv_overrides):void 0,kv_overrides_vals:r.kv_overrides?Object.values(r.kv_overrides):void 0,reasoning_budget_tokens:r.reasoning_budget_tokens,reasoning_budget_message:r.reasoning_budget_message,reasoning_format:r.reasoning_format,skip_chat_parsing:r.skip_chat_parsing,prefill_assistant:r.prefill_assistant}),P=__spreadProps(__spreadValues({},y),{metadata:{}});for(let e=0;e<y.metadata_key.length;e++)P.metadata[y.metadata_key[e]]=y.metadata_val[e];this.seed=r.seed,this.bosToken=P.token_bos,this.eosToken=P.token_eos,this.eotToken=P.token_eot,this.useEmbeddings=!!r.embeddings,this.useRerank="rank"==r.pooling_type,this.metadata={hparams:{nVocab:P.n_vocab,nCtxTrain:P.n_ctx_train,nEmbd:P.n_embd,nLayer:P.n_layer},meta:P.metadata},this.hasEncoder=!!P.has_encoder,this.decoderStartToken=P.token_decoder_start,this.addBosToken=P.add_bos_token,this.addEosToken=P.add_eos_token,this.chatTemplate=P.metadata["tokenizer.chat_template"],this.loadedContextInfo=P,this.eogTokens=new Set(P.list_tokens_eog),this.mediaMarker=P.media_marker,this.chatTemplateKwargs=null!=(m=r.default_template_kwargs)?m:{},this.logger().debug({loadedCtxInfo:P})}))}getLoadedContextInfo(){if(this.checkModelLoaded(),!this.loadedContextInfo)throw new WllamaError("Loaded context info is not available");return __spreadValues({},this.loadedContextInfo)}createEmbedding(e){return __async(this,null,(function*(){if(this.checkModelLoaded(),!this.useEmbeddings)throw new WllamaError("Embeddings is not enabled. Please set it via LoadModelParams.embeddings");const r=yield this.proxy.wllamaAction("embedding",{_name:"embd_req",data_json:JSON.stringify(e),files:[]});if(!r.success)throw new WllamaError("Model failed to start inference","inference_error");return yield this.getResponse(e,!1,r.req_id)}))}createRerank(e){return __async(this,null,(function*(){var r,t;if(this.checkModelLoaded(),!this.useEmbeddings||!this.useRerank)throw new WllamaError("Rerank is not enabled. Please set it via LoadModelParams: embeddings = true and pooling_type = rank");const a=null!=(r=e.top_n)?r:e.documents.length;let n=0;const s=[];for(let r=0;r<e.documents.length;r++){const t=yield this.proxy.wllamaAction("rerank",{_name:"rrnk_req",data_json:JSON.stringify({query:e.query,document:e.documents[r]})});if(!t.success)throw new WllamaError("Model failed to start reranking","inference_error");const{score:a,tokens_evaluated:i}=yield this.getRerankResult(t.req_id);n+=i,s.push({index:r,score:a})}return s.sort(((e,r)=>r.score-e.score)),{model:null!=(t=this.getModelMetadata().meta["general.name"])?t:"",object:"list",usage:{prompt_tokens:n,total_tokens:n},results:s.slice(0,a).map((({index:e,score:r})=>({index:e,relevance_score:r})))}}))}createChatCompletion(e){return __async(this,null,(function*(){var r;if(Object.keys(this.chatTemplateKwargs).length>0&&(e=__spreadProps(__spreadValues({},e),{chat_template_kwargs:__spreadValues(__spreadValues({},this.chatTemplateKwargs),null!=(r=e.chat_template_kwargs)?r:{})})),!e.stream||!e.onData)return e.stream?yield this.createCompletionGenerator(e):yield this.createCompletionImpl(__spreadProps(__spreadValues({},e),{stream:!1}));yield this.createCompletionImpl(e)}))}createCompletion(e){return __async(this,null,(function*(){if(!e.stream||!e.onData)return e.stream?yield this.createCompletionGenerator(e):yield this.createCompletionImpl(__spreadProps(__spreadValues({},e),{stream:!1}));yield this.createCompletionImpl(e)}))}createCompletionImpl(e){return __async(this,null,(function*(){this.checkModelLoaded();const r=!!e.stream,t=!!e.messages,a={};void 0!==this.seed&&(a.seed=this.seed);let n=[];if(t){const r=this.prepareMultimodalInput(e);e=r.params,n=r.files}const s=yield this.proxy.wllamaAction("completion",{_name:"cmpl_req",is_chat:t,data_json:JSON.stringify(__spreadValues(__spreadValues({},e),a)),files:n.map((e=>new Uint8Array(e)))});if(!s.success)throw new WllamaError("Model failed to start inference","inference_error");return yield this.getResponse(e,r,s.req_id)}))}createCompletionGenerator(e){return new Promise((r=>{r(cbToAsyncIter((r=>{this.createCompletionImpl(__spreadProps(__spreadValues({},e),{onData:e=>r(e)})).then((()=>r(void 0,!0))).catch((e=>r(void 0,!1,e)))}))())}))}supportInputModality(e){if(this.checkModelLoaded(),"image"===e)return!!this.loadedContextInfo.has_image_input;if("audio"===e)return!!this.loadedContextInfo.has_audio_input;throw new WllamaError("Unsupported modality: "+e,"unknown_error")}exit(){return __async(this,null,(function*(){var e;yield null==(e=this.proxy)?void 0:e.wllamaExit(),this.proxy=null}))}testBackendOps(){return __async(this,arguments,(function*(e=[]){var r;if(!this.pathConfig.default)throw new WllamaError('"default" is missing from pathConfig',"load_error");if(!(yield isSupportMultiThread()))throw new WllamaError("Multi-threading is required to run backend ops tests, but it is not supported in the current environment.");const t=new ProxyToWorker(this.getWorkerResources(),0,null!=(r=this.config.suppressNativeLog)&&r,this.logger());try{yield t.moduleInit([]);const r=yield t.wllamaStart();if(!r.success)throw new WllamaError(`Error while calling start function, result = ${r}`);const a=yield t.wllamaAction("test_backend_ops",{_name:"tbop_req",args:["test-backend-ops",...e]});return{retcode:a.retcode,success:a.success}}finally{yield t.wllamaExit()}}))}_getDebugInfo(){return __async(this,null,(function*(){return this.checkModelLoaded(),yield this.proxy.wllamaDebug()}))}jsonDecode(e){try{return JSON.parse(e)}catch(r){throw this.logger().error("Failed to parse JSON:",e),new WllamaError("Failed to parse model output","inference_error")}}prepareMultimodalInput(e){const r=e.messages,t=[],a=[];for(const e of r)if(Array.isArray(e.content)){const r=[];for(const t of e.content)if("text"===t.type)r.push(t);else{if(!this.mediaMarker)throw new WllamaError("Media marker is undefined","inference_error");a.push(t.data),r.push({type:"text",text:this.mediaMarker})}t.push(__spreadProps(__spreadValues({},e),{content:r}))}else t.push(e);return{params:__spreadProps(__spreadValues({},e),{messages:t}),files:a}}cancelRequest(e){return __async(this,null,(function*(){try{yield this.proxy.wllamaAction("cancel",{_name:"cncl_req",req_id:e})}catch(r){this.logger().warn("Failed to cancel request",e,r)}}))}getRerankResult(e){return __async(this,null,(function*(){let r=!1;try{for(;;){const t=yield this.proxy.wllamaAction("get_result",{_name:"gres_req",req_id:e}),a=t.data_json;if(a&&a.length>0){if(t.is_error){const e=this.jsonDecode(a);throw new WllamaError(e.message||"Unknown reranking error","inference_error")}return r=!0,this.jsonDecode(a)}if(!t.has_more){r=!0;break}}throw new WllamaError("No reranking result received","inference_error")}finally{r||(yield this.cancelRequest(e))}}))}getResponse(e,r,t){return __async(this,null,(function*(){var a,n;let s=null,i=!1;try{for(;;){if(null==(a=e.abortSignal)?void 0:a.aborted)throw new WllamaAbortError;const o=yield this.proxy.wllamaAction("get_result",{_name:"gres_req",req_id:t}),l=o.data_json;if(!l||0===l.length){if(o.has_more)continue;i=!0;break}if("null"==l)continue;let u=this.jsonDecode(l);if(s=u,o.is_error)throw this.logger().error("Model returned an error:",u),new WllamaError(u.message||"Unknown inference error","inference_error");if(r){Array.isArray(u)||(u=[u]);for(const r of u)null==(n=e.onData)||n.call(e,r),s=r}if(!o.has_more){i=!0;break}}}finally{i||(yield this.cancelRequest(t))}return s}))}getWorkerResources(){const e={wasmPath:absoluteUrl(this.pathConfig.default),compat:!1};if(needCompat())if(this.compat){this.compat.worker===WasmCompatFromCDN.worker&&this.compat.wasm===WasmCompatFromCDN.wasm&&(this.logger().warn("Compatibility mode is activated, using resources from CDN. To use local resources, please refer to @wllama/wllama-compat package."),this.logger().warn("IMPORTANT: Performance will be significantly degraded in compatibility mode.")),e.wasmPath=absoluteUrl(this.compat.wasm),e.jsPath=this.compat.worker,e.compat=!0}else this.logger().warn("Not using compat mode"+(isFirefox()?" (expected on Firefox - WebGPU will be disabled)":""));return isFirefox()&&(e.compat?this.logger().warn('Using compat mode on Firefox, performance will be significantly degraded; Consider enabling "javascript.options.wasm_js_promise_integration" in "about:config".'):isSupportJSPI()||this.logger().warn('WebGPU is disabled on Firefox due to missing JSPI support. Please consider enabling compat mode, or enabling "javascript.options.wasm_js_promise_integration" in "about:config".')),e}};export{CacheManager,LogLevel,LoggerWithoutDebug,Model,ModelManager,ModelValidationStatus,POLYFILL_ETAG,Wllama,WllamaAbortError,WllamaError,WllamaRuntimeError,getHFFileSHA256,getHFModelSource,isValidGgufFile};