@volter/browser-substrate 0.1.101 → 0.1.103
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/program-images.js +2 -2
- package/dist/program-images.js.map +1 -1
- package/dist/shell/assets/browser-sandbox-bridge-BJbQoc4f.js +237 -0
- package/dist/shell/assets/{filesystem-host-BT4CmP6I.js → filesystem-host-DJbFuokb.js} +1 -1
- package/dist/shell/assets/{filesystem-host-BBYqSE7n.js → filesystem-host-yMcJuvmT.js} +2 -2
- package/dist/shell/assets/{filesystem-worker-D88RPdU7.js → filesystem-worker-BbsBhZ9p.js} +3 -3
- package/dist/shell/assets/{fork-worker-CEQ37gcQ.js → fork-worker-BXY2kfdX.js} +1 -1
- package/dist/shell/assets/{node-execution-worker-7a2fc3cf9f082cbe.js → node-execution-worker-7e8e0c5321ca0d10.js} +1 -1
- package/dist/shell/assets/{sandbox-CLAYkibu.js → sandbox-bMeKqKBn.js} +1 -1
- package/dist/shell/assets/{shell-CzbWwVZ3.js → shell-DLIQ6jHu.js} +5 -5
- package/dist/shell/assets/{worker-CQmX_ncR.js → worker-Ce8bBwSJ.js} +16 -16
- package/dist/shell/assets/{worker-program-worker-CLXTQPjT.js → worker-program-worker-B4OcKVtV.js} +2 -2
- package/dist/shell/bundler-worker.js +1 -1
- package/dist/shell/index.html +2 -2
- package/dist/shell/node-execution-worker.js +1 -1
- package/dist/shell/python-execution-worker.js +4 -4
- package/dist/shell/python-runtime-snapshot.bin +0 -0
- package/dist/shell/python-runtime-snapshot.json +1 -1
- package/dist/shell/sandbox.html +2 -2
- package/package.json +1 -1
- package/dist/shell/assets/browser-sandbox-bridge-BRDWHeqY.js +0 -237
package/dist/shell/assets/{worker-program-worker-CLXTQPjT.js → worker-program-worker-B4OcKVtV.js}
RENAMED
|
@@ -8,14 +8,14 @@ const Gs=["file","directory","symlink"],cc=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(
|
|
|
8
8
|
WALI pthread ${e.tid??"unknown"} error summary:
|
|
9
9
|
${t}
|
|
10
10
|
`))}}spawn(e,t,r=0n){const n=this.slots.find(a=>Atomics.compareExchange(this.slotStates,a.index,0,1)===0);if(!n)return-11;const i=Atomics.add(this.nextTid,0,1),o={kind:"start",functionPointer:e,argumentPointer:t,tid:i,signalMask:r};return n.worker?n.worker.postMessage(o):this.coordinator.postMessage({...o,slotIndex:n.index}),i}diagnostics(e){const t=new TextDecoder,r=32,n=480;return this.slots.filter(i=>e===void 0||i.index===e).flatMap(i=>{const o=Atomics.load(new Int32Array(i.diagnostic,0,1),0);if(o<=0)return[];const a=new Uint8Array(i.diagnostic,Int32Array.BYTES_PER_ELEMENT),c=[];for(let f=Math.max(0,o-r);f<o;f+=1){const d=f%r*n,y=Math.min(a[d]|a[d+1]<<8,n-2);c.push(t.decode(Uint8Array.from(a.subarray(d+2,d+2+y))))}return[`slot ${i.index+1}: ${c.join(`
|
|
11
|
-
`)}`]})}terminate(){this.coordinator?.terminate(),this.coordinator=void 0;for(const e of this.slots)e.worker?.terminate();this.slots.length=0}}function pf(s){if(!Number.isSafeInteger(s)||s<1||s>64)throw new Error("WALI threadPoolSize must be an integer between 1 and 64.");return s}function ft(s){const e=s.toBase64;if(typeof e=="function")return e.call(s);let t="";for(let r=0;r<s.byteLength;r+=32768)t+=String.fromCharCode(...s.subarray(r,r+32768));return btoa(t)}function tr(s){const e=Uint8Array.fromBase64;if(typeof e=="function")return e(s);const t=atob(s),r=new Uint8Array(t.length);for(let n=0;n<t.length;n+=1)r[n]=t.charCodeAt(n);return r}function gf(s,e,t){const{appended:r,superseded:n}=t?Sf(s,e,t):{appended:new Map,superseded:new Set},i=[...e.removed].sort((a,c)=>Pn(c)-Pn(a));for(const a of i)s.existsSync(a)&&(s.statSync(a).isDirectory()?s.rmdirSync(a):s.unlinkSync(a));const o=[...e.files].filter(a=>!n.has(a.path)).sort((a,c)=>Pn(a.path)-Pn(c.path));for(const a of o){if(a.type==="directory")s.existsSync(a.path)&&!s.statSync(a.path).isDirectory()&&s.unlinkSync(a.path),s.mkdirSync(a.path,{recursive:!0});else if(rr(a)){s.existsSync(a.path)&&s.statSync(a.path).isDirectory()&&s.rmdirSync(a.path);const c=a.path.slice(0,a.path.lastIndexOf("/"))||"/";c!=="/"&&!s.existsSync(c)&&s.mkdirSync(c,{recursive:!0});const f=s.existsSync(a.path)?s.statSync(a.path).mode:void 0,d=f!==void 0&&(f&128)===0;d&&s.chmodSync?.(a.path,f&4095|128),s.writeFileSync(a.path,r.get(a.path)??en(a)),d&&a.mode===void 0&&s.chmodSync?.(a.path,f&4095)}else if(!s.existsSync(a.path)||s.statSync(a.path).isDirectory())continue;a.mode!==void 0&&s.chmodSync?.(a.path,a.mode),a.mtimeMs!==void 0&&s.utimesSync?.(a.path,new Date(a.mtimeMs),new Date(a.mtimeMs))}}function Sf(s,e,t){const r=new Map,n=new Set,i=t.byPath,o=i instanceof Map?i:new Map(t.files.map(f=>[f.path,f])),a=new Map(e.files.map(f=>[f.path,f])),c=new Set([...e.files.map(f=>f.path),...e.removed]);for(const f of c){const d=o.get(f),y=Af(s,f);if(d!==void 0&&Fs(d,a.get(f))||y===void 0&&a.get(f)!==void 0)continue;const p=a.get(f);if(!(y!==void 0&&p!==void 0&&p.type===y.type&&(J(p).mtimeMs??0)>(J(y).mtimeMs??0))&&!(d!==void 0&&y!==void 0&&d.type===y.type&&(J(y).mtimeMs??0)<(J(d).mtimeMs??0))&&!Fs(d,y)&&!Fs(a.get(f),y)){if(Ef(d,y,a.get(f)))continue;const b=bf(s,f,d,y,a.get(f),t.bytesOf?.bind(t));if(b){r.set(f,b);continue}const S=a.get(f);if(d!==void 0&&y!==void 0&&S!==void 0&&S.type===y.type&&(J(S).mtimeMs??0)>=(J(d).mtimeMs??0)&&(J(y).mtimeMs??0)>(J(S).mtimeMs??0)&&(J(y).mtimeMs??0)>(J(d).mtimeMs??0)){n.add(f);continue}throw new Error(`Browser filesystem write conflict at ${f}. ${JSON.stringify({base:Ts(d),current:Ts(y),proposed:Ts(a.get(f))})}`)}}return{appended:r,superseded:n}}function bf(s,e,t,r,n,i){if(t?.type!=="file"||r?.type!=="file"||n?.type!=="file"||!rr(n)||!s.readFileSync||J(r).mode!==J(n).mode)return;const o=rr(t)?en(t):i?.(e);if(!o||o.length===0)return;const a=en(n),c=s.readFileSync(e),f=typeof c=="string"?new TextEncoder().encode(c):c,d=p=>p.length>=o.length&&Ia(p.subarray(0,o.length),o);if(a.length<=o.length||!d(a)||!d(f))return;const y=new Uint8Array(f.length+a.length-o.length);return y.set(f,0),y.set(a.subarray(o.length),f.length),y}function Ts(s){return s?{type:s.type,...J(s)}:null}function Ef(s,e,t){return e?.type!=="directory"||t?.type!=="directory"?!1:s===void 0?J(e).mode===J(t).mode:J(e).mode===J(t).mode&&s.type==="directory"&&J(s).mode===J(e).mode}function ko(s,e,t={}){const r=new Map(s.files.map(i=>[i.path,i])),n=new Map(e.files.map(i=>[i.path,i]));return{files:e.files.filter(i=>{const o=r.get(i.path);return i.path==="/"&&!o?!1:!o||o.type!==i.type||!Na(o,i)||t.written===!0&&i.type==="file"&&!rr(o)&&rr(i)||J(o).mode!==J(i).mode||J(o).mtimeMs!==J(i).mtimeMs}),removed:s.files.flatMap(i=>n.has(i.path)?[]:[i.path])}}function Pn(s){let e=1;for(let t=0;t<s.length;t+=1)s.charCodeAt(t)===47&&(e+=1);return e}function Af(s,e){if(!s.existsSync(e))return;const t=s.statSync(e),r={...t.mode!==void 0?{mode:t.mode}:{},...t.mtimeMs!==void 0?{mtimeMs:t.mtimeMs}:{}};return t.isDirectory()?{path:e,type:"directory",...r}:{path:e,type:"file",...t.size!==void 0?{size:t.size}:{},...r}}function Fs(s,e){return s===void 0?e===void 0:e!==void 0&&s.type===e.type&&Na(s,e)&&J(s).mode===J(e).mode&&J(s).mtimeMs===J(e).mtimeMs}function J(s){const e=s;return{...e.mode===void 0?{}:{mode:e.mode&4095},...e.mtimeMs===void 0?{}:{mtimeMs:e.mtimeMs}}}function Na(s,e){return s.type!=="file"||e.type!=="file"?!0:s.content!==void 0&&e.content!==void 0?s.content===e.content:rr(s)&&rr(e)?Ia(en(s),en(e)):xo(s)===xo(e)}function xo(s){if(s.size!==void 0)return s.size;if(s.bytes!==void 0)return s.bytes.byteLength;if(s.content===void 0)return;const e=s.content.endsWith("==")?2:s.content.endsWith("=")?1:0;return Math.floor(s.content.length*3/4)-e}function rr(s){return s!==void 0&&(s.bytes!==void 0||s.content!==void 0)}function en(s){return s.bytes??(s.content===void 0?void 0:tr(s.content))}function Ia(s,e){if(s===e)return!0;if(s.byteLength!==e.byteLength)return!1;let t=0;if(s.byteOffset%4===0&&e.byteOffset%4===0){const r=s.byteLength>>>2,n=new Uint32Array(s.buffer,s.byteOffset,r),i=new Uint32Array(e.buffer,e.byteOffset,r);for(let o=0;o<r;o+=1)if(n[o]!==i[o])return!1;t=r<<2}for(;t<s.byteLength;t+=1)if(s[t]!==e[t])return!1;return!0}const Mo=0,Lo=1,ht=2,Ir=3,kr=4,ka=5,xa=6,Zs=16*1024*1024,_f=1024*1024;function Nf(){const s=new SharedArrayBuffer(8*Int32Array.BYTES_PER_ELEMENT),e=new SharedArrayBuffer(_f),t=new Int32Array(s);return Atomics.store(t,Ir,1),Atomics.store(t,kr,1),{reader:{control:s,payload:e,role:"reader"},writer:{control:s,payload:e,role:"writer"}}}function Ma(s){const e=xr(s);return Atomics.add(e,s.role==="reader"?Ir:kr,1),s}function Zr(s){const e=xr(s),t=s.role==="reader"?Ir:kr;Atomics.sub(e,t,1)<=1&&Atomics.store(e,t,0),Atomics.add(e,s.role==="reader"?xa:ka,1),Atomics.notify(e,ht)}function La(s,e){const t=xr(s),r=Atomics.load(t,ht);let n=0;return s.role==="reader"?(e&1&&(r>0||Atomics.load(t,kr)===0)&&(n|=1),Atomics.load(t,kr)===0&&(n|=16)):(e&4&&Atomics.load(t,Ir)>0&&r<kf(s)&&(n|=4),Atomics.load(t,Ir)===0&&(n|=16)),n}function oi(s,e){if(s.role!=="reader")return-9n;if(e===0)return new Uint8Array;const t=xr(s),r=Ra(s),n=Atomics.load(t,ht);if(n===0)return Atomics.load(t,kr)===0?new Uint8Array:-11n;const i=Math.min(Math.max(0,e),n),o=Atomics.load(t,Mo),a=Math.min(i,r.byteLength-o),c=new Uint8Array(i);return c.set(r.subarray(o,o+a)),a<i&&c.set(r.subarray(0,i-a),a),Atomics.store(t,Mo,(o+i)%r.byteLength),Atomics.sub(t,ht,i),i>0&&Atomics.add(t,xa,1),Atomics.notify(t,ht),c}function If(s,e){const t=xr(s);for(;;){const r=oi(s,e);if(r!==-11n)return r;Nr(t,ht,0,50)}}function Pa(s,e){if(s.role!=="writer")return-9n;const t=xr(s),r=Ra(s);let n=0;for(;n<e.byteLength;){if(Atomics.load(t,Ir)===0)return n>0?BigInt(n):-32n;const i=Atomics.load(t,ht),o=r.byteLength-i;if(o===0){Nr(t,ht,i,50);continue}const a=Atomics.load(t,Lo),c=Math.min(e.byteLength-n,o,r.byteLength-a);r.set(e.subarray(n,n+c),a),Atomics.store(t,Lo,(a+c)%r.byteLength),Atomics.add(t,ht,c),Atomics.add(t,ka,1),Atomics.notify(t,ht),n+=c}return BigInt(n)}const Po=new WeakMap;function xr(s){const e=s.controlOffset??0;let t=Po.get(s.control);t||(t=new Map,Po.set(s.control,t));let r=t.get(e);return r||(r=new Int32Array(s.control,e,8),t.set(e,r)),r}function kf(s){return s.payloadLength??s.payload.byteLength-(s.payloadOffset??0)}function Ra(s){const e=s.payloadOffset??0,t=s.payloadLength??s.payload.byteLength-e;return new Uint8Array(s.payload,e,t)}function xf(s){const e=Atomics.load(new Int32Array(s.control),2);if(e<=0||e>s.response.byteLength)return;const t=Uint8Array.from(new Uint8Array(s.response,0,e));return JSON.parse(new TextDecoder().decode(t))}const Mf=1,Lf=15,Pf=1,Rf=97n,vf=93n,Tf=11n,Ff=32n,Ro=1,vo=4,Bf=16;class Of{memory;descriptors;constructor(e,t){this.memory=e,this.descriptors=t}imports(){return{SYS_socketpair:(e,t,r,n)=>this.socketpair(Number(e),Number(t),Number(r),Number(n)),SYS_pipe:e=>this.pipe(Number(e),0),SYS_pipe2:(e,t)=>this.pipe(Number(e),Number(t))}}pipe(e,t){if((t&-526337)!==0)return-22n;if(!Number.isSafeInteger(e)||e<0||e+8>this.memory().buffer.byteLength)return-14n;const r=Nf(),n=this.descriptors.allocateSpecial(this.pipeEndpoint(r.reader)),i=this.descriptors.allocateSpecial(this.pipeEndpoint(r.writer)),o=new DataView(this.memory().buffer);return o.setInt32(e,n,!0),o.setInt32(e+4,i,!0),0n}pipeEndpoint(e){return{browserProcessPipe:e,read:t=>oi(e,t),write:t=>Pa(e,t),poll:t=>La(e,t),fcntl:t=>t===3?0x800n:[1,2,4].includes(t)?0n:-22n,duplicate:t=>(Ma(e),BigInt(this.descriptors.allocateSpecial(this.pipeEndpoint(e),t))),close:()=>Zr(e)}}socketpair(e,t,r,n){if(e!==Mf)return-Rf;if((t&Lf)!==Pf||r!==0)return-vf;if(!Number.isSafeInteger(n)||n<0||n+8>this.memory().buffer.byteLength)return-14n;const i={chunks:[],byteLength:0,closed:!1,peerClosed:!1,references:1},o={chunks:[],byteLength:0,closed:!1,peerClosed:!1,references:1};i.peer=o,o.peer=i;const a=this.descriptors.allocateSpecial(this.endpoint(i)),c=this.descriptors.allocateSpecial(this.endpoint(o)),f=new DataView(this.memory().buffer);return f.setInt32(n,a,!0),f.setInt32(n+4,c,!0),0n}endpoint(e){return{read:t=>Yf(e,t),write:t=>Df(e,t),poll:t=>Cf(e,t),fcntl:t=>t===3?0x802n:[1,2,4].includes(t)?0n:-22n,duplicate:t=>{const r=this.descriptors.allocateSpecial(this.endpoint(e),t);return e.references+=1,BigInt(r)},close:()=>{e.references-=1,!(e.references>0||e.closed)&&(e.closed=!0,e.peer&&(e.peer.peerClosed=!0))}}}}function Yf(s,e){if(s.closed)return-9n;if(e<0)return-22n;if(s.byteLength===0)return s.peerClosed?new Uint8Array:-Tf;const t=new Uint8Array(Math.min(e,s.byteLength));let r=0;for(;r<t.byteLength;){const n=s.chunks[0],i=Math.min(n.byteLength,t.byteLength-r);t.set(n.subarray(0,i),r),r+=i,s.byteLength-=i,i===n.byteLength?s.chunks.shift():s.chunks[0]=n.subarray(i)}return t}function Df(s,e){if(s.closed)return-9n;const t=s.peer;if(!t||t.closed)return-Ff;const r=e.slice();return t.chunks.push(r),t.byteLength+=r.byteLength,BigInt(r.byteLength)}function Cf(s,e){let t=s.peerClosed?Bf:0;return e&Ro&&(s.byteLength>0||s.peerClosed)&&(t|=Ro),e&vo&&!s.peerClosed&&(t|=vo),t}const Uf=2e4,va=256*1024;var H;(function(s){s[s.Socket=1]="Socket",s[s.Connect=2]="Connect",s[s.Send=3]="Send",s[s.Receive=4]="Receive",s[s.Close=5]="Close",s[s.Fcntl=6]="Fcntl",s[s.Poll=7]="Poll",s[s.Shutdown=8]="Shutdown",s[s.Duplicate=9]="Duplicate",s[s.SocketName=10]="SocketName",s[s.EpollControl=11]="EpollControl",s[s.EpollWait=12]="EpollWait",s[s.EpollCreate=13]="EpollCreate",s[s.EventFd=14]="EventFd",s[s.SocketPair=15]="SocketPair",s[s.TimerFdCreate=16]="TimerFdCreate",s[s.TimerFdSetTime=17]="TimerFdSetTime",s[s.Bind=18]="Bind",s[s.Listen=19]="Listen",s[s.Accept=20]="Accept",s[s.ChildRegister=21]="ChildRegister",s[s.ChildForget=22]="ChildForget",s[s.ChildWait=23]="ChildWait",s[s.ChildExists=24]="ChildExists",s[s.PidFdOpen=25]="PidFdOpen",s[s.PollMany=26]="PollMany"})(H||(H={}));const Bs=new Map;function Ta(s,e){const t=Bs.get(s);Bs.delete(s);const r=t??e();return Bs.set(s,e()),r}const Tt=9n,we=22n,To=16,Et=38n;class ai{worker;constructor(e){this.worker=e}static async create(e,t,r,n,i){if(typeof Worker>"u"||typeof SharedArrayBuffer>"u")throw new Error("WALI networking requires Web Workers and SharedArrayBuffer.");const o=[...new Set(e?.allowedHosts.map(f=>f.toLowerCase())??[])];if(e&&(!e.loopbackPort&&o.length===0||o.some(f=>!/^[a-z0-9.-]+$/u.test(f))))throw new Error("WALI networking requires a loopback attachment or at least one valid hostname.");if(e&&(!Number.isSafeInteger(e.maxConnections)||e.maxConnections<1||e.maxConnections>1024||!Number.isSafeInteger(e.maxBytes)||e.maxBytes<1024||e.maxBytes>1024*1024*1024))throw new Error("WALI networking requires bounded connection and byte quotas.");const a=Ta("network",()=>qr(new Worker(new URL("/assets/network-worker-DuuxEt8T.js",import.meta.url),{type:"module",name:"wali-network"}))),c=new ai(a);return await new Promise((f,d)=>{const y=p=>{p.data.kind==="ready"&&(a.removeEventListener("message",y),f()),p.data.kind==="error"&&(a.removeEventListener("message",y),d(new Error(p.data.message)))};a.addEventListener("message",y),a.addEventListener("error",p=>d(p.error??new Error(p.message)),{once:!0}),a.postMessage({kind:"initialize",allowedHosts:o,relayUrl:e?.relayUrl??"/api/wali/tcp",maxConnections:e?.maxConnections??0,maxBytes:e?.maxBytes??0,...t?{sharedPipes:t}:{},...r?{stdin:r}:{},...n?{stdioAliasRegistry:n}:{},...i?{signals:i}:{},...e?.loopbackPort?{loopbackPort:e.loopbackPort}:{}},e?.loopbackPort?[e.loopbackPort]:[])}).catch(f=>{throw a.terminate(),f}),c}createChannel(){const e=new MessageChannel,t={port:e.port1,control:new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT*16),payload:new SharedArrayBuffer(va)};return this.worker.postMessage({kind:"attach",port:e.port2,control:t.control,payload:t.payload},[e.port2]),t.port.start(),t}terminate(){this.worker.terminate()}}class Wf{channel;control;payload;nextRequestId=1;constructor(e){this.channel=e,this.control=new Int32Array(e.control),this.payload=new Uint8Array(e.payload)}call(e,t=[],r,n){if((r?.byteLength??0)>this.payload.byteLength)return{result:-Number(we),output:new Uint8Array};if(Atomics.load(this.control,0)!==0)throw new Error("Concurrent WALI network RPC on one pthread channel.");const i=this.nextRequestId;this.nextRequestId=i>=2147483645?1:i+2,this.control.fill(0),Atomics.store(this.control,1,e),Atomics.store(this.control,3,r?.byteLength??0),t.slice(0,10).forEach((d,y)=>Atomics.store(this.control,5+y,d|0)),r&&this.payload.set(r),Atomics.store(this.control,0,i),this.channel.port.postMessage(n?{requestId:i,process:n}:i);const o=Date.now()+3e4;for(;;){const d=Atomics.load(this.control,0);if(d===i+1)break;if(d!==i&&d!==-i)throw new Error(`Invalid WALI network RPC state ${d} for request ${i}.`);const y=Math.max(0,o-Date.now());if(y===0&&d===i&&Atomics.compareExchange(this.control,0,i,0)===i)return{result:-110,output:new Uint8Array};try{Nr(this.control,0,d,d===-i?void 0:y)}catch{if(Atomics.compareExchange(this.control,0,i,0)===i)return{result:-Number(Et),output:new Uint8Array}}}const a=Atomics.load(this.control,2),c=Atomics.load(this.control,4),f=this.payload.slice(0,Math.max(0,c));return Atomics.store(this.control,0,0),{result:a,output:f}}}class $f{memory;signals;client;waitBuffer;constructor(e,t,r){this.memory=e,this.signals=r,this.client=new Wf(t)}isNetworkFd(e){return e>=Uf&&!ze(e)}registerChild(e,t){return this.client.call(H.ChildRegister,[e],void 0,t).result}forgetChild(e){this.client.call(H.ChildForget,[e])}hasChild(e){return this.client.call(H.ChildExists,[e]).result===1}waitChild(e,t,r=0n){const n=this.waitBuffer??={control:new SharedArrayBuffer(32),response:new SharedArrayBuffer(Zs)};return{result:this.client.call(H.ChildWait,[e,t,Number(r&0xffffffffn),Number(r>>32n)],void 0,n).result,process:n}}imports(e={}){const t=(r,n)=>e[r]?.(...n)??-Et;return{SYS_pidfd_open:(r,n)=>BigInt(this.client.call(H.PidFdOpen,[Number(r),Number(n)]).result),SYS_dup:r=>this.isNetworkFd(Number(r))?BigInt(this.client.call(H.Duplicate,[Number(r)]).result):e.SYS_dup?.(r)??-Et,SYS_socket:(r,n,i)=>BigInt(this.client.call(H.Socket,[Number(r),Number(n),Number(i)]).result),SYS_socketpair:(r,n,i,o)=>this.socketPair(Number(r),Number(n),Number(i),Number(o)),SYS_connect:(r,n,i)=>this.withAddress(Number(r),Number(n),Number(i)),SYS_bind:(r,n,i)=>this.bind(Number(r),Number(n),Number(i),()=>t("SYS_bind",[r,n,i])),SYS_listen:(r,n)=>this.networkOr(Number(r),()=>this.client.call(H.Listen,[Number(r),Number(n)]).result,()=>t("SYS_listen",[r,n])),SYS_accept:(r,n,i)=>this.accept(Number(r),Number(n),Number(i),0,()=>t("SYS_accept",[r,n,i])),SYS_accept4:(r,n,i,o)=>this.accept(Number(r),Number(n),Number(i),Number(o),()=>t("SYS_accept4",[r,n,i,o])),SYS_send:(r,n,i,o)=>this.send(Number(r),Number(n),Number(i),Number(o)),SYS_sendto:(r,n,i,o)=>this.send(Number(r),Number(n),Number(i),Number(o)),SYS_recv:(r,n,i,o)=>this.receive(Number(r),Number(n),Number(i),Number(o)),SYS_recvfrom:(r,n,i,o,a,c)=>this.receiveFrom(Number(r),Number(n),Number(i),Number(o),Number(a),Number(c)),SYS_sendmsg:(r,n,i)=>this.sendMessage(Number(r),Number(n),Number(i)),SYS_recvmsg:(r,n,i)=>this.receiveMessage(Number(r),Number(n),Number(i)),SYS_shutdown:(r,n)=>this.networkOr(Number(r),()=>this.client.call(H.Shutdown,[Number(r),Number(n)]).result,()=>t("SYS_shutdown",[r,n])),SYS_setsockopt:(r,n,i,o,a)=>this.isNetworkFd(Number(r))?0n:t("SYS_setsockopt",[r,n,i,o,a]),SYS_getsockopt:(r,n,i,o,a)=>this.getSocketOption(Number(r),Number(o),Number(a)),SYS_getsockname:(r,n,i)=>this.getSocketName(Number(r),Number(n),Number(i)),SYS_getpeername:(r,n,i)=>this.getSocketName(Number(r),Number(n),Number(i)),SYS_close:r=>this.isNetworkFd(Number(r))?BigInt(this.client.call(H.Close,[Number(r)]).result):e.SYS_close?.(r)??-Et,SYS_read:(r,n,i)=>this.isNetworkFd(Number(r))?this.receive(Number(r),Number(n),Number(i),0):e.SYS_read?.(r,n,i)??-Et,SYS_write:(r,n,i)=>this.isNetworkFd(Number(r))?this.send(Number(r),Number(n),Number(i),0):e.SYS_write?.(r,n,i)??-Et,SYS_readv:(r,n,i)=>this.isNetworkFd(Number(r))?this.readv(Number(r),Number(n),Number(i)):e.SYS_readv?.(r,n,i)??-Et,SYS_writev:(r,n,i)=>this.isNetworkFd(Number(r))?this.writev(Number(r),Number(n),Number(i)):e.SYS_writev?.(r,n,i)??-Et,SYS_fcntl:(r,n,i)=>this.isNetworkFd(Number(r))?BigInt(this.client.call(H.Fcntl,[Number(r),Number(n),zf(i)]).result):e.SYS_fcntl?.(r,n,i)??-Et,SYS_poll:(r,n,i)=>this.poll(Number(r),Number(n),Number(i),()=>t("SYS_poll",[r,n,0])),SYS_epoll_create:r=>Number(r)>0?BigInt(this.client.call(H.EpollCreate).result):-we,SYS_epoll_create1:()=>BigInt(this.client.call(H.EpollCreate).result),SYS_eventfd:r=>BigInt(this.client.call(H.EventFd,[Number(r),0]).result),SYS_eventfd2:(r,n)=>BigInt(this.client.call(H.EventFd,[Number(r),Number(n)]).result),SYS_timerfd_create:(r,n)=>BigInt(this.client.call(H.TimerFdCreate,[Number(r),Number(n)]).result),SYS_timerfd_settime:(r,n,i,o)=>this.setTimerFd(Number(r),Number(n),Number(i),Number(o)),SYS_epoll_ctl:(r,n,i,o)=>this.epollControl(Number(r),Number(n),Number(i),Number(o),()=>t("SYS_epoll_ctl",[r,n,i,o])),SYS_epoll_wait:(r,n,i,o)=>this.epollWait(Number(r),Number(n),Number(i),Number(o),()=>t("SYS_epoll_wait",[r,n,i,o])),SYS_epoll_pwait:(r,n,i,o,a,c)=>{const f=()=>this.epollWait(Number(r),Number(n),Number(i),Number(o),()=>t("SYS_epoll_pwait",[r,n,i,o,a,c]));if(!a)return f();if(!this.signals)return-38n;const d=this.signals.mask,y=this.signals.imports().SYS_rt_sigprocmask(2,a,0,c);if(y!==0n)return y;try{const p=f();return this.signals.deliver(p===-4n),p}finally{this.signals.mask=d}}}}pollFd(e,t){return this.isNetworkFd(e)?this.client.call(H.Poll,[e,t]).result:32}bytes(){return new Uint8Array(this.memory().buffer)}view(){return new DataView(this.memory().buffer)}copy(e,t){if(e<0||t<0||e+t>this.bytes().byteLength)throw new WebAssembly.RuntimeError("WALI network memory access is out of bounds.");return this.bytes().slice(e,e+t)}networkOr(e,t,r){return this.isNetworkFd(e)?BigInt(t()):r()}withAddress(e,t,r){return this.isNetworkFd(e)?BigInt(this.client.call(H.Connect,[e],this.copy(t,r)).result):-Tt}bind(e,t,r,n){return this.isNetworkFd(e)?BigInt(this.client.call(H.Bind,[e],this.copy(t,r)).result):n()}accept(e,t,r,n,i){if(!this.isNetworkFd(e))return i();if(t!==0&&(r<=0||r+4>this.bytes().byteLength))return-we;const o=t===0?0:this.view().getUint32(r,!0);if(t!==0&&(t<0||t+o>this.bytes().byteLength))return-we;const{result:a,output:c}=this.client.call(H.Accept,[e,n]);return a<0||t===0||(this.bytes().set(c.subarray(0,o),t),this.view().setUint32(r,c.byteLength,!0)),BigInt(a)}socketPair(e,t,r,n){const{result:i,output:o}=this.client.call(H.SocketPair,[e,t,r]);if(i===0){if(n<0||n+8>this.bytes().byteLength)return-we;this.bytes().set(o,n)}return BigInt(i)}setTimerFd(e,t,r,n){if(!this.isNetworkFd(e)||r<0||r+32>this.bytes().byteLength)return-Tt;const{result:i,output:o}=this.client.call(H.TimerFdSetTime,[e,t],this.copy(r,32));if(i===0&&n!==0){if(n<0||n+32>this.bytes().byteLength||o.byteLength!==32)return-we;this.bytes().set(o,n)}return BigInt(i)}send(e,t,r,n){return this.isNetworkFd(e)?BigInt(this.client.call(H.Send,[e,n],this.copy(t,r)).result):-Tt}receive(e,t,r,n){if(!this.isNetworkFd(e))return-Tt;const{result:i,output:o}=this.client.call(H.Receive,[e,r,n]);return i>0&&this.bytes().set(o.subarray(0,i),t),BigInt(i)}receiveFrom(e,t,r,n,i,o){const a=this.receive(e,t,r,n);if(a<0n||i===0||o===0)return a;if(o<0||o+4>this.bytes().byteLength)return-we;const c=this.view().getUint32(o,!0);return this.writeDnsPeer(i,c)?(this.view().setUint32(o,16,!0),a):-we}sendMessage(e,t,r){if(!this.isNetworkFd(e)||t<0||t+28>this.bytes().byteLength)return-Tt;const n=this.view().getUint32(t+8,!0),i=this.view().getUint32(t+12,!0);if(i>1024)return-we;const o=[];let a=0;for(let d=0;d<i;d+=1){const y=n+d*8,p=this.copy(this.view().getUint32(y,!0),this.view().getUint32(y+4,!0));o.push(p),a+=p.byteLength}const c=new Uint8Array(a);let f=0;for(const d of o)c.set(d,f),f+=d.byteLength;return BigInt(this.client.call(H.Send,[e,r],c).result)}receiveMessage(e,t,r){if(!this.isNetworkFd(e)||t<0||t+28>this.bytes().byteLength)return-Tt;const n=this.view().getUint32(t+8,!0),i=this.view().getUint32(t+12,!0);if(i>1024)return-we;let o=0;for(let p=0;p<i;p+=1)o+=this.view().getUint32(n+p*8+4,!0);const{result:a,output:c}=this.client.call(H.Receive,[e,o,r]);if(a<=0)return BigInt(a);let f=0;for(let p=0;p<i&&f<a;p+=1){const b=n+p*8,S=this.view().getUint32(b,!0),I=Math.min(this.view().getUint32(b+4,!0),a-f);this.bytes().set(c.subarray(f,f+I),S),f+=I}const d=this.view().getUint32(t,!0),y=this.view().getUint32(t+4,!0);return d!==0&&this.writeDnsPeer(d,y)&&this.view().setUint32(t+4,16,!0),this.view().setUint32(t+20,0,!0),this.view().setInt32(t+24,0,!0),BigInt(a)}writeDnsPeer(e,t){return t<16||e<0||e+16>this.bytes().byteLength?!1:(this.bytes().fill(0,e,e+16),this.view().setUint16(e,2,!0),this.view().setUint16(e+2,53,!1),this.bytes().set([127,0,0,1],e+4),!0)}getSocketOption(e,t,r){return this.isNetworkFd(e)?r<=0||r+4>this.bytes().byteLength||this.view().getUint32(r,!0)<4||t<0||t+4>this.bytes().byteLength?-we:(this.view().setInt32(t,0,!0),this.view().setUint32(r,4,!0),0n):-Tt}getSocketName(e,t,r){if(!this.isNetworkFd(e))return-Tt;if(r<0||r+4>this.bytes().byteLength)return-we;const n=this.view().getUint32(r,!0),{result:i,output:o}=this.client.call(H.SocketName,[e]);return i<0?BigInt(i):n<o.byteLength||t<0||t+o.byteLength>this.bytes().byteLength?-we:(this.bytes().set(o,t),this.view().setUint32(r,o.byteLength,!0),0n)}writev(e,t,r){if(r<0||r>1024)return-we;const n=[];let i=0;for(let c=0;c<r;c+=1){const f=t+c*8,d=this.copy(this.view().getUint32(f,!0),this.view().getUint32(f+4,!0));n.push(d),i+=d.byteLength}const o=new Uint8Array(i);let a=0;for(const c of n)o.set(c,a),a+=c.byteLength;return BigInt(this.client.call(H.Send,[e,0],o).result)}readv(e,t,r){if(r<0||r>1024)return-we;let n=0;for(let c=0;c<r;c+=1)n+=this.view().getUint32(t+c*8+4,!0);const{result:i,output:o}=this.client.call(H.Receive,[e,n,0]);if(i<=0)return BigInt(i);let a=0;for(let c=0;c<r&&a<i;c+=1){const f=t+c*8,d=this.view().getUint32(f,!0),y=Math.min(this.view().getUint32(f+4,!0),i-a);this.bytes().set(o.subarray(a,a+y),d),a+=y}return BigInt(i)}poll(e,t,r,n){if(t<0||t>va/8)return-we;this.copy(e,t*8),n();const i=this.signals?.mask??0n,{result:o,output:a}=this.client.call(H.PollMany,[r,Number(i&0xffffffffn),Number(i>>32n)],this.copy(e,t*8));return o>=0&&this.bytes().set(a,e),BigInt(o)}epollControl(e,t,r,n,i){if(!this.isNetworkFd(e)&&!this.isNetworkFd(r))return i();const o=t===2?void 0:this.copy(n,To);return BigInt(this.client.call(H.EpollControl,[e,t,r],o).result)}epollWait(e,t,r,n,i){if(r<=0)return-we;const o=this.signals?.mask??0n,{result:a,output:c}=this.client.call(H.EpollWait,[e,r,n,Number(o&0xffffffffn),Number(o>>32n)]);return a===-9?i():(a>0&&this.bytes().set(c.subarray(0,a*To),t),BigInt(a))}}function zf(s){return typeof s=="bigint"?Number(BigInt.asIntN(32,s)):s|0}const Fo=-4,Os=3;class Qe{channel;control;payload;encoder=new TextEncoder;decoder=new TextDecoder("utf-8",{fatal:!0});nextRequestId=1;constructor(e){this.channel=e,this.control=new Int32Array(e.control),this.payload=new Uint8Array(e.payload)}static waited={calls:0,ms:0};request(e){const t=performance.now();try{return this.requestNow(e)}finally{Qe.waited.calls+=1,Qe.waited.ms+=performance.now()-t}}requestNow(e){if(Atomics.load(this.control,Os))return{result:Fo};const t=this.encoder.encode(JSON.stringify(e));if(t.byteLength>this.payload.byteLength)return{result:-90};if(Atomics.load(this.control,0)!==0)throw new Error("Concurrent file-lock RPC on one channel.");const r=this.nextRequestId;this.nextRequestId=r>=1073741821?1:r+2,this.control.fill(0,0,Os),this.payload.set(t),Atomics.store(this.control,1,t.byteLength),Atomics.store(this.control,0,r);try{for(this.channel.port.postMessage(r);Atomics.load(this.control,0)!==r+1;){if(Atomics.load(this.control,Os))return{result:Fo};const o=Atomics.load(this.control,0);o!==r+1&&Atomics.wait(this.control,0,o)}const n=Atomics.load(this.control,2);if(n<1||n>this.payload.byteLength)return{result:-5};const i=JSON.parse(this.decoder.decode(this.payload.slice(0,n)));return!i||!Number.isSafeInteger(i.result)?{result:-5}:i}finally{Atomics.store(this.control,0,0)}}}class Qs{channel;control;payload;encoder=new TextEncoder;decoder=new TextDecoder;nextRequestId=1;bell;wakeMemory;directSyscall(e){const t=this.channel.local;if(!(!t||e==="SYS_flock"||e==="SYS_fcntl"))return r=>{const{imports:n,errno:i}=t.handlers(),o=n[e];if(!o)throw lt(-38);let a;try{a=o(...r)}catch(c){throw lt(i(c))}return typeof a=="bigint"?a:BigInt(a??0)}}ownsLocalFile(e){const t=this.channel.local;return t!==void 0&&t.handlers().owns(e)}localHandlers(){const e=this.channel.local;return e?()=>e.handlers():void 0}wakeThrough(e){this.wakeMemory=e}constructor(e){this.channel=e,this.control=new Int32Array(e.control),this.payload=new Uint8Array(e.payload),this.bell=e.doorbell?new Int32Array(e.doorbell):void 0}attachMemory(e){this.channel.port.postMessage({memory:e})}copyForExec(e){return this.call(G.CopyForExec,{stdio:e}).process}currentWorkingDirectory(){return this.call(G.GetCwd)}copyForForkChannel(){return this.createChannel(Jr,this.call(G.CopyForFork).process)}createChannel(e,t){const r=$n(e),n=this.channel.sharedPipes&&{...this.channel.sharedPipes,table:t===void 0?this.channel.sharedPipes.table:new SharedArrayBuffer(65536*4)},i=t===void 0?void 0:new MessageChannel,o={...r.server,...t===void 0?{}:{process:t},...n?{sharedPipes:n}:{},...i?{releasePort:i.port2}:{}};this.channel.local?this.channel.local.attach(o):this.channel.port.postMessage({kind:"attach",...o},[r.server.port,...i?[i.port2]:[]]);const a=this.channel.local?.doorbell??this.channel.doorbell;return{...r.client,...n?{sharedPipes:n}:{},...i?{releasePort:i.port1}:{},...a?{doorbell:a}:{}}}copyForExecChannel(e){return this.createChannel(Jr,this.copyForExec(e))}closeProcess(){this.call(G.CloseProcess)}existsSync(e){return this.call(G.Exists,{path:e})}statSync(e){return Oo(this.call(G.Stat,{path:e}))}lstatSync(e){return Oo(this.call(G.Lstat,{path:e}))}readFileSync(e){const t=this.statSync(e).size;if(t<=Re)return tr(this.call(G.ReadFile,{path:e}).content);const r=new Uint8Array(t);for(let n=0;n<t;n+=Re){const i=this.readRangeSync(e,n,Math.min(Re,t-n));if(r.set(i,n),i.byteLength<Math.min(Re,t-n))return r.subarray(0,n+i.byteLength)}return r}async readFile(e){return this.readFileSync(e)}readRangeSync(e,t,r){const n=new Uint8Array(r);let i=0;for(;i<r;){const o=Math.min(Re,r-i),a=tr(this.call(G.ReadRange,{path:e,offset:t+i,length:o}).content);if(n.set(a,i),i+=a.byteLength,a.byteLength<o)break}return i===r?n:n.subarray(0,i)}writeRangeSync(e,t,r){for(let n=0;(n<r.byteLength||n===0&&r.byteLength===0)&&(this.call(G.WriteRange,{path:e,offset:t+n,content:ft(r.subarray(n,n+Re))}),r.byteLength!==0);n+=Re);}writeFileSync(e,t){const r=typeof t=="string"?this.encoder.encode(t):t;if(r.byteLength<=Re){this.call(G.WriteFile,{path:e,content:ft(r)});return}this.call(G.WriteFile,{path:e,content:""}),this.writeRangeSync(e,0,r)}mkdirSync(e,t){this.call(G.Mkdir,{path:e,recursive:t?.recursive===!0})}readdirSync(e){return this.call(G.Readdir,{path:e})}unlinkSync(e){this.call(G.Unlink,{path:e})}rmdirSync(e){this.call(G.Rmdir,{path:e})}renameSync(e,t){this.call(G.Rename,{from:e,to:t})}toSnapshot(){return JSON.parse(this.decoder.decode(this.readChunked(G.SnapshotSize)))}finalSnapshot(){return JSON.parse(this.decoder.decode(this.readChunked(G.FinalSnapshotSize)))}readChunked(e){const{length:t}=this.call(e);if(!Number.isSafeInteger(t)||t<0)throw lt(-5);const r=new Uint8Array(t);for(let n=0;n<t;n+=Re){const i=Math.min(Re,t-n),{content:o}=this.call(G.SnapshotChunk,{offset:n,length:i}),a=tr(o);if(a.byteLength!==i)throw lt(-5);r.set(a,n)}return r}prepareSpawn(){this.call(G.PrepareSpawn)}importPeerPatch(e){const t=this.encoder.encode(JSON.stringify(e));this.call(G.ImportPeerPatchStart,{length:t.byteLength});for(let r=0;r<t.byteLength;r+=Re)this.call(G.ImportPeerPatchChunk,{offset:r,content:ft(t.subarray(r,r+Re))})}replaceSnapshot(e){const t=this.encoder.encode(JSON.stringify(e));this.call(G.ReplaceSnapshotStart,{length:t.byteLength});for(let r=0;r<t.byteLength;r+=Re){const n=t.subarray(r,r+Re);this.call(G.ReplaceSnapshotChunk,{offset:r,content:ft(n)})}}syscall(e,t){const r=this.channel.local;if(r)for(;;){const o=r.syscall(e,t);if(typeof o=="bigint")return o;if(o!==void 0)throw lt(o.failed);const a=performance.now();r.idle(),Qe.waited.ms+=performance.now()-a}let n=this.names.get(e);n||(n=this.encoder.encode(e),this.names.set(e,n));const i=this.view??=new DataView(this.payload.buffer,this.payload.byteOffset,this.payload.byteLength);this.payload[0]=t.length,this.payload[1]=n.byteLength;for(let o=0;o<t.length;o+=1)i.setBigInt64(8+o*8,BigInt(t[o]),!0);return this.payload.set(n,8+t.length*8),this.exchange(G.SyscallBinary,8+t.length*8+n.byteLength,Hf(e,t)||this.bell?null:3e4),i.getBigInt64(0,!0)}names=new Map;lastResult=0;view;readForMapping(e,t,r){const n=new Uint8Array(r),i=this.view??=new DataView(this.payload.buffer,this.payload.byteOffset,this.payload.byteLength);let o=0;for(;o<r;){const a=Math.min(this.payload.byteLength,r-o);i.setInt32(0,e,!0),i.setFloat64(8,t+o,!0),i.setInt32(16,a,!0);const c=this.exchange(G.ReadForMappingBinary,20,3e4);if(this.lastResult===1)return o===0?void 0:n.subarray(0,o);if(n.set(this.payload.subarray(0,c),o),o+=c,c<a)break}return o===r?n:n.subarray(0,o)}mappingPath(e){return this.call(G.MappingPath,{fd:e}).path}writeForMapping(e,t,r){const n=this.encoder.encode(e);if(16+n.byteLength+r.byteLength>this.payload.byteLength)return this.call(G.WriteForMapping,{path:e,offset:t,content:ft(r)}).written;const i=this.view??=new DataView(this.payload.buffer,this.payload.byteOffset,this.payload.byteLength);return i.setFloat64(0,t,!0),i.setUint32(8,n.byteLength,!0),i.setUint32(12,r.byteLength,!0),this.payload.set(n,16),this.payload.set(r,16+n.byteLength),this.exchange(G.WriteForMappingBinary,16+n.byteLength+r.byteLength,3e4),this.payload[0]===1}call(e,t={},r=3e4){const n=this.encoder.encode(JSON.stringify(t));if(n.byteLength>this.payload.byteLength)throw lt(-90);if(Atomics.load(this.control,0)!==0)throw new Error("Concurrent WALI filesystem RPC on one channel.");this.payload.set(n);const i=this.exchange(e,n.byteLength,r);return i>0?JSON.parse(this.decoder.decode(this.payload.slice(0,i))):void 0}exchange(e,t,r){if(Atomics.load(this.control,0)!==0)throw new Error("Concurrent WALI filesystem RPC on one channel.");const n=this.nextRequestId;this.nextRequestId=n>=1073741821?1:n+2,this.control.fill(0),Atomics.store(this.control,1,e),Atomics.store(this.control,3,t),Atomics.store(this.control,0,n);const i=this.channel.local;if(i)for(;i.serveNow(),Atomics.load(this.control,0)!==n+1;)i.idle();else if(this.bell){Atomics.add(this.bell,0,1),Atomics.notify(this.bell,0);const f=Atomics.load(this.bell,1);f!==0&&this.wakeMemory&&Atomics.notify(new Int32Array(this.wakeMemory.buffer),f-1)}else this.channel.port.postMessage(n);const o=r===null?void 0:Date.now()+r;for(;;){const f=Atomics.load(this.control,0);if(f===n+1)break;if(f!==n&&f!==-n)throw new Error(`Invalid WALI filesystem RPC state ${f} for request ${n}.`);const d=o===void 0?void 0:Math.max(0,o-Date.now());if(d===0&&f===n&&Atomics.compareExchange(this.control,0,n,0)===n)throw lt(-110);Atomics.wait(this.control,0,f,f===-n?void 0:d)}const a=Atomics.load(this.control,2),c=Atomics.load(this.control,4);if(Atomics.store(this.control,0,0),a<0)throw lt(a);return this.lastResult=a,c}}function Hf(s,e){if(s==="SYS_flock"){const r=Number(e[1]??0);return(r&4)===0&&(r&8)===0}if(s!=="SYS_fcntl")return!1;const t=Number(e[1]??0);return t===7||t===38}const Vf=5;class tn{sink;root;sharedPipes;constructor(e,t,r){this.sink=e,this.root=t,this.sharedPipes=r}static async createInThread(e,t){const r=await import("./filesystem-host-BT4CmP6I.js"),n=new SharedArrayBuffer(2*Int32Array.BYTES_PER_ELEMENT),i=new Int32Array(n);r.hostInThread(n),await r.initializeHost({kind:"initialize",snapshot:e,...t});const o=$n(Jr),a=r.attachChannel({...o.server,...t.sharedPipes?{sharedPipes:t.sharedPipes}:{}}),c=new Qs({...o.client,...t.sharedPipes?{sharedPipes:t.sharedPipes}:{},local:{doorbell:n,serveNow:()=>r.serveNow(a),attach:d=>{r.attachChannel(d)},syscall:(d,y)=>r.syscallNow(a,d,y),handlers:()=>r.handlersNow(a),idle:()=>{r.pumpHost(!0),Atomics.wait(i,0,Atomics.load(i,0),Vf)}}}),f={attach:d=>{r.attachChannel(d)},terminate:()=>r.resetHost(),doorbell:n,host:r};return new tn(f,c,t.sharedPipes)}closePort(){this.sink.host?.closeHostPort()}pump(e=!1){(this.sink.host?.hostWaiting()||e)&&this.sink.host?.pumpHost(e)}doorbell(){return this.sink.doorbell?new Int32Array(this.sink.doorbell):void 0}static async create(e,t){const r=Ta("filesystem",()=>qr(new Worker(new URL("/assets/filesystem-worker-D88RPdU7.js",import.meta.url),{type:"module",name:"wali-filesystem"})));await new Promise((o,a)=>{const c=d=>{d.data.kind==="ready"&&(r.removeEventListener("message",c),o()),d.data.kind==="error"&&(r.removeEventListener("message",c),a(new Error(d.data.message)))};r.addEventListener("message",c),r.addEventListener("error",d=>a(d.error??new Error(d.message)),{once:!0});const f=[...t.updatePort?[t.updatePort]:[],...t.fileLocks?[t.fileLocks.channel.port]:[],...t.fileCoherence?[t.fileCoherence.port]:[]];r.postMessage({kind:"initialize",snapshot:e,...t},f)});const n=$n(Jr);r.postMessage({kind:"attach",...n.server},[n.server.port]);const i={attach:(o,a)=>r.postMessage({kind:"attach",...o},a),terminate:()=>r.terminate()};return new tn(i,new Qs({...n.client,...t.sharedPipes?{sharedPipes:t.sharedPipes}:{}}),t.sharedPipes)}createChannel(e,t=0){const r=$n(e),n=this.sharedPipes&&{...this.sharedPipes,table:t===0?this.sharedPipes.table:new SharedArrayBuffer(65536*4)};return this.sink.attach({process:t,...r.server,...n?{sharedPipes:n}:{}},[r.server.port]),{...r.client,...n?{sharedPipes:n}:{},...this.sink.doorbell?{doorbell:this.sink.doorbell}:{}}}copyForExec(){return this.createChannel(Jr,this.root.copyForExec())}filesystem(){return this.root}snapshot(){return this.root.toSnapshot()}finalSnapshot(){return this.root.finalSnapshot()}replaceSnapshot(e){this.root.replaceSnapshot(e)}terminate(){this.sink.terminate()}}const Hr=1e4,Gf=new Set([5,6,7,36,37,38]),jf=new Set(["SYS_open","SYS_openat","SYS_stat","SYS_lstat","SYS_newfstatat","SYS_access","SYS_faccessat","SYS_faccessat2","SYS_chmod","SYS_fchmodat","SYS_chdir","SYS_getcwd","SYS_mkdir","SYS_mkdirat","SYS_statfs","SYS_rmdir","SYS_unlink","SYS_unlinkat","SYS_rename","SYS_utimensat","SYS_symlink","SYS_symlinkat","SYS_readlink","SYS_readlinkat","SYS_inotify_init","SYS_inotify_init1"]),Bo=new Set(["SYS_close","SYS_read","SYS_pread64","SYS_write","SYS_pwrite64","SYS_readv","SYS_writev","SYS_preadv","SYS_pwritev","SYS_lseek","SYS_fstat","SYS_fchmod","SYS_fchdir","SYS_fstatfs","SYS_inotify_add_watch","SYS_inotify_rm_watch","SYS_dup","SYS_dup2","SYS_dup3","SYS_fcntl","SYS_getdents64","SYS_fsync","SYS_fdatasync","SYS_flock","SYS_ftruncate"]);class Kf{client;stdioAliasRegistry;descriptorState;memory;constructor(e,t,r,n){this.client=e,this.stdioAliasRegistry=t,this.descriptorState=r,this.memory=n}poll(e,t,r,n){const i=this.memory?.();if(!i||!Number.isSafeInteger(r)||r<=0||t<0||t+r*8>i.buffer.byteLength)return e(t,r,n);const o=this.descriptorState?new Int32Array(this.descriptorState.table):void 0,a=this.descriptorState?new Int32Array(this.descriptorState.descriptions):void 0,c=this.client.localHandlers(),f=new Map;let d=new DataView(i.buffer);for(let k=0;k<r;k+=1){const M=d.getInt32(t+k*8,!0);if(M<3||M>=Hr&&!ze(M))continue;const L=this.stdioAliasRegistry&&M<this.stdioAliasRegistry.length?Atomics.load(this.stdioAliasRegistry,M):-1;if(L===0||L===1||L===2||o&&a&&Atomics.load(a,Atomics.load(o,M)*3+2))continue;const W=c?c().owns(M):Number(this.client.syscall("SYS_fcntl",[M,1,0]))>=0;f.set(k,W?d.getInt16(t+k*8+4,!0)&4:32)}if(f.size===0)return e(t,r,n);const y=[...f.values()].filter(k=>k!==0).length,p=new Uint8Array(i.buffer,t,r*8).slice(),b=[];for(let k=0;k<r;k+=1)f.has(k)||b.push(k);const S=new Uint8Array(i.buffer);b.forEach((k,M)=>S.set(p.subarray(k*8,k*8+8),t+M*8));let I;try{I=e(t,b.length,y?0:n)}finally{const k=new Uint8Array(i.buffer,t,b.length*8).slice();new Uint8Array(i.buffer).set(p,t),d=new DataView(i.buffer),b.forEach((M,L)=>d.setInt16(t+M*8+6,k[L*8+6]|k[L*8+7]<<8,!0));for(const[M,L]of f)d.setInt16(t+M*8+6,L,!0)}return typeof I!="bigint"&&typeof I!="number"||Number(I)<0?I:BigInt(Number(I)+y)}ownedFileImports(e){const t={};for(const r of Bo){const n=r==="SYS_fcntl",i=n?void 0:this.client.directSyscall(r),o=e[r];if(!i&&!n||!o||r==="SYS_flock")continue;const a=this.client.localHandlers();a&&(t[r]=(...c)=>{const f=Number(c[0]);if(f<3||f>=Hr&&!ze(f)||n&&Gf.has(Number(c[1])))return o(...c);const{imports:d,errno:y,owns:p}=a();if(!p(f))return o(...c);const b=d[r];if(!b)throw lt(-38);let S;try{S=b(...c)}catch(I){throw lt(y(I))}return typeof S=="bigint"?S:BigInt(S??0)})}return t}imports(e){const t={};for(const o of jf){const a=this.client.directSyscall(o);t[o]=a?(...c)=>a(c):(...c)=>this.client.syscall(o,c)}const r=this.descriptorState?new Int32Array(this.descriptorState.table):void 0,n=this.descriptorState?new Int32Array(this.descriptorState.descriptions):void 0;for(const o of Bo){const a=this.client.directSyscall(o),c=o==="SYS_read"||o==="SYS_readv"||o==="SYS_write"||o==="SYS_writev"||o==="SYS_fstat",f=o==="SYS_write"||o==="SYS_writev",d=o==="SYS_pread64"||o==="SYS_pwrite64"||o==="SYS_preadv"||o==="SYS_pwritev";t[o]=(...y)=>{const p=Number(y[0]);if(r&&n&&p>=0&&(p<2e4||ze(p))){const S=Atomics.load(r,p),I=Atomics.load(n,S*3+2);return I&&d?-29n:I&&c?(f&&this.client.prepareSpawn(),e[o]?.(...y)??-9n):a?a(y):this.client.syscall(o,y)}const b=this.stdioAliasRegistry&&p>=0&&p<this.stdioAliasRegistry.length?Atomics.load(this.stdioAliasRegistry,p):-1;return p<3||p>=Hr&&!ze(p)||b===0||b===1||b===2?((o==="SYS_write"||o==="SYS_writev")&&this.client.prepareSpawn(),e[o]?.(...y)??-9n):a?a(y):this.client.syscall(o,y)}}const i=e.SYS_poll;return this.memory&&i&&(t.SYS_poll=(o,a,c)=>this.poll(i,Number(o),Number(a),Number(c))),{...e,...t}}readForMapping(e,t,r){if(!(e<3||e>=Hr&&!ze(e)))return this.client.readForMapping(e,t,r)}mappingPath(e){if(!(e<3||e>=Hr&&!ze(e)))return this.client.mappingPath(e)}writeForMapping(e,t,r){return this.client.writeForMapping(e,t,r)}}function $n(s){const e=new MessageChannel,t=new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT*8),r=new SharedArrayBuffer(s);return e.port1.start(),{client:{port:e.port1,control:t,payload:r},server:{port:e.port2,control:t,payload:r}}}function Oo(s){return{isFile:()=>s.file,isDirectory:()=>s.directory,isSymbolicLink:()=>s.symbolicLink===!0,size:s.size,...Xf(s,"mode","mtimeMs","atimeMs","ctimeMs","nlink","uid","gid","dev","ino","rdev","blksize","blocks")}}function Xf(s,...e){return Object.fromEntries(e.flatMap(t=>s[t]===void 0?[]:[[t,s[t]]]))}function lt(s){const e={2:"ENOENT",9:"EBADF",13:"EACCES",17:"EEXIST",20:"ENOTDIR",21:"EISDIR",22:"EINVAL",24:"EMFILE",28:"ENOSPC",29:"ESPIPE",34:"ERANGE",38:"ENOSYS",39:"ENOTEMPTY",90:"EMSGSIZE",110:"ETIMEDOUT"}[-s]??"EIO";return Object.assign(new Error(e),{code:e})}const Yo=1e4,Jf=19999,Ys=64,qs=64*1024,zn=8,Do=3,Co=4,Ds=2048,Cs=524288,Zf=0,Qf=1,qf=2,eh=3,th=4,Uo=1030,rh=1,nh=4096;function sh(s=new rn(new ni)){const e={table:s.sharedEntries.buffer,descriptions:s.registry.pipeMetadata.buffer,slots:new SharedArrayBuffer(Ys*Int32Array.BYTES_PER_ELEMENT),controls:new SharedArrayBuffer(Ys*zn*Int32Array.BYTES_PER_ELEMENT),payloads:new SharedArrayBuffer(Ys*qs)};return Fa.set(e.table,s),e}const Fa=new WeakMap,Wo=new WeakMap;let ei,ti;function ih(s,e){if(!Number.isSafeInteger(e)||e<0||e>=65536)return 0;let t=s===ei?ti:Wo.get(s);t||(t={table:new Int32Array(s.table),descriptions:new Int32Array(s.descriptions)},Wo.set(s,t)),ei=s,ti=t;const r=Atomics.load(t.table,e);return Atomics.load(t.descriptions,r*3)}function oh(){ei=void 0,ti=void 0}class ah{memory;state;remote;table;slots;constructor(e,t,r,n){this.memory=e,this.state=t,this.remote=n,this.table=r??Fa.get(t.table),this.slots=new Int32Array(t.slots)}isPipeFd(e){return this.entry(e)!==0}exportBrowserProcessPipe(e){const t=this.entry(e);return t===0?void 0:this.handle(t)}pollDescriptor(e,t){const r=this.entry(e);return r===0?void 0:La(this.handle(r),t)}ioctl(e,t){if(this.isPipeFd(e))return t===21537||t===21585||t===21584?0n:-25n}imports(e={}){const t=(n,i)=>e[n]?.(...i)??-38n,r={...e,SYS_pipe:n=>this.pipe(Number(n),0),SYS_pipe2:(n,i)=>this.pipe(Number(n),Number(i)),SYS_close:n=>this.isPipeFd(Number(n))?this.close(Number(n)):e.SYS_close?.(n)??-38n,SYS_read:(n,i,o)=>this.isPipeFd(Number(n))?this.read(Number(n),Number(i),Number(o)):e.SYS_read?.(n,i,o)??-38n,SYS_pread64:(n,i,o,a)=>this.isPipeFd(Number(n))?-29n:e.SYS_pread64?.(n,i,o,a)??-38n,SYS_write:(n,i,o)=>this.isPipeFd(Number(n))?this.write(Number(n),Number(i),Number(o)):e.SYS_write?.(n,i,o)??-38n,SYS_pwrite64:(n,i,o,a)=>this.isPipeFd(Number(n))?-29n:e.SYS_pwrite64?.(n,i,o,a)??-38n,SYS_preadv:(n,i,o,a,c)=>this.isPipeFd(Number(n))?-29n:e.SYS_preadv?.(n,i,o,a,c)??-38n,SYS_pwritev:(n,i,o,a,c)=>this.isPipeFd(Number(n))?-29n:e.SYS_pwritev?.(n,i,o,a,c)??-38n,SYS_readv:(n,i,o)=>this.isPipeFd(Number(n))?this.readv(Number(n),Number(i),Number(o)):e.SYS_readv?.(n,i,o)??-38n,SYS_writev:(n,i,o)=>this.isPipeFd(Number(n))?this.writev(Number(n),Number(i),Number(o)):e.SYS_writev?.(n,i,o)??-38n,SYS_lseek:(n,i,o)=>this.isPipeFd(Number(n))?-29n:e.SYS_lseek?.(n,i,o)??-38n,SYS_fstat:(n,i)=>this.isPipeFd(Number(n))?this.fstat(Number(i)):e.SYS_fstat?.(n,i)??-38n,SYS_dup:n=>this.isPipeFd(Number(n))?this.duplicate(Number(n)):e.SYS_dup?.(n)??-38n,SYS_dup2:(n,i)=>this.isPipeFd(Number(n))?this.duplicate(Number(n),Number(i),3,!1,e):e.SYS_dup2?.(n,i)??-38n,SYS_dup3:(n,i,o)=>this.isPipeFd(Number(n))?Number(n)===Number(i)||(Number(o)&~Cs)!==0?-22n:this.duplicate(Number(n),Number(i),3,!!(Number(o)&Cs),e):e.SYS_dup3?.(n,i,o)??-38n,SYS_fcntl:(n,i,o)=>this.isPipeFd(Number(n))?this.fcntl(Number(n),Number(i),Number(BigInt.asIntN(32,BigInt(o))),e):e.SYS_fcntl?.(n,i,o)??-38n,SYS_poll:(n,i,o)=>this.poll(Number(n),Number(i),Number(o),()=>t("SYS_poll",[n,i,o]))};if(this.remote)for(const n of["SYS_pipe","SYS_pipe2","SYS_close","SYS_dup","SYS_dup2","SYS_dup3","SYS_fcntl"]){const i=r[n];r[n]=(...o)=>n==="SYS_pipe"||n==="SYS_pipe2"||this.isPipeFd(Number(o[0]))?this.remote.syscall(n,o):i(...o)}return r}pipe(e,t){if((t&-526337)!==0)return-22n;if(!this.validRange(e,8))return-14n;const r=this.allocateSlot();if(r<0)return-24n;const n=this.control(r);n.fill(0),Atomics.store(n,Do,1),Atomics.store(n,Co,1);const i=this.allocateDescriptor(r+1),o=i>=0?this.allocateDescriptor(-(r+1)):-1;if(i<0||o<0)return i>=0&&this.table.close(i),Atomics.store(this.slots,r,0),-24n;for(const c of[i,o])this.table.entries[c].flags=t&Cs?1:0,Atomics.store(new Int32Array(this.state.descriptions),this.table.entries[c].description*3+1,t&Ds);const a=this.view();return a.setInt32(e,i,!0),a.setInt32(e+4,o,!0),0n}read(e,t,r){if(!Number.isSafeInteger(r)||r<0||!this.validRange(t,r))return-22n;const i=(this.statusFlags(e)&Ds?oi:If)(this.handle(this.entry(e)),r);return typeof i=="bigint"?i:(this.bytes().set(i,t),BigInt(i.byteLength))}write(e,t,r){return!Number.isSafeInteger(r)||r<0||!this.validRange(t,r)?-22n:Pa(this.handle(this.entry(e)),this.bytes().slice(t,t+r))}readv(e,t,r){if(!Number.isSafeInteger(r)||r<0||r>1024||!this.validRange(t,r*8))return-22n;let n=0n;for(let i=0;i<r;i+=1){const o=t+i*8,a=this.read(e,this.view().getUint32(o,!0),this.view().getUint32(o+4,!0));if(a<0n)return n>0n?n:a;if(n+=a,a<BigInt(this.view().getUint32(o+4,!0)))break}return n}writev(e,t,r){if(!Number.isSafeInteger(r)||r<0||r>1024||!this.validRange(t,r*8))return-22n;let n=0n;for(let i=0;i<r;i+=1){const o=t+i*8,a=this.write(e,this.view().getUint32(o,!0),this.view().getUint32(o+4,!0));if(a<0n)return n>0n?n:a;n+=a}return n}fstat(e){if(!this.validRange(e,144))return-14n;const t=this.view();for(let r=0;r<144;r+=4)t.setUint32(e+r,0,!0);return t.setBigUint64(e+16,1n,!0),t.setUint32(e+24,nh|438,!0),t.setUint32(e+28,1e3,!0),t.setUint32(e+32,1e3,!0),t.setBigInt64(e+56,4096n,!0),0n}statusFlags(e){const t=Atomics.load(new Int32Array(this.state.table),e);return Atomics.load(new Int32Array(this.state.descriptions),t*3+1)}fcntl(e,t,r,n){if(t===Zf||t===Uo)return this.duplicate(e,void 0,Math.max(3,r),t===Uo,n);const i=this.table.entries[e];return t===Qf?BigInt(i.flags):t===qf?(i.flags=r&rh,0n):t===eh?BigInt(this.statusFlags(e)|(this.entry(e)<0?1:0)):t===th?(Atomics.store(new Int32Array(this.state.descriptions),i.description*3+1,r&Ds),0n):-22n}duplicate(e,t,r=Yo,n=!1,i={}){const o=this.table.get(e);if(!o)return-9n;if(t===e)return BigInt(e);const a=t===void 0?this.freeDescriptor(r):t;return a<0||a>=65536?-9n:(this.table.set(a,o,n?1:0),BigInt(a))}close(e){return this.table.close(e)?0n:-9n}poll(e,t,r,n){if(!Number.isSafeInteger(t)||t<0||t>65536||!this.validRange(e,t*8))return-22n;const i=n();let o=typeof i=="bigint"?Number(i):typeof i=="number"?i:0;o<0&&(o=0);for(let a=0;a<t;a+=1){const c=e+a*8,f=this.view().getInt32(c,!0),d=this.pollDescriptor(f,this.view().getInt16(c+4,!0));d!==void 0&&(this.view().getInt16(c+6,!0)!==0&&(o-=1),this.view().setInt16(c+6,d,!0),d!==0&&(o+=1))}return BigInt(o)}allocateSlot(){for(let e=0;e<this.slots.length;e+=1)if(Atomics.compareExchange(this.slots,e,0,1)===0)return e;return-1}freeDescriptor(e){for(let t=Math.max(3,e);t<=Jf;t++)if(!this.table.get(t))return t;return-1}allocateDescriptor(e,t=Yo){const r=this.freeDescriptor(t);if(r<0)return r;const n=Math.abs(e)-1,i=this.table.registry.create("pipe",{pipe:n,side:e>0?"reader":"writer"},()=>{Zr(this.handle(e));const o=this.control(n);Atomics.load(o,Do)===0&&Atomics.load(o,Co)===0&&Atomics.store(this.slots,n,0)});return Atomics.store(this.table.registry.pipeMetadata,i.id*3,e),this.table.set(r,i),r}entry(e){return ih(this.state,e)}handle(e){const t=Math.abs(e)-1;return{control:this.state.controls,payload:this.state.payloads,role:e>0?"reader":"writer",controlOffset:t*zn*Int32Array.BYTES_PER_ELEMENT,payloadOffset:t*qs,payloadLength:qs}}control(e){return new Int32Array(this.state.controls,e*zn*Int32Array.BYTES_PER_ELEMENT,zn)}bytes(){return new Uint8Array(this.memory().buffer)}view(){return new DataView(this.memory().buffer)}validRange(e,t){return Number.isSafeInteger(e)&&Number.isSafeInteger(t)&&e>=0&&t>=0&&e+t<=this.memory().buffer.byteLength}}const Us=64*1024,ch=1e4;var Yt;(function(s){s[s.Query=1]="Query",s[s.Open=2]="Open",s[s.Push=3]="Push",s[s.Pull=4]="Pull",s[s.Flush=5]="Flush",s[s.Close=6]="Close"})(Yt||(Yt={}));var $o;(function(s){s[s.VideoDecoder=0]="VideoDecoder",s[s.VideoEncoder=1]="VideoEncoder",s[s.AudioDecoder=2]="AudioDecoder",s[s.AudioEncoder=3]="AudioEncoder"})($o||($o={}));const zo=1;var Je;(function(s){s[s.State=0]="State",s[s.Operation=1]="Operation",s[s.Result=2]="Result",s[s.Argument0=3]="Argument0",s[s.Argument1=4]="Argument1",s[s.Argument2=5]="Argument2",s[s.Argument3=6]="Argument3",s[s.Argument4=7]="Argument4",s[s.Argument5=8]="Argument5"})(Je||(Je={}));const lh=6,fh=9,hh=-5,Ws=-9,dh=-11,Rn=-14,Qt=-22,br=-95,uh=-110,Ho=3e4,mh=ch+5e3;class yh{channel;control;nextRequestId=1;constructor(e){this.channel=e,this.control=new Int32Array(e.control)}call(e,t,r){if(Atomics.load(this.control,Je.State)!==0)return dh;const n=this.nextRequestId;this.nextRequestId=n>=1073741821?1:n+2,this.control.fill(0);for(let a=0;a<lh;a+=1)Atomics.store(this.control,Je.Argument0+a,t[a]??0);Atomics.store(this.control,Je.Operation,e),Atomics.store(this.control,Je.State,n),this.channel.port.postMessage(n);const i=Date.now()+r;for(;;){const a=Atomics.load(this.control,Je.State);if(a===n+1)break;if(a!==n&&a!==-n)return hh;const c=Math.max(0,i-Date.now());if(c===0&&a===n&&Atomics.compareExchange(this.control,Je.State,n,0)===n)return uh;Atomics.wait(this.control,Je.State,a,a===-n?void 0:c)}const o=Atomics.load(this.control,Je.Result);return Atomics.store(this.control,Je.State,0),o}}function wh(s,e,t){const r=()=>s().buffer.byteLength,n=(c,f)=>Number.isSafeInteger(c)&&c>0&&f>=0&&c<=r()-f,i=(c,f)=>f===0?Number.isSafeInteger(c)&&c>=0:n(c,f),o=(c,f,d=Ho)=>{const y=t();return BigInt(y?y.call(c,f,d):br)},a=c=>(f,d,y)=>{if(!e())return BigInt(br);const p=Number(f),b=Number(d),S=Number(y);return!Number.isInteger(p)||p<0||p>3||!Number.isSafeInteger(S)||S<1||S>Us?BigInt(Qt):n(b,S)?o(c,[p,b,S]):BigInt(Rn)};return{SYS_browser_codec_query_v1:a(Yt.Query),SYS_browser_codec_open_v1:a(Yt.Open),SYS_browser_codec_push_v1:(c,f,d,y,p)=>{if(!e())return BigInt(br);const b=Number(c),S=Number(f),I=Number(d),k=Number(y),M=Number(p);return!Number.isInteger(b)||b<=0?BigInt(Ws):!Number.isSafeInteger(I)||I<0||!Number.isSafeInteger(M)||M<1||M>Us?BigInt(Qt):I>0&&!n(S,I)||!n(k,M)?BigInt(Rn):o(Yt.Push,[b,S,I,k,M])},SYS_browser_codec_pull_v1:(c,f,d,y,p,b)=>{if(!e())return BigInt(br);const S=Number(c),I=Number(f),k=Number(d),M=Number(y),L=Number(p),W=Number(b);return!Number.isInteger(S)||S<=0?BigInt(Ws):!Number.isInteger(I)||(I&~zo)!==0||!Number.isSafeInteger(M)||M<0||!Number.isSafeInteger(W)||W<0||W>Us?BigInt(Qt):!i(k,M)||!i(L,W)?BigInt(Rn):o(Yt.Pull,[S,I,k,M,L,W],(I&zo)===0?Ho:mh)},SYS_browser_codec_flush_v1:c=>{if(!e())return BigInt(br);const f=Number(c);return!Number.isInteger(f)||f<=0?BigInt(Ws):o(Yt.Flush,[f])},SYS_browser_codec_close_v1:c=>{if(!e())return BigInt(br);const f=Number(c);return!Number.isInteger(f)||f<=0?0n:o(Yt.Close,[f])}}}class ci{worker;constructor(e){this.worker=e}static async create(e){const t=qr(new Worker(new URL("/assets/codec-worker-CbrC58Ct.js",import.meta.url),{type:"module",name:"wali-codec"}));return await new Promise((r,n)=>{const i=o=>{o.data.kind==="ready"&&(t.removeEventListener("message",i),r()),o.data.kind==="error"&&(t.removeEventListener("message",i),n(new Error(o.data.message)))};t.addEventListener("message",i),t.addEventListener("error",o=>n(o.error??new Error(o.message)),{once:!0}),t.postMessage({kind:"initialize",memory:e})}),new ci(t)}createChannel(){const e=new MessageChannel,t=new SharedArrayBuffer(fh*Int32Array.BYTES_PER_ELEMENT);return this.worker.postMessage({kind:"attach",port:e.port2,control:t},[e.port2]),{port:e.port1,control:t}}terminate(){this.worker.terminate()}}const $s=1,zs=2,Hs=4,Vo=8,ph=16,gh=32,Ba=1024,Sh=Ba*8;function bh(s,e,t){return(r,n,i,o,a)=>{const c=Number(r);if(!Number.isInteger(c)||c<0||c>Ba)return-22n;const f=[Number(n),Number(i),Number(o)],d=[$s,Hs,zs],y=Math.ceil(c/8);let p=new Uint8Array(s().buffer);for(const D of f)if(D!==0&&(D<0||D+y>p.byteLength))return-14n;const b=Number(a);let S=-1;if(b!==0){if(b<0||b+16>p.byteLength)return-14n;const D=new DataView(s().buffer),v=D.getBigInt64(b,!0),U=D.getBigInt64(b+8,!0);if(v<0n||U<0n)return-22n;S=Number(v*1000n+(U+999n)/1000n)}const I=new Map;f.forEach((D,v)=>{if(D!==0)for(let U=0;U<c;U+=1)p[D+(U>>3)]&1<<(U&7)&&I.set(U,(I.get(U)??0)|d[v])});const k=t();if(k<=0)return-12n;let M=new DataView(s().buffer),L=0;for(const[D,v]of I){const U=k+L*8;M.setInt32(U,D,!0),M.setInt16(U+4,v,!0),M.setInt16(U+6,0,!0),L+=1}const W=e(k,L,S),de=Number(typeof W=="bigint"?W:W??0);if(de<0)return BigInt(de);p=new Uint8Array(s().buffer),M=new DataView(s().buffer);for(const D of f)D!==0&&p.fill(0,D,D+y);let se=0,ie=0;for(const[D,v]of I){const U=M.getInt16(k+ie*8+6,!0);if(ie+=1,U&gh)return-9n;[(v&$s)!==0&&(U&($s|ph|Vo))!==0,(v&Hs)!==0&&(U&(Hs|Vo))!==0,(v&zs)!==0&&(U&zs)!==0].forEach((Se,O)=>{if(!Se)return;const fe=f[O]+(D>>3);p[fe]=(p[fe]??0)|1<<(D&7),se+=1})}return BigInt(se)}}var Dt;(function(s){s[s.Inspect=1]="Inspect",s[s.Read=2]="Read",s[s.WriteStart=3]="WriteStart",s[s.WriteChunk=4]="WriteChunk",s[s.WriteFinish=5]="WriteFinish",s[s.Remove=6]="Remove"})(Dt||(Dt={}));const vn=512*1024,Go=256*1024*1024,jo=5,Eh=new TextEncoder,Ah=new TextDecoder("utf-8",{fatal:!0});class _h{channel;control;payload;nextRequestId=1;constructor(e){this.channel=e,this.control=new Int32Array(e.control),this.payload=new Uint8Array(e.payload)}pull(e){const t=this.call(Dt.Inspect,{path:e});if(!t.exists)return;const r=ri(t.length,0,Go),n=new Uint8Array(r);for(let i=0;i<r;i+=vn){const o=Math.min(vn,r-i),a=this.call(Dt.Read,{path:e,offset:i,length:o}),c=tr(a.content);if(c.byteLength!==o)throw new Error("Invalid coherent file response.");n.set(c,i)}return{bytes:n,...t.mode===void 0?{}:{mode:t.mode},...t.mtimeMs===void 0?{}:{mtimeMs:t.mtimeMs},parents:Oa(e,t.parents)}}push(e,t){if(!t){this.call(Dt.Remove,{path:e});return}if(t.bytes.byteLength>Go)throw new Error("Coherent file exceeds 256 MiB.");this.call(Dt.WriteStart,{path:e,length:t.bytes.byteLength,...t.mode===void 0?{}:{mode:t.mode},...t.mtimeMs===void 0?{}:{mtimeMs:t.mtimeMs},...t.parents===void 0?{}:{parents:t.parents}});for(let r=0;r<t.bytes.byteLength;r+=vn){const n=t.bytes.subarray(r,r+vn);this.call(Dt.WriteChunk,{offset:r,content:ft(n)})}this.call(Dt.WriteFinish)}call(e,t={}){const r=()=>{if(Atomics.load(this.control,jo))throw Object.assign(new Error("Browser file coherence was cancelled."),{errno:125})};r();const n=Eh.encode(JSON.stringify(t));if(n.byteLength>this.payload.byteLength)throw new Error("File-coherence request is too large.");if(Atomics.load(this.control,0)!==0)throw new Error("Concurrent file-coherence RPC on one channel.");const i=this.nextRequestId;this.nextRequestId=i>=1073741821?1:i+2,this.control.fill(0,0,jo),this.payload.set(n),Atomics.store(this.control,1,e),Atomics.store(this.control,3,n.byteLength),Atomics.store(this.control,0,i);try{for(this.channel.port.postMessage(i);Atomics.load(this.control,0)!==i+1;){r();const f=Atomics.load(this.control,0);f!==i+1&&Atomics.wait(this.control,0,f)}const o=Atomics.load(this.control,2),a=ri(Atomics.load(this.control,4),0,this.payload.byteLength),c=a===0?void 0:JSON.parse(Ah.decode(this.payload.slice(0,a)));if(o<0)throw Object.assign(new Error(`Browser file coherence failed with ${o}.`),{errno:-o});return c}finally{Atomics.store(this.control,0,0)}}}function Ko(s){const e=s.replace(/-(?:journal|shm|wal)$/u,"");return[e,`${e}-journal`,`${e}-wal`,`${e}-shm`]}function Nh(s,e){return li(e).flatMap(t=>{if(!s.existsSync(t))return[];const r=s.statSync(t);if(!r.isDirectory())throw _t("A coherent file parent must be a directory.");return[{path:t,...Ya({mode:r.mode,mtimeMs:r.mtimeMs})}]})}function Ih(s,e,t){const r=new Map(Oa(e,t).map(n=>[n.path,n]));for(const n of li(e)){if(s.existsSync(n)){if(!s.statSync(n).isDirectory())throw _t("A coherent file parent must be a directory.");continue}s.mkdirSync(n);const i=r.get(n);i?.mode!==void 0&&s.chmodSync?.(n,i.mode),i?.mtimeMs!==void 0&&s.utimesSync?.(n,new Date(i.mtimeMs),new Date(i.mtimeMs))}}function Oa(s,e){if(e===void 0)return[];const t=new Set(li(s));if(!Array.isArray(e)||e.length>t.size)throw _t("Invalid coherent file parents.");return e.map(r=>{if(typeof r!="object"||r===null)throw _t("Invalid coherent file parent.");const n=r,i=Da(n.path);if(!t.delete(i))throw _t("Coherent metadata must name distinct ancestors of its file.");return{path:i,...Ya(n)}})}function li(s){const e=[];for(const t of Da(s).split("/"))!t||t==="."||(t===".."?e.pop():e.push(t));return e.slice(0,-1).map((t,r)=>`/${e.slice(0,r+1).join("/")}`)}function Ya(s){const e=s.mode===void 0?void 0:ri(s.mode,0,65535),t=s.mtimeMs===void 0?void 0:xh(s.mtimeMs);return{...e===void 0?{}:{mode:e},...t===void 0?{}:{mtimeMs:t}}}function Da(s){const e=kh(s);if(!e.startsWith("/")||e.length>4096||e.includes("\0"))throw _t("Invalid coherent file path.");return e}function kh(s){if(typeof s!="string")throw _t("Expected a string.");return s}function ri(s,e,t){if(!Number.isSafeInteger(s)||s<e||s>t)throw _t("Expected a bounded integer.");return s}function xh(s){if(typeof s!="number"||!Number.isFinite(s))throw _t("Expected a finite number.");return s}function _t(s){return Object.assign(new Error(s),{errno:22})}class Mh{locks;coherence;filesystem;held=[];locallyCreated=new Set;constructor(e,t,r){this.locks=e,this.coherence=t,this.filesystem=r}created(e){this.locallyCreated.add(e)}request(e){if(e.operation==="query")return this.locks.request(e);if(e.operation==="set"){const i=!this.held.some(a=>a.path===e.path),o=this.locks.request(e);if(o.result<0)return o;if(i)try{this.refresh(e.path)}catch(a){throw this.locks.request({operation:"unlock",owner:e.owner,namespace:e.namespace,path:e.path,range:e.range}),a}return this.install(e.owner,e.namespace,e.path,e.range),o}if(e.operation==="unlock"){const i=this.without(e.owner,e.namespace,e.path,e.range);this.held.some(a=>a.path===e.path)&&!i.some(a=>a.path===e.path)&&this.publish(e.path);const o=this.locks.request(e);return o.result>=0&&this.replaceHeld(i),o}const t=this.held.filter(i=>i.owner!==e.owner),r=new Set(this.held.filter(i=>i.owner===e.owner).map(i=>i.path));for(const i of r)t.some(o=>o.path===i)||this.publish(i);const n=this.locks.request(e);return n.result>=0&&this.replaceHeld(t),n}refresh(e){const t=performance.now();try{this.refreshNow(e)}finally{Qe.waited.ms+=performance.now()-t}}publish(e){const t=performance.now();try{this.publishNow(e)}finally{Qe.waited.ms+=performance.now()-t}}refreshNow(e){for(const t of Ko(e)){const r=this.coherence.pull(t);if(!r&&this.locallyCreated.delete(t)){this.coherence.push(t,this.readLocal(t)),this.filesystem.dropChangedPaths?.([t]);continue}this.locallyCreated.delete(t),this.writeLocal(t,r),this.filesystem.dropChangedPaths?.([t])}}publishNow(e){for(const t of Ko(e))this.coherence.push(t,this.readLocal(t)),this.filesystem.dropChangedPaths?.([t])}readLocal(e){if(!this.filesystem.existsSync(e))return;const t=this.filesystem.statSync(e);if(!t.isDirectory())return{bytes:this.filesystem.readFileSync(e),...t.mode===void 0?{}:{mode:t.mode},...t.mtimeMs===void 0?{}:{mtimeMs:t.mtimeMs},parents:Nh(this.filesystem,e)}}writeLocal(e,t){if(!t){this.filesystem.existsSync(e)&&!this.filesystem.statSync(e).isDirectory()&&this.filesystem.unlinkSync(e);return}Ih(this.filesystem,e,t.parents),this.filesystem.writeFileSync(e,t.bytes),t.mode!==void 0&&this.filesystem.chmodSync?.(e,t.mode),t.mtimeMs!==void 0&&this.filesystem.utimesSync?.(e,new Date(t.mtimeMs),new Date(t.mtimeMs))}install(e,t,r,n){const i=this.without(e,t,r,n);i.push({owner:e,namespace:t,path:r,...n}),this.replaceHeld(i)}without(e,t,r,n){return this.held.flatMap(i=>i.owner===e&&i.namespace===t&&i.path===r&&Lh(i,n)?Ph(i,n):[i])}replaceHeld(e){this.held.splice(0,this.held.length,...e)}}function Lh(s,e){return s.start<(e.end??Number.POSITIVE_INFINITY)&&e.start<(s.end??Number.POSITIVE_INFINITY)}function Ph(s,e){const t=[];s.start<e.start&&t.push({...s,end:e.start});const r=s.end??Number.POSITIVE_INFINITY,n=e.end??Number.POSITIVE_INFINITY;return n<r&&t.push({...s,start:n,...s.end===void 0?{}:{end:s.end}}),t}const Rh=9n,vh=22n,Xo=new TextEncoder,Vr=new TextDecoder;class Ca extends Error{imports;constructor(e){super(`Unsupported WALI imports: ${e.join(", ")}`),this.imports=e,this.name="UnsupportedWaliImportError"}}function Th(s,e){if(jc(s))return()=>{throw new Ca([s])};let t=!1;return()=>{if(!t){t=!0;const r=`[WALI] ${s} is not implemented; answering -ENOSYS (38) as a kernel would.`;console.error(r),e?.(r)}return Gc}}class Jo extends Error{}class Zo extends Error{code;constructor(e){super(`WALI process exited with status ${e}`),this.code=e}}class Fh{async run(e,t={}){const r=t.filesystemPolicy===void 0?void 0:er(t.filesystemPolicy),n=r,i=await Wc(e),o=$c(i);zc(o);const a=o.filter(g=>g.module==="wali"),c=[],f=[],d=typeof t.stdin=="object"&&t.stdin!==null&&"read"in t.stdin?t.stdin:new ca(typeof t.stdin=="string"?Xo.encode(t.stdin):t.stdin??new Uint8Array),y=t.argv?.length?[...t.argv]:["wali-program"],p=y.map(g=>Xo.encode(`${g}\0`)),b=Dh(t.pid),S=performance.now(),I={...Qe.waited};let k=S;const M=new Map,L=t.signalState??Tc();let W,de,se,ie,D,v,U=!1;const X=hf(e,t.memory),Se=Nl(),O=new Int32Array(new SharedArrayBuffer(3*Int32Array.BYTES_PER_ELEMENT));Atomics.store(O,1,-1);const fe=new rn(new ni),ue=t.descriptorTable?.sharedPipes??sh(fe),V=()=>{if(X)return X;const g=W?.exports.memory;if(!(g instanceof WebAssembly.Memory))throw new Error("WALI module does not export linear memory.");return g},me=()=>new DataView(V().buffer),T=()=>new Uint8Array(V().buffer),j=(g,N)=>(Er(V(),g,N),T().slice(g,g+N)),pe=(g,N)=>{Er(V(),g,N.byteLength),T().set(N,g)},ve=(g,N)=>{if(g===1)c.push(N),t.onStdout?.(N.slice());else if(g===2)f.push(N),t.onStderr?.(N.slice());else return-Rh;return BigInt(N.byteLength)},Oe=(g,N="SYS_exit_group")=>{const P=`[WALI] ${N}(${g&255}) on the MAIN thread -- the process is ending here, not in a pthread. If the program did not ask to exit, this is the caller to find.`;throw console.error(P),t.onDiagnostic?.(P),new Zo(g&255)},Ie=g=>g<0||g>64?-22n:g===0?0n:g!==9&&(tt.mask&1n<<BigInt(g-1))!==0n?(new hs(L).raise(g),0n):((g===9||g===19?"default":new hs(L).raise(g))==="default"&&vc(g)&&Oe(128+g,`signal ${g}`),0n),dt=t.executablePath??(y[0].startsWith("/")?y[0]:`/usr/bin/${y[0]}`),Te=a.some(g=>g.name==="__wasm_thread_spawn"),ut=a.some(g=>Bh.has(g.name))?t.browserProcess:void 0,nn=t.forkState?.allocator??pa(),mt=zl(),K=t.descriptorTable?new Qs(t.descriptorTable):void 0;if(K&&X&&K.attachMemory(X),!K&&(Te||ut)&&t.filesystem?.toSnapshot&&t.filesystem.replaceSnapshot){if(!X)throw new Error("A threaded WALI module must import its shared process memory.");const g=t.store||t.layers?t.filesystem.toStoreOverlaySnapshot?.():void 0;U=!(!!ut?.fork&&WebAssembly.Module.exports(i).some(P=>P.name==="asyncify_start_unwind")||a.some(P=>P.name==="SYS_browser_spawn"||P.name==="SYS_browser_spawn_confined_v1")),v=await(U?tn.createInThread:tn.create)(g??t.filesystem.toSnapshot(),{...t.store?{store:t.store}:{},...t.layers?{layers:t.layers}:{},...t.privateRoots?{privateRoots:t.privateRoots}:{},memory:X,sharedPipes:ue,...n?{filesystemPolicy:n}:{},cwd:t.cwd??"/",executablePath:dt,pid:b,...t.filesystemUpdatePort?{updatePort:t.filesystemUpdatePort}:{},...t.fileLocks?{fileLocks:t.fileLocks}:{},...t.fileCoherence?{fileCoherence:t.fileCoherence}:{}})}if(n&&Te&&!v&&!K)throw new Error("Confined WALI threads require the shared filesystem owner.");const ke=K??v?.filesystem()??t.filesystem,he=()=>{v&&t.filesystem?.replaceSnapshot&&t.filesystem.replaceSnapshot(v.snapshot())},oe=new Kn({...K||v?{descriptorState:ue}:{descriptors:fe},...n?{filesystemPolicy:n}:{},...ke?{filesystem:ke}:{},cwd:t.cwd??"/",stdin:d,executablePath:dt,memory:V,emit:ve,stdioAliasRegistry:Se,pid:b,...!v&&t.fileLocks?{fileLocks:t.fileCoherence?new Mh(new Qe(t.fileLocks.channel),new _h(t.fileCoherence),ke):new Qe(t.fileLocks.channel),lockOwner:t.fileLocks.owner}:{},...v?{specialDescriptorMinimum:1e4,descriptorMaximum:19999}:{},...!v&&!K&&t.privateRoots?{privateRoots:t.privateRoots.map(g=>`/${g.split("/").filter(Boolean).join("/")}`)}:{},...t.onDiagnostic?{onDiagnostic:t.onDiagnostic}:{}}),He=oe.imports(),et=oe.writeEnvironmentFile(t.env??{},b),ne=K??v?.filesystem(),Ye=ne?new Kf(ne,Se,ue,V):void 0,xe=new Hl(V,(g,N,P)=>Ye?.readForMapping(g,N,P)??oe.readForMapping(g,N,P),nn,g=>Ye?.mappingPath(g)??oe.mappingPath(g),(g,N,P)=>Ye?.writeForMapping(g,N,P)??oe.writeForMapping(g,N,P),mt,t.onDiagnostic),tt=new Fc(new hs(L),V,()=>W?.exports.__indirect_function_table,()=>Number(xe.imports().SYS_mmap(0,4096,3,34,-1,0)),Bc(()=>W?.exports,V)),be=t.threadPoolSize??18,sn=new rf(V,b,d,O,t.terminal,be,()=>xe.growAhead()),Mr=U?v?.doorbell():void 0;Ui(Mr?{pump:()=>v.pump(!0),doorbell:Mr}:void 0);let on=!1;(t.network||ut)&&(se=await ai.create(t.network,ue,d instanceof Xs?d.buffer:void 0,Se.buffer,L));const Ee=se?new $f(V,se.createChannel(),tt):void 0,nr=new ah(V,ue,ne?void 0:fe,ne),Qn=new ff(V,oe,(g,N)=>nr.pollDescriptor(g,N)??(Ee?.isNetworkFd(g)?Ee.pollFd(g,N):void 0)),qn=new Of(V,oe),an=oe.imports(),sr=Ye?.imports(an)??an,Wt=nr.imports({...qn.imports(),...sr}),cn=Qn.imports(),$t=sn.imports(),zt=t.forkState?.parentPid??t.parentPid??1,De=new Int32Array(t.childPidAllocator??new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT));t.childPidAllocator||Atomics.store(De,0,Math.max(b+1,1e4));const ir=g=>{if(!Number.isSafeInteger(g)||g<=0||g>=T().byteLength)throw new WebAssembly.RuntimeError("WALI process string pointer is out of bounds.");const N=T().indexOf(0,g);if(N<0||N-g>1024*1024)throw new WebAssembly.RuntimeError("WALI process string is not terminated.");return Vr.decode(T().slice(g,N))},or=g=>{if(g===0)return[];const N=[];for(let P=0;P<65536;P+=1){Er(V(),g+P*4,4);const $=me().getUint32(g+P*4,!0);if($===0)return N;N.push(ir($))}throw new WebAssembly.RuntimeError("WALI process string array is not terminated.")},yt=(g,N)=>{const P=nr.exportBrowserProcessPipe(g)??oe.exportBrowserProcessPipe(g);if(!(!P||P.role!==N))return Ma(P)},es=(g,N,P)=>{if(!Ee)return-10n;if(N!==0&&(N<0||N+4>T().byteLength))return-14n;const{result:$,process:z}=Ee.waitChild(g,P,tt.mask);if($<=0)return BigInt($);const te=xf(z);if(te){v&&v.filesystem().importPeerPatch(te),t.filesystem&&gf(t.filesystem,te);const ye=t.filesystem?.toSnapshot?.();ye&&t.browserProcess?.restore?.(ye)}return N!==0&&me().setInt32(N,(Atomics.load(new Int32Array(z.control),1)&255)<<8,!0),BigInt($)},ln=(g,N)=>{const[P,$,z,te,ye,ae,Me]=g;if(!t.browserProcess)return-38;const kt=Pr(1,[ye,ae,Me]);if(kt!==void 0)return kt;N&&(N=er(N));const xt=r;if(xt){if(t.browserProcess.filesystemPolicyVersion!==1)return-95;N=Oc(xt,N)}const Mt=ir(Number(P)),_e=or(Number($));_e.length===0&&_e.push(Mt);const lr={};for(const gt of or(Number(z))){const Lt=gt.indexOf("=");Lt>0&&(lr[gt.slice(0,Lt)]=gt.slice(Lt+1))}const fr=Atomics.add(De,0,1),hr={control:new SharedArrayBuffer(8*Int32Array.BYTES_PER_ELEMENT),response:new SharedArrayBuffer(Zs),snapshotApplied:!1},Fe=yt(Number(ye),"reader"),st=yt(Number(ae),"writer"),pt=yt(Number(Me),"writer");let Le;try{const gt=Ee.registerChild(fr,hr);if(gt<0)throw new Error(`Child registration failed: ${gt}`);return ne?.prepareSpawn(),he(),Le=ne?.copyForExecChannel([Number(ye),Number(ae),Number(Me)]),t.browserProcess.spawn({pid:fr,parentPid:b,childPidAllocator:De.buffer,...Le?{descriptorTable:Le}:{},...N?{filesystemPolicy:N}:{},executablePath:Mt,argv:_e,env:lr,...Number(z)===0?{inheritEnvironment:!0}:{},cwd:Number(te)===0?oe.currentWorkingDirectory():ir(Number(te)),control:hr.control,response:hr.response,...Fe?{stdin:Fe}:{},...st?{stdout:st}:{},...pt?{stderr:pt}:{}}),fr}catch{return Le?.releasePort?.postMessage(!0),Ee.forgetChild(fr),Fe&&Zr(Fe),st&&Zr(st),pt&&Zr(pt),-5}};let ee=t.forkState?.asyncifyData??0,rt=!1,Ve=!!t.forkState,wt=0,Lr=!1;const Ge=(g,...N)=>{const P=W?.exports[g];if(typeof P!="function")throw new Error(`Missing ${g}; build the module with the Binaryen Asyncify stage.`);P(...N)},Ht=()=>ne?.currentWorkingDirectory()??oe.currentWorkingDirectory(),Pr=(g,N=[])=>{const P=W?.exports.__wali_private_tree_release;if(typeof P!="function")return;const $=Number(P(g,Number(N[0]??-1),Number(N[1]??-1),Number(N[2]??-1)));return $<0?$:void 0},ts=()=>{if(typeof W?.exports.asyncify_start_unwind!="function")return Lr||t.onDiagnostic?.("[WALI] SYS_fork answers -ENOSYS: module lacks the Binaryen Asyncify build stage (--asyncify --pass-arg=asyncify-imports@wali.SYS_fork)."),Lr=!0,-38n;if(Ve)return Ge("asyncify_stop_rewind"),Ve=!1,BigInt(wt);if(!t.browserProcess?.fork||!ne||!Ee)return-38n;const g=Pr(0);return g!==void 0?BigInt(g):(rt=!0,me().setUint32(ee,ee+8,!0),Ge("asyncify_start_unwind",ee),0n)},fn=(g,N,P)=>{if(!t.forkState||!t.browserProcess||!ne)return-38n;const $=Pr(0);if($!==void 0)return BigInt($);const z=ir(g),te=z.startsWith("/")?z:`${Ht()}/${z}`;if(!ke?.existsSync(te))return-2n;if(!ke.statSync(te).isFile())return-13n;const ye=P===0?{...t.env}:{};for(const Mt of or(P)){const _e=Mt.indexOf("=");_e>0&&(ye[Mt.slice(0,_e)]=Mt.slice(_e+1))}ne.prepareSpawn();const ae=ne.copyForExecChannel([0,1,2]),Me=yt(0,"reader"),kt=yt(1,"writer"),xt=yt(2,"writer");throw t.browserProcess.spawn({pid:b,parentPid:zt,childPidAllocator:De.buffer,executablePath:te,argv:or(N),env:ye,cwd:Ht(),descriptorTable:ae,control:t.forkState.control,response:t.forkState.response,...n?{filesystemPolicy:n}:{},...Me?{stdin:Me}:{},...kt?{stdout:kt}:{},...xt?{stderr:xt}:{}}),new Jo},Ae={...{__init:()=>0,__deinit:()=>0,__proc_exit:g=>Oe(Number(g)),__cl_get_argc:()=>p.length,__cl_get_argv_len:g=>p[Number(g)]?.byteLength??0,__cl_copy_argv:(g,N)=>{const P=p[Number(N)];return P?(pe(Number(g),P),0):-1},__get_init_envfile:(g,N)=>et?oe.copyCString(Number(g),et,Number(N)):0,SYS_write:(g,N,P)=>ve(Number(g),j(Number(N),Number(P))),SYS_writev:(g,N,P)=>{let $=0n;for(let z=0;z<Number(P);z+=1){const te=Number(N)+z*8;Er(V(),te,8);const ye=me().getUint32(te,!0),ae=me().getUint32(te+4,!0),Me=ve(Number(g),j(ye,ae));if(Me<0n)return Me;$+=Me}return $},SYS_exit:g=>Oe(Number(g),"SYS_exit"),SYS_exit_group:g=>Oe(Number(g),"SYS_exit_group"),SYS_getpid:()=>BigInt(b),SYS_getppid:()=>BigInt(zt),SYS_gettid:()=>BigInt(b),SYS_getuid:()=>1000n,SYS_geteuid:()=>1000n,SYS_getgid:()=>1000n,SYS_getegid:()=>1000n,SYS_set_tid_address:()=>BigInt(b),SYS_sched_yield:()=>0n,SYS_sched_setscheduler:()=>0n,SYS_tkill:(g,N)=>Ie(Number(N)),...wh(V,()=>t.codec?.version===1,()=>D),SYS_browser_spawn:(...g)=>ln(g),SYS_browser_spawn_confined_v1:Dc(V,()=>t.browserProcess?.filesystemPolicyVersion===1,ln),SYS_fork:ts,SYS_execve:(g,N,P)=>fn(Number(g),Number(N),Number(P)),SYS_wait4:(g,N,P)=>{for(;;){const $=es(Number(g),Number(N),Number(P));if($!==-4n||!tt.deliver(!0))return $}},SYS_pidfd_open:()=>-38n,SYS_kill:(g,N)=>{if(Number(g)===b||Number(g)===0)return Ie(Number(N));const P=Math.abs(Number(g));return Ee?.hasChild(P)?(t.browserProcess?.kill?.(P,Number(N)),0n):-3n},SYS_setpgid:()=>0n,SYS_getpgid:g=>BigInt(Number(g)===0?b:Math.abs(Number(g))),__wasm_thread_spawn:(g,N)=>{const P=de?.spawn(Number(g),Number(N),tt.mask)??-11;if(P===-11&&!on){on=!0;const $=`[WALI] pthread_create answered -EAGAIN: all ${be} worker slots are in use. The pool is the process's whole thread budget and does not grow, so this is a QUOTA, not a cpu count -- sysconf(_SC_NPROCESSORS_ONLN) answers ${sn.reportedCpuCount()} here and a library that opens more than one pool from that number wants a multiple of it. Raise the program's requirements.workers, or state the library's concurrency.`;console.error($),t.onDiagnostic?.($)}return P},SYS_clock_gettime:(g,N)=>{const P=Ch(Number(g));return P===void 0?-vh:(Uh(me(),Number(N),P),0n)},SYS_gettimeofday:g=>{if(Number(g)!==0){const N=BigInt(Math.floor(ge()*1e3));Er(V(),Number(g),16),me().setBigInt64(Number(g),N/1000000n,!0),me().setBigInt64(Number(g)+8,N%1000000n,!0)}return 0n},SYS_getrandom:(g,N)=>{const P=T().subarray(Number(g),Number(g)+Number(N));return Er(V(),Number(g),Number(N)),Wh(P),BigInt(P.byteLength)},...xe.imports(),...$t,...tt.imports(),...Wt,...Ee?Ee.imports({...Wt,...cn}):cn,SYS_ioctl:(g,N,P)=>nr.ioctl(Number(g),Number(N))??oe.ioctl(Number(g),Number(N))??$t.SYS_ioctl(g,N,P),SYS_prctl:(g,...N)=>Number(g)!==da?0n:ne?ne.syscall("SYS_prctl",[g,...N]):He.SYS_prctl(g,...N)},...t.imports};let Rr=0;if(Ae.SYS_select??=bh(V,(g,N,P)=>Ae.SYS_poll(g,N,P),()=>Rr||=Number(xe.imports().SYS_mmap(0,Sh,3,34,-1,0))),U&&Ye)for(const[g,N]of Object.entries(Ye.ownedFileImports(Ae)))t.imports?.[g]||(Ae[g]=N);const ar={};for(const g of a){const N=Ae[g.name]??Th(g.name,t.onDiagnostic),P=(!ne||U)&&Yh.has(g.name),$={calls:0,ms:0,sampled:P};M.set(g.name,$),ar[g.name]=(...z)=>{t.onSyscall?.(g.name,z),U&&v.pump();const te=!P||($.calls&Qo-1)===0,ye=te?performance.now():0;try{const ae=N(...z);return t.onSyscallResult?.(g.name,ae),tt.deliver(ae===-4n),ae}finally{$.calls+=1,te&&($.ms+=(performance.now()-ye)*(P?Qo:1))}}}const nt={...X?{memory:X}:{},_Unwind_Backtrace:()=>5,_Unwind_FindEnclosingFunction:g=>g,_Unwind_GetCFA:()=>0};if(W=await WebAssembly.instantiate(i,{wali:ar,env:nt}),t.forkState){T().set(new Uint8Array(t.forkState.memory));for(const[g,N]of Object.entries(t.forkState.globals)){const P=W.exports[g];if(!(P instanceof WebAssembly.Global))throw new Error(`Fork snapshot global ${g} is not exported.`);P.value=N}xe.restoreFork(t.forkState.mappings),$t.SYS_umask(t.forkState.umask)}else if(typeof W.exports.asyncify_start_unwind=="function"){const g=W.exports.__stack_pointer;if(!(g instanceof WebAssembly.Global))throw new Error("Asyncify fork requires --export=__stack_pointer at link.");const N=Number(g.value);if(N<=0)throw new Error("Asyncify fork requires a nonempty module stack.");ee=V().buffer.byteLength,V().grow(Math.ceil((N+8)/65536)),me().setUint32(ee+4,ee+8+N,!0)}if(t.codec?.version===1)try{ie=await ci.create(V()),D=new yh(ie.createChannel())}catch(g){console.warn("[WALI] the codec bridge is unavailable:",g),ie=void 0,D=void 0}if(Te){if(!X)throw new Error("A threaded WALI module must be linked with --import-memory so browser workers can share its process memory.");const g=t.memoryLayout??(e instanceof WebAssembly.Module?void 0:Xn(e instanceof Uint8Array?e:new Uint8Array(e)));de=new wf({module:i,memory:X,onDemand:g?.passiveData===!0,mmapCursor:xe.allocatorControl(),sharedMmapRegistry:mt,fatalState:O.buffer,imports:o,size:be,pid:b,executablePath:dt,argv:y,cwd:oe.currentWorkingDirectory(),stdioAliasRegistry:Se.buffer,sharedPipes:ue,signals:L,childPidAllocator:De.buffer,...r?{inheritedFilesystemPolicy:r}:{},...t.browserProcessPorts?{browserProcessPorts:t.browserProcessPorts}:{},...t.browserProcess?.filesystemPolicyVersion===1?{childFilesystemPolicyVersion:1}:{},...t.threadOutputPorts?{outputPorts:t.threadOutputPorts}:{},...d instanceof Xs?{stdin:d.buffer}:{},terminal:t.terminal===!0,onStdout:N=>{ve(1,N)},onStderr:N=>{ve(2,N)},...se?{network:se}:{},...ne?{filesystem:ne}:{},...ie?{codec:ie}:{}}),await de.initialize()}const hn=W.exports._start;if(typeof hn!="function")throw new Error("WALI module does not export _start.");U&&v?.closePort(),k=performance.now();let cr=0,It=!1;try{try{for(Ve&&Ge("asyncify_start_rewind",ee);hn(),!!rt;){Ge("asyncify_stop_unwind"),rt=!1;const g=t.memoryLayout??(e instanceof WebAssembly.Module?void 0:Xn(e instanceof Uint8Array?e:new Uint8Array(e)));if(!g)throw new Error("Fork requires the module's imported memory layout.");const N={};for(const[ye,ae]of Object.entries(W.exports))if(ae instanceof WebAssembly.Global)try{ae.value=ae.value,N[ye]=ae.value}catch{}const P=new SharedArrayBuffer(8*Int32Array.BYTES_PER_ELEMENT),$=new SharedArrayBuffer(Zs);wt=Atomics.add(De,0,1);const z=Ee.registerChild(wt,{control:P,response:$});if(z<0)throw new Error(`Fork child registration failed: ${z}`);const te=Number($t.SYS_umask(0));$t.SYS_umask(te),t.onDiagnostic?.(`[WALI] fork snapshot: ${V().buffer.byteLength} bytes, Asyncify stack ${me().getUint32(ee,!0)-ee-8} bytes.`),t.browserProcess.fork({module:i,memoryLayout:g,pid:wt,control:P,response:$,descriptorTable:ne.copyForForkChannel(),childPidAllocator:De.buffer,argv:y,env:{...t.env},cwd:Ht(),executablePath:dt,...n?{filesystemPolicy:n}:{},forkState:{control:P,response:$,memory:T().slice().buffer,globals:N,allocator:xe.allocatorControl().slice(0),mappings:xe.forkSnapshot(),asyncifyData:ee,umask:te,parentPid:b}}),Ve=!0,Ge("asyncify_start_rewind",ee)}}catch(g){if(g instanceof Jo)It=!0;else if(g instanceof Zo||g instanceof Sa)cr=g.code;else{if(g instanceof Ca)throw g;{const N=g instanceof Error?g.stack??g.message:String(g),P=Atomics.load(O,1),$=de?.diagnostics(P>=0?P:void 0)??[];throw new Error(`${N}
|
|
11
|
+
`)}`]})}terminate(){this.coordinator?.terminate(),this.coordinator=void 0;for(const e of this.slots)e.worker?.terminate();this.slots.length=0}}function pf(s){if(!Number.isSafeInteger(s)||s<1||s>64)throw new Error("WALI threadPoolSize must be an integer between 1 and 64.");return s}function ft(s){const e=s.toBase64;if(typeof e=="function")return e.call(s);let t="";for(let r=0;r<s.byteLength;r+=32768)t+=String.fromCharCode(...s.subarray(r,r+32768));return btoa(t)}function tr(s){const e=Uint8Array.fromBase64;if(typeof e=="function")return e(s);const t=atob(s),r=new Uint8Array(t.length);for(let n=0;n<t.length;n+=1)r[n]=t.charCodeAt(n);return r}function gf(s,e,t){const{appended:r,superseded:n}=t?Sf(s,e,t):{appended:new Map,superseded:new Set},i=[...e.removed].sort((a,c)=>Pn(c)-Pn(a));for(const a of i)s.existsSync(a)&&(s.statSync(a).isDirectory()?s.rmdirSync(a):s.unlinkSync(a));const o=[...e.files].filter(a=>!n.has(a.path)).sort((a,c)=>Pn(a.path)-Pn(c.path));for(const a of o){if(a.type==="directory")s.existsSync(a.path)&&!s.statSync(a.path).isDirectory()&&s.unlinkSync(a.path),s.mkdirSync(a.path,{recursive:!0});else if(rr(a)){s.existsSync(a.path)&&s.statSync(a.path).isDirectory()&&s.rmdirSync(a.path);const c=a.path.slice(0,a.path.lastIndexOf("/"))||"/";c!=="/"&&!s.existsSync(c)&&s.mkdirSync(c,{recursive:!0});const f=s.existsSync(a.path)?s.statSync(a.path).mode:void 0,d=f!==void 0&&(f&128)===0;d&&s.chmodSync?.(a.path,f&4095|128),s.writeFileSync(a.path,r.get(a.path)??en(a)),d&&a.mode===void 0&&s.chmodSync?.(a.path,f&4095)}else if(!s.existsSync(a.path)||s.statSync(a.path).isDirectory())continue;a.mode!==void 0&&s.chmodSync?.(a.path,a.mode),a.mtimeMs!==void 0&&s.utimesSync?.(a.path,new Date(a.mtimeMs),new Date(a.mtimeMs))}}function Sf(s,e,t){const r=new Map,n=new Set,i=t.byPath,o=i instanceof Map?i:new Map(t.files.map(f=>[f.path,f])),a=new Map(e.files.map(f=>[f.path,f])),c=new Set([...e.files.map(f=>f.path),...e.removed]);for(const f of c){const d=o.get(f),y=Af(s,f);if(d!==void 0&&Fs(d,a.get(f))||y===void 0&&a.get(f)!==void 0)continue;const p=a.get(f);if(!(y!==void 0&&p!==void 0&&p.type===y.type&&(J(p).mtimeMs??0)>(J(y).mtimeMs??0))&&!(d!==void 0&&y!==void 0&&d.type===y.type&&(J(y).mtimeMs??0)<(J(d).mtimeMs??0))&&!Fs(d,y)&&!Fs(a.get(f),y)){if(Ef(d,y,a.get(f)))continue;const b=bf(s,f,d,y,a.get(f),t.bytesOf?.bind(t));if(b){r.set(f,b);continue}const S=a.get(f);if(d!==void 0&&y!==void 0&&S!==void 0&&S.type===y.type&&(J(S).mtimeMs??0)>=(J(d).mtimeMs??0)&&(J(y).mtimeMs??0)>(J(S).mtimeMs??0)&&(J(y).mtimeMs??0)>(J(d).mtimeMs??0)){n.add(f);continue}throw new Error(`Browser filesystem write conflict at ${f}. ${JSON.stringify({base:Ts(d),current:Ts(y),proposed:Ts(a.get(f))})}`)}}return{appended:r,superseded:n}}function bf(s,e,t,r,n,i){if(t?.type!=="file"||r?.type!=="file"||n?.type!=="file"||!rr(n)||!s.readFileSync||J(r).mode!==J(n).mode)return;const o=rr(t)?en(t):i?.(e);if(!o||o.length===0)return;const a=en(n),c=s.readFileSync(e),f=typeof c=="string"?new TextEncoder().encode(c):c,d=p=>p.length>=o.length&&Ia(p.subarray(0,o.length),o);if(a.length<=o.length||!d(a)||!d(f))return;const y=new Uint8Array(f.length+a.length-o.length);return y.set(f,0),y.set(a.subarray(o.length),f.length),y}function Ts(s){return s?{type:s.type,...J(s)}:null}function Ef(s,e,t){return e?.type!=="directory"||t?.type!=="directory"?!1:s===void 0?J(e).mode===J(t).mode:J(e).mode===J(t).mode&&s.type==="directory"&&J(s).mode===J(e).mode}function ko(s,e,t={}){const r=new Map(s.files.map(i=>[i.path,i])),n=new Map(e.files.map(i=>[i.path,i]));return{files:e.files.filter(i=>{const o=r.get(i.path);return i.path==="/"&&!o?!1:!o||o.type!==i.type||!Na(o,i)||t.written===!0&&i.type==="file"&&!rr(o)&&rr(i)||J(o).mode!==J(i).mode||J(o).mtimeMs!==J(i).mtimeMs}),removed:s.files.flatMap(i=>n.has(i.path)?[]:[i.path])}}function Pn(s){let e=1;for(let t=0;t<s.length;t+=1)s.charCodeAt(t)===47&&(e+=1);return e}function Af(s,e){if(!s.existsSync(e))return;const t=s.statSync(e),r={...t.mode!==void 0?{mode:t.mode}:{},...t.mtimeMs!==void 0?{mtimeMs:t.mtimeMs}:{}};return t.isDirectory()?{path:e,type:"directory",...r}:{path:e,type:"file",...t.size!==void 0?{size:t.size}:{},...r}}function Fs(s,e){return s===void 0?e===void 0:e!==void 0&&s.type===e.type&&Na(s,e)&&J(s).mode===J(e).mode&&J(s).mtimeMs===J(e).mtimeMs}function J(s){const e=s;return{...e.mode===void 0?{}:{mode:e.mode&4095},...e.mtimeMs===void 0?{}:{mtimeMs:e.mtimeMs}}}function Na(s,e){return s.type!=="file"||e.type!=="file"?!0:s.content!==void 0&&e.content!==void 0?s.content===e.content:rr(s)&&rr(e)?Ia(en(s),en(e)):xo(s)===xo(e)}function xo(s){if(s.size!==void 0)return s.size;if(s.bytes!==void 0)return s.bytes.byteLength;if(s.content===void 0)return;const e=s.content.endsWith("==")?2:s.content.endsWith("=")?1:0;return Math.floor(s.content.length*3/4)-e}function rr(s){return s!==void 0&&(s.bytes!==void 0||s.content!==void 0)}function en(s){return s.bytes??(s.content===void 0?void 0:tr(s.content))}function Ia(s,e){if(s===e)return!0;if(s.byteLength!==e.byteLength)return!1;let t=0;if(s.byteOffset%4===0&&e.byteOffset%4===0){const r=s.byteLength>>>2,n=new Uint32Array(s.buffer,s.byteOffset,r),i=new Uint32Array(e.buffer,e.byteOffset,r);for(let o=0;o<r;o+=1)if(n[o]!==i[o])return!1;t=r<<2}for(;t<s.byteLength;t+=1)if(s[t]!==e[t])return!1;return!0}const Mo=0,Lo=1,ht=2,Ir=3,kr=4,ka=5,xa=6,Zs=16*1024*1024,_f=1024*1024;function Nf(){const s=new SharedArrayBuffer(8*Int32Array.BYTES_PER_ELEMENT),e=new SharedArrayBuffer(_f),t=new Int32Array(s);return Atomics.store(t,Ir,1),Atomics.store(t,kr,1),{reader:{control:s,payload:e,role:"reader"},writer:{control:s,payload:e,role:"writer"}}}function Ma(s){const e=xr(s);return Atomics.add(e,s.role==="reader"?Ir:kr,1),s}function Zr(s){const e=xr(s),t=s.role==="reader"?Ir:kr;Atomics.sub(e,t,1)<=1&&Atomics.store(e,t,0),Atomics.add(e,s.role==="reader"?xa:ka,1),Atomics.notify(e,ht)}function La(s,e){const t=xr(s),r=Atomics.load(t,ht);let n=0;return s.role==="reader"?(e&1&&(r>0||Atomics.load(t,kr)===0)&&(n|=1),Atomics.load(t,kr)===0&&(n|=16)):(e&4&&Atomics.load(t,Ir)>0&&r<kf(s)&&(n|=4),Atomics.load(t,Ir)===0&&(n|=16)),n}function oi(s,e){if(s.role!=="reader")return-9n;if(e===0)return new Uint8Array;const t=xr(s),r=Ra(s),n=Atomics.load(t,ht);if(n===0)return Atomics.load(t,kr)===0?new Uint8Array:-11n;const i=Math.min(Math.max(0,e),n),o=Atomics.load(t,Mo),a=Math.min(i,r.byteLength-o),c=new Uint8Array(i);return c.set(r.subarray(o,o+a)),a<i&&c.set(r.subarray(0,i-a),a),Atomics.store(t,Mo,(o+i)%r.byteLength),Atomics.sub(t,ht,i),i>0&&Atomics.add(t,xa,1),Atomics.notify(t,ht),c}function If(s,e){const t=xr(s);for(;;){const r=oi(s,e);if(r!==-11n)return r;Nr(t,ht,0,50)}}function Pa(s,e){if(s.role!=="writer")return-9n;const t=xr(s),r=Ra(s);let n=0;for(;n<e.byteLength;){if(Atomics.load(t,Ir)===0)return n>0?BigInt(n):-32n;const i=Atomics.load(t,ht),o=r.byteLength-i;if(o===0){Nr(t,ht,i,50);continue}const a=Atomics.load(t,Lo),c=Math.min(e.byteLength-n,o,r.byteLength-a);r.set(e.subarray(n,n+c),a),Atomics.store(t,Lo,(a+c)%r.byteLength),Atomics.add(t,ht,c),Atomics.add(t,ka,1),Atomics.notify(t,ht),n+=c}return BigInt(n)}const Po=new WeakMap;function xr(s){const e=s.controlOffset??0;let t=Po.get(s.control);t||(t=new Map,Po.set(s.control,t));let r=t.get(e);return r||(r=new Int32Array(s.control,e,8),t.set(e,r)),r}function kf(s){return s.payloadLength??s.payload.byteLength-(s.payloadOffset??0)}function Ra(s){const e=s.payloadOffset??0,t=s.payloadLength??s.payload.byteLength-e;return new Uint8Array(s.payload,e,t)}function xf(s){const e=Atomics.load(new Int32Array(s.control),2);if(e<=0||e>s.response.byteLength)return;const t=Uint8Array.from(new Uint8Array(s.response,0,e));return JSON.parse(new TextDecoder().decode(t))}const Mf=1,Lf=15,Pf=1,Rf=97n,vf=93n,Tf=11n,Ff=32n,Ro=1,vo=4,Bf=16;class Of{memory;descriptors;constructor(e,t){this.memory=e,this.descriptors=t}imports(){return{SYS_socketpair:(e,t,r,n)=>this.socketpair(Number(e),Number(t),Number(r),Number(n)),SYS_pipe:e=>this.pipe(Number(e),0),SYS_pipe2:(e,t)=>this.pipe(Number(e),Number(t))}}pipe(e,t){if((t&-526337)!==0)return-22n;if(!Number.isSafeInteger(e)||e<0||e+8>this.memory().buffer.byteLength)return-14n;const r=Nf(),n=this.descriptors.allocateSpecial(this.pipeEndpoint(r.reader)),i=this.descriptors.allocateSpecial(this.pipeEndpoint(r.writer)),o=new DataView(this.memory().buffer);return o.setInt32(e,n,!0),o.setInt32(e+4,i,!0),0n}pipeEndpoint(e){return{browserProcessPipe:e,read:t=>oi(e,t),write:t=>Pa(e,t),poll:t=>La(e,t),fcntl:t=>t===3?0x800n:[1,2,4].includes(t)?0n:-22n,duplicate:t=>(Ma(e),BigInt(this.descriptors.allocateSpecial(this.pipeEndpoint(e),t))),close:()=>Zr(e)}}socketpair(e,t,r,n){if(e!==Mf)return-Rf;if((t&Lf)!==Pf||r!==0)return-vf;if(!Number.isSafeInteger(n)||n<0||n+8>this.memory().buffer.byteLength)return-14n;const i={chunks:[],byteLength:0,closed:!1,peerClosed:!1,references:1},o={chunks:[],byteLength:0,closed:!1,peerClosed:!1,references:1};i.peer=o,o.peer=i;const a=this.descriptors.allocateSpecial(this.endpoint(i)),c=this.descriptors.allocateSpecial(this.endpoint(o)),f=new DataView(this.memory().buffer);return f.setInt32(n,a,!0),f.setInt32(n+4,c,!0),0n}endpoint(e){return{read:t=>Yf(e,t),write:t=>Df(e,t),poll:t=>Cf(e,t),fcntl:t=>t===3?0x802n:[1,2,4].includes(t)?0n:-22n,duplicate:t=>{const r=this.descriptors.allocateSpecial(this.endpoint(e),t);return e.references+=1,BigInt(r)},close:()=>{e.references-=1,!(e.references>0||e.closed)&&(e.closed=!0,e.peer&&(e.peer.peerClosed=!0))}}}}function Yf(s,e){if(s.closed)return-9n;if(e<0)return-22n;if(s.byteLength===0)return s.peerClosed?new Uint8Array:-Tf;const t=new Uint8Array(Math.min(e,s.byteLength));let r=0;for(;r<t.byteLength;){const n=s.chunks[0],i=Math.min(n.byteLength,t.byteLength-r);t.set(n.subarray(0,i),r),r+=i,s.byteLength-=i,i===n.byteLength?s.chunks.shift():s.chunks[0]=n.subarray(i)}return t}function Df(s,e){if(s.closed)return-9n;const t=s.peer;if(!t||t.closed)return-Ff;const r=e.slice();return t.chunks.push(r),t.byteLength+=r.byteLength,BigInt(r.byteLength)}function Cf(s,e){let t=s.peerClosed?Bf:0;return e&Ro&&(s.byteLength>0||s.peerClosed)&&(t|=Ro),e&vo&&!s.peerClosed&&(t|=vo),t}const Uf=2e4,va=256*1024;var H;(function(s){s[s.Socket=1]="Socket",s[s.Connect=2]="Connect",s[s.Send=3]="Send",s[s.Receive=4]="Receive",s[s.Close=5]="Close",s[s.Fcntl=6]="Fcntl",s[s.Poll=7]="Poll",s[s.Shutdown=8]="Shutdown",s[s.Duplicate=9]="Duplicate",s[s.SocketName=10]="SocketName",s[s.EpollControl=11]="EpollControl",s[s.EpollWait=12]="EpollWait",s[s.EpollCreate=13]="EpollCreate",s[s.EventFd=14]="EventFd",s[s.SocketPair=15]="SocketPair",s[s.TimerFdCreate=16]="TimerFdCreate",s[s.TimerFdSetTime=17]="TimerFdSetTime",s[s.Bind=18]="Bind",s[s.Listen=19]="Listen",s[s.Accept=20]="Accept",s[s.ChildRegister=21]="ChildRegister",s[s.ChildForget=22]="ChildForget",s[s.ChildWait=23]="ChildWait",s[s.ChildExists=24]="ChildExists",s[s.PidFdOpen=25]="PidFdOpen",s[s.PollMany=26]="PollMany"})(H||(H={}));const Bs=new Map;function Ta(s,e){const t=Bs.get(s);Bs.delete(s);const r=t??e();return Bs.set(s,e()),r}const Tt=9n,we=22n,To=16,Et=38n;class ai{worker;constructor(e){this.worker=e}static async create(e,t,r,n,i){if(typeof Worker>"u"||typeof SharedArrayBuffer>"u")throw new Error("WALI networking requires Web Workers and SharedArrayBuffer.");const o=[...new Set(e?.allowedHosts.map(f=>f.toLowerCase())??[])];if(e&&(!e.loopbackPort&&o.length===0||o.some(f=>!/^[a-z0-9.-]+$/u.test(f))))throw new Error("WALI networking requires a loopback attachment or at least one valid hostname.");if(e&&(!Number.isSafeInteger(e.maxConnections)||e.maxConnections<1||e.maxConnections>1024||!Number.isSafeInteger(e.maxBytes)||e.maxBytes<1024||e.maxBytes>1024*1024*1024))throw new Error("WALI networking requires bounded connection and byte quotas.");const a=Ta("network",()=>qr(new Worker(new URL("/assets/network-worker-DuuxEt8T.js",import.meta.url),{type:"module",name:"wali-network"}))),c=new ai(a);return await new Promise((f,d)=>{const y=p=>{p.data.kind==="ready"&&(a.removeEventListener("message",y),f()),p.data.kind==="error"&&(a.removeEventListener("message",y),d(new Error(p.data.message)))};a.addEventListener("message",y),a.addEventListener("error",p=>d(p.error??new Error(p.message)),{once:!0}),a.postMessage({kind:"initialize",allowedHosts:o,relayUrl:e?.relayUrl??"/api/wali/tcp",maxConnections:e?.maxConnections??0,maxBytes:e?.maxBytes??0,...t?{sharedPipes:t}:{},...r?{stdin:r}:{},...n?{stdioAliasRegistry:n}:{},...i?{signals:i}:{},...e?.loopbackPort?{loopbackPort:e.loopbackPort}:{}},e?.loopbackPort?[e.loopbackPort]:[])}).catch(f=>{throw a.terminate(),f}),c}createChannel(){const e=new MessageChannel,t={port:e.port1,control:new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT*16),payload:new SharedArrayBuffer(va)};return this.worker.postMessage({kind:"attach",port:e.port2,control:t.control,payload:t.payload},[e.port2]),t.port.start(),t}terminate(){this.worker.terminate()}}class Wf{channel;control;payload;nextRequestId=1;constructor(e){this.channel=e,this.control=new Int32Array(e.control),this.payload=new Uint8Array(e.payload)}call(e,t=[],r,n){if((r?.byteLength??0)>this.payload.byteLength)return{result:-Number(we),output:new Uint8Array};if(Atomics.load(this.control,0)!==0)throw new Error("Concurrent WALI network RPC on one pthread channel.");const i=this.nextRequestId;this.nextRequestId=i>=2147483645?1:i+2,this.control.fill(0),Atomics.store(this.control,1,e),Atomics.store(this.control,3,r?.byteLength??0),t.slice(0,10).forEach((d,y)=>Atomics.store(this.control,5+y,d|0)),r&&this.payload.set(r),Atomics.store(this.control,0,i),this.channel.port.postMessage(n?{requestId:i,process:n}:i);const o=Date.now()+3e4;for(;;){const d=Atomics.load(this.control,0);if(d===i+1)break;if(d!==i&&d!==-i)throw new Error(`Invalid WALI network RPC state ${d} for request ${i}.`);const y=Math.max(0,o-Date.now());if(y===0&&d===i&&Atomics.compareExchange(this.control,0,i,0)===i)return{result:-110,output:new Uint8Array};try{Nr(this.control,0,d,d===-i?void 0:y)}catch{if(Atomics.compareExchange(this.control,0,i,0)===i)return{result:-Number(Et),output:new Uint8Array}}}const a=Atomics.load(this.control,2),c=Atomics.load(this.control,4),f=this.payload.slice(0,Math.max(0,c));return Atomics.store(this.control,0,0),{result:a,output:f}}}class $f{memory;signals;client;waitBuffer;constructor(e,t,r){this.memory=e,this.signals=r,this.client=new Wf(t)}isNetworkFd(e){return e>=Uf&&!ze(e)}registerChild(e,t){return this.client.call(H.ChildRegister,[e],void 0,t).result}forgetChild(e){this.client.call(H.ChildForget,[e])}hasChild(e){return this.client.call(H.ChildExists,[e]).result===1}waitChild(e,t,r=0n){const n=this.waitBuffer??={control:new SharedArrayBuffer(32),response:new SharedArrayBuffer(Zs)};return{result:this.client.call(H.ChildWait,[e,t,Number(r&0xffffffffn),Number(r>>32n)],void 0,n).result,process:n}}imports(e={}){const t=(r,n)=>e[r]?.(...n)??-Et;return{SYS_pidfd_open:(r,n)=>BigInt(this.client.call(H.PidFdOpen,[Number(r),Number(n)]).result),SYS_dup:r=>this.isNetworkFd(Number(r))?BigInt(this.client.call(H.Duplicate,[Number(r)]).result):e.SYS_dup?.(r)??-Et,SYS_socket:(r,n,i)=>BigInt(this.client.call(H.Socket,[Number(r),Number(n),Number(i)]).result),SYS_socketpair:(r,n,i,o)=>this.socketPair(Number(r),Number(n),Number(i),Number(o)),SYS_connect:(r,n,i)=>this.withAddress(Number(r),Number(n),Number(i)),SYS_bind:(r,n,i)=>this.bind(Number(r),Number(n),Number(i),()=>t("SYS_bind",[r,n,i])),SYS_listen:(r,n)=>this.networkOr(Number(r),()=>this.client.call(H.Listen,[Number(r),Number(n)]).result,()=>t("SYS_listen",[r,n])),SYS_accept:(r,n,i)=>this.accept(Number(r),Number(n),Number(i),0,()=>t("SYS_accept",[r,n,i])),SYS_accept4:(r,n,i,o)=>this.accept(Number(r),Number(n),Number(i),Number(o),()=>t("SYS_accept4",[r,n,i,o])),SYS_send:(r,n,i,o)=>this.send(Number(r),Number(n),Number(i),Number(o)),SYS_sendto:(r,n,i,o)=>this.send(Number(r),Number(n),Number(i),Number(o)),SYS_recv:(r,n,i,o)=>this.receive(Number(r),Number(n),Number(i),Number(o)),SYS_recvfrom:(r,n,i,o,a,c)=>this.receiveFrom(Number(r),Number(n),Number(i),Number(o),Number(a),Number(c)),SYS_sendmsg:(r,n,i)=>this.sendMessage(Number(r),Number(n),Number(i)),SYS_recvmsg:(r,n,i)=>this.receiveMessage(Number(r),Number(n),Number(i)),SYS_shutdown:(r,n)=>this.networkOr(Number(r),()=>this.client.call(H.Shutdown,[Number(r),Number(n)]).result,()=>t("SYS_shutdown",[r,n])),SYS_setsockopt:(r,n,i,o,a)=>this.isNetworkFd(Number(r))?0n:t("SYS_setsockopt",[r,n,i,o,a]),SYS_getsockopt:(r,n,i,o,a)=>this.getSocketOption(Number(r),Number(o),Number(a)),SYS_getsockname:(r,n,i)=>this.getSocketName(Number(r),Number(n),Number(i)),SYS_getpeername:(r,n,i)=>this.getSocketName(Number(r),Number(n),Number(i)),SYS_close:r=>this.isNetworkFd(Number(r))?BigInt(this.client.call(H.Close,[Number(r)]).result):e.SYS_close?.(r)??-Et,SYS_read:(r,n,i)=>this.isNetworkFd(Number(r))?this.receive(Number(r),Number(n),Number(i),0):e.SYS_read?.(r,n,i)??-Et,SYS_write:(r,n,i)=>this.isNetworkFd(Number(r))?this.send(Number(r),Number(n),Number(i),0):e.SYS_write?.(r,n,i)??-Et,SYS_readv:(r,n,i)=>this.isNetworkFd(Number(r))?this.readv(Number(r),Number(n),Number(i)):e.SYS_readv?.(r,n,i)??-Et,SYS_writev:(r,n,i)=>this.isNetworkFd(Number(r))?this.writev(Number(r),Number(n),Number(i)):e.SYS_writev?.(r,n,i)??-Et,SYS_fcntl:(r,n,i)=>this.isNetworkFd(Number(r))?BigInt(this.client.call(H.Fcntl,[Number(r),Number(n),zf(i)]).result):e.SYS_fcntl?.(r,n,i)??-Et,SYS_poll:(r,n,i)=>this.poll(Number(r),Number(n),Number(i),()=>t("SYS_poll",[r,n,0])),SYS_epoll_create:r=>Number(r)>0?BigInt(this.client.call(H.EpollCreate).result):-we,SYS_epoll_create1:()=>BigInt(this.client.call(H.EpollCreate).result),SYS_eventfd:r=>BigInt(this.client.call(H.EventFd,[Number(r),0]).result),SYS_eventfd2:(r,n)=>BigInt(this.client.call(H.EventFd,[Number(r),Number(n)]).result),SYS_timerfd_create:(r,n)=>BigInt(this.client.call(H.TimerFdCreate,[Number(r),Number(n)]).result),SYS_timerfd_settime:(r,n,i,o)=>this.setTimerFd(Number(r),Number(n),Number(i),Number(o)),SYS_epoll_ctl:(r,n,i,o)=>this.epollControl(Number(r),Number(n),Number(i),Number(o),()=>t("SYS_epoll_ctl",[r,n,i,o])),SYS_epoll_wait:(r,n,i,o)=>this.epollWait(Number(r),Number(n),Number(i),Number(o),()=>t("SYS_epoll_wait",[r,n,i,o])),SYS_epoll_pwait:(r,n,i,o,a,c)=>{const f=()=>this.epollWait(Number(r),Number(n),Number(i),Number(o),()=>t("SYS_epoll_pwait",[r,n,i,o,a,c]));if(!a)return f();if(!this.signals)return-38n;const d=this.signals.mask,y=this.signals.imports().SYS_rt_sigprocmask(2,a,0,c);if(y!==0n)return y;try{const p=f();return this.signals.deliver(p===-4n),p}finally{this.signals.mask=d}}}}pollFd(e,t){return this.isNetworkFd(e)?this.client.call(H.Poll,[e,t]).result:32}bytes(){return new Uint8Array(this.memory().buffer)}view(){return new DataView(this.memory().buffer)}copy(e,t){if(e<0||t<0||e+t>this.bytes().byteLength)throw new WebAssembly.RuntimeError("WALI network memory access is out of bounds.");return this.bytes().slice(e,e+t)}networkOr(e,t,r){return this.isNetworkFd(e)?BigInt(t()):r()}withAddress(e,t,r){return this.isNetworkFd(e)?BigInt(this.client.call(H.Connect,[e],this.copy(t,r)).result):-Tt}bind(e,t,r,n){return this.isNetworkFd(e)?BigInt(this.client.call(H.Bind,[e],this.copy(t,r)).result):n()}accept(e,t,r,n,i){if(!this.isNetworkFd(e))return i();if(t!==0&&(r<=0||r+4>this.bytes().byteLength))return-we;const o=t===0?0:this.view().getUint32(r,!0);if(t!==0&&(t<0||t+o>this.bytes().byteLength))return-we;const{result:a,output:c}=this.client.call(H.Accept,[e,n]);return a<0||t===0||(this.bytes().set(c.subarray(0,o),t),this.view().setUint32(r,c.byteLength,!0)),BigInt(a)}socketPair(e,t,r,n){const{result:i,output:o}=this.client.call(H.SocketPair,[e,t,r]);if(i===0){if(n<0||n+8>this.bytes().byteLength)return-we;this.bytes().set(o,n)}return BigInt(i)}setTimerFd(e,t,r,n){if(!this.isNetworkFd(e)||r<0||r+32>this.bytes().byteLength)return-Tt;const{result:i,output:o}=this.client.call(H.TimerFdSetTime,[e,t],this.copy(r,32));if(i===0&&n!==0){if(n<0||n+32>this.bytes().byteLength||o.byteLength!==32)return-we;this.bytes().set(o,n)}return BigInt(i)}send(e,t,r,n){return this.isNetworkFd(e)?BigInt(this.client.call(H.Send,[e,n],this.copy(t,r)).result):-Tt}receive(e,t,r,n){if(!this.isNetworkFd(e))return-Tt;const{result:i,output:o}=this.client.call(H.Receive,[e,r,n]);return i>0&&this.bytes().set(o.subarray(0,i),t),BigInt(i)}receiveFrom(e,t,r,n,i,o){const a=this.receive(e,t,r,n);if(a<0n||i===0||o===0)return a;if(o<0||o+4>this.bytes().byteLength)return-we;const c=this.view().getUint32(o,!0);return this.writeDnsPeer(i,c)?(this.view().setUint32(o,16,!0),a):-we}sendMessage(e,t,r){if(!this.isNetworkFd(e)||t<0||t+28>this.bytes().byteLength)return-Tt;const n=this.view().getUint32(t+8,!0),i=this.view().getUint32(t+12,!0);if(i>1024)return-we;const o=[];let a=0;for(let d=0;d<i;d+=1){const y=n+d*8,p=this.copy(this.view().getUint32(y,!0),this.view().getUint32(y+4,!0));o.push(p),a+=p.byteLength}const c=new Uint8Array(a);let f=0;for(const d of o)c.set(d,f),f+=d.byteLength;return BigInt(this.client.call(H.Send,[e,r],c).result)}receiveMessage(e,t,r){if(!this.isNetworkFd(e)||t<0||t+28>this.bytes().byteLength)return-Tt;const n=this.view().getUint32(t+8,!0),i=this.view().getUint32(t+12,!0);if(i>1024)return-we;let o=0;for(let p=0;p<i;p+=1)o+=this.view().getUint32(n+p*8+4,!0);const{result:a,output:c}=this.client.call(H.Receive,[e,o,r]);if(a<=0)return BigInt(a);let f=0;for(let p=0;p<i&&f<a;p+=1){const b=n+p*8,S=this.view().getUint32(b,!0),I=Math.min(this.view().getUint32(b+4,!0),a-f);this.bytes().set(c.subarray(f,f+I),S),f+=I}const d=this.view().getUint32(t,!0),y=this.view().getUint32(t+4,!0);return d!==0&&this.writeDnsPeer(d,y)&&this.view().setUint32(t+4,16,!0),this.view().setUint32(t+20,0,!0),this.view().setInt32(t+24,0,!0),BigInt(a)}writeDnsPeer(e,t){return t<16||e<0||e+16>this.bytes().byteLength?!1:(this.bytes().fill(0,e,e+16),this.view().setUint16(e,2,!0),this.view().setUint16(e+2,53,!1),this.bytes().set([127,0,0,1],e+4),!0)}getSocketOption(e,t,r){return this.isNetworkFd(e)?r<=0||r+4>this.bytes().byteLength||this.view().getUint32(r,!0)<4||t<0||t+4>this.bytes().byteLength?-we:(this.view().setInt32(t,0,!0),this.view().setUint32(r,4,!0),0n):-Tt}getSocketName(e,t,r){if(!this.isNetworkFd(e))return-Tt;if(r<0||r+4>this.bytes().byteLength)return-we;const n=this.view().getUint32(r,!0),{result:i,output:o}=this.client.call(H.SocketName,[e]);return i<0?BigInt(i):n<o.byteLength||t<0||t+o.byteLength>this.bytes().byteLength?-we:(this.bytes().set(o,t),this.view().setUint32(r,o.byteLength,!0),0n)}writev(e,t,r){if(r<0||r>1024)return-we;const n=[];let i=0;for(let c=0;c<r;c+=1){const f=t+c*8,d=this.copy(this.view().getUint32(f,!0),this.view().getUint32(f+4,!0));n.push(d),i+=d.byteLength}const o=new Uint8Array(i);let a=0;for(const c of n)o.set(c,a),a+=c.byteLength;return BigInt(this.client.call(H.Send,[e,0],o).result)}readv(e,t,r){if(r<0||r>1024)return-we;let n=0;for(let c=0;c<r;c+=1)n+=this.view().getUint32(t+c*8+4,!0);const{result:i,output:o}=this.client.call(H.Receive,[e,n,0]);if(i<=0)return BigInt(i);let a=0;for(let c=0;c<r&&a<i;c+=1){const f=t+c*8,d=this.view().getUint32(f,!0),y=Math.min(this.view().getUint32(f+4,!0),i-a);this.bytes().set(o.subarray(a,a+y),d),a+=y}return BigInt(i)}poll(e,t,r,n){if(t<0||t>va/8)return-we;this.copy(e,t*8),n();const i=this.signals?.mask??0n,{result:o,output:a}=this.client.call(H.PollMany,[r,Number(i&0xffffffffn),Number(i>>32n)],this.copy(e,t*8));return o>=0&&this.bytes().set(a,e),BigInt(o)}epollControl(e,t,r,n,i){if(!this.isNetworkFd(e)&&!this.isNetworkFd(r))return i();const o=t===2?void 0:this.copy(n,To);return BigInt(this.client.call(H.EpollControl,[e,t,r],o).result)}epollWait(e,t,r,n,i){if(r<=0)return-we;const o=this.signals?.mask??0n,{result:a,output:c}=this.client.call(H.EpollWait,[e,r,n,Number(o&0xffffffffn),Number(o>>32n)]);return a===-9?i():(a>0&&this.bytes().set(c.subarray(0,a*To),t),BigInt(a))}}function zf(s){return typeof s=="bigint"?Number(BigInt.asIntN(32,s)):s|0}const Fo=-4,Os=3;class Qe{channel;control;payload;encoder=new TextEncoder;decoder=new TextDecoder("utf-8",{fatal:!0});nextRequestId=1;constructor(e){this.channel=e,this.control=new Int32Array(e.control),this.payload=new Uint8Array(e.payload)}static waited={calls:0,ms:0};request(e){const t=performance.now();try{return this.requestNow(e)}finally{Qe.waited.calls+=1,Qe.waited.ms+=performance.now()-t}}requestNow(e){if(Atomics.load(this.control,Os))return{result:Fo};const t=this.encoder.encode(JSON.stringify(e));if(t.byteLength>this.payload.byteLength)return{result:-90};if(Atomics.load(this.control,0)!==0)throw new Error("Concurrent file-lock RPC on one channel.");const r=this.nextRequestId;this.nextRequestId=r>=1073741821?1:r+2,this.control.fill(0,0,Os),this.payload.set(t),Atomics.store(this.control,1,t.byteLength),Atomics.store(this.control,0,r);try{for(this.channel.port.postMessage(r);Atomics.load(this.control,0)!==r+1;){if(Atomics.load(this.control,Os))return{result:Fo};const o=Atomics.load(this.control,0);o!==r+1&&Atomics.wait(this.control,0,o)}const n=Atomics.load(this.control,2);if(n<1||n>this.payload.byteLength)return{result:-5};const i=JSON.parse(this.decoder.decode(this.payload.slice(0,n)));return!i||!Number.isSafeInteger(i.result)?{result:-5}:i}finally{Atomics.store(this.control,0,0)}}}class Qs{channel;control;payload;encoder=new TextEncoder;decoder=new TextDecoder;nextRequestId=1;bell;wakeMemory;directSyscall(e){const t=this.channel.local;if(!(!t||e==="SYS_flock"||e==="SYS_fcntl"))return r=>{const{imports:n,errno:i}=t.handlers(),o=n[e];if(!o)throw lt(-38);let a;try{a=o(...r)}catch(c){throw lt(i(c))}return typeof a=="bigint"?a:BigInt(a??0)}}ownsLocalFile(e){const t=this.channel.local;return t!==void 0&&t.handlers().owns(e)}localHandlers(){const e=this.channel.local;return e?()=>e.handlers():void 0}wakeThrough(e){this.wakeMemory=e}constructor(e){this.channel=e,this.control=new Int32Array(e.control),this.payload=new Uint8Array(e.payload),this.bell=e.doorbell?new Int32Array(e.doorbell):void 0}attachMemory(e){this.channel.port.postMessage({memory:e})}copyForExec(e){return this.call(G.CopyForExec,{stdio:e}).process}currentWorkingDirectory(){return this.call(G.GetCwd)}copyForForkChannel(){return this.createChannel(Jr,this.call(G.CopyForFork).process)}createChannel(e,t){const r=$n(e),n=this.channel.sharedPipes&&{...this.channel.sharedPipes,table:t===void 0?this.channel.sharedPipes.table:new SharedArrayBuffer(65536*4)},i=t===void 0?void 0:new MessageChannel,o={...r.server,...t===void 0?{}:{process:t},...n?{sharedPipes:n}:{},...i?{releasePort:i.port2}:{}};this.channel.local?this.channel.local.attach(o):this.channel.port.postMessage({kind:"attach",...o},[r.server.port,...i?[i.port2]:[]]);const a=this.channel.local?.doorbell??this.channel.doorbell;return{...r.client,...n?{sharedPipes:n}:{},...i?{releasePort:i.port1}:{},...a?{doorbell:a}:{}}}copyForExecChannel(e){return this.createChannel(Jr,this.copyForExec(e))}closeProcess(){this.call(G.CloseProcess)}existsSync(e){return this.call(G.Exists,{path:e})}statSync(e){return Oo(this.call(G.Stat,{path:e}))}lstatSync(e){return Oo(this.call(G.Lstat,{path:e}))}readFileSync(e){const t=this.statSync(e).size;if(t<=Re)return tr(this.call(G.ReadFile,{path:e}).content);const r=new Uint8Array(t);for(let n=0;n<t;n+=Re){const i=this.readRangeSync(e,n,Math.min(Re,t-n));if(r.set(i,n),i.byteLength<Math.min(Re,t-n))return r.subarray(0,n+i.byteLength)}return r}async readFile(e){return this.readFileSync(e)}readRangeSync(e,t,r){const n=new Uint8Array(r);let i=0;for(;i<r;){const o=Math.min(Re,r-i),a=tr(this.call(G.ReadRange,{path:e,offset:t+i,length:o}).content);if(n.set(a,i),i+=a.byteLength,a.byteLength<o)break}return i===r?n:n.subarray(0,i)}writeRangeSync(e,t,r){for(let n=0;(n<r.byteLength||n===0&&r.byteLength===0)&&(this.call(G.WriteRange,{path:e,offset:t+n,content:ft(r.subarray(n,n+Re))}),r.byteLength!==0);n+=Re);}writeFileSync(e,t){const r=typeof t=="string"?this.encoder.encode(t):t;if(r.byteLength<=Re){this.call(G.WriteFile,{path:e,content:ft(r)});return}this.call(G.WriteFile,{path:e,content:""}),this.writeRangeSync(e,0,r)}mkdirSync(e,t){this.call(G.Mkdir,{path:e,recursive:t?.recursive===!0})}readdirSync(e){return this.call(G.Readdir,{path:e})}unlinkSync(e){this.call(G.Unlink,{path:e})}rmdirSync(e){this.call(G.Rmdir,{path:e})}renameSync(e,t){this.call(G.Rename,{from:e,to:t})}toSnapshot(){return JSON.parse(this.decoder.decode(this.readChunked(G.SnapshotSize)))}finalSnapshot(){return JSON.parse(this.decoder.decode(this.readChunked(G.FinalSnapshotSize)))}readChunked(e){const{length:t}=this.call(e);if(!Number.isSafeInteger(t)||t<0)throw lt(-5);const r=new Uint8Array(t);for(let n=0;n<t;n+=Re){const i=Math.min(Re,t-n),{content:o}=this.call(G.SnapshotChunk,{offset:n,length:i}),a=tr(o);if(a.byteLength!==i)throw lt(-5);r.set(a,n)}return r}prepareSpawn(){this.call(G.PrepareSpawn)}importPeerPatch(e){const t=this.encoder.encode(JSON.stringify(e));this.call(G.ImportPeerPatchStart,{length:t.byteLength});for(let r=0;r<t.byteLength;r+=Re)this.call(G.ImportPeerPatchChunk,{offset:r,content:ft(t.subarray(r,r+Re))})}replaceSnapshot(e){const t=this.encoder.encode(JSON.stringify(e));this.call(G.ReplaceSnapshotStart,{length:t.byteLength});for(let r=0;r<t.byteLength;r+=Re){const n=t.subarray(r,r+Re);this.call(G.ReplaceSnapshotChunk,{offset:r,content:ft(n)})}}syscall(e,t){const r=this.channel.local;if(r)for(;;){const o=r.syscall(e,t);if(typeof o=="bigint")return o;if(o!==void 0)throw lt(o.failed);const a=performance.now();r.idle(),Qe.waited.ms+=performance.now()-a}let n=this.names.get(e);n||(n=this.encoder.encode(e),this.names.set(e,n));const i=this.view??=new DataView(this.payload.buffer,this.payload.byteOffset,this.payload.byteLength);this.payload[0]=t.length,this.payload[1]=n.byteLength;for(let o=0;o<t.length;o+=1)i.setBigInt64(8+o*8,BigInt(t[o]),!0);return this.payload.set(n,8+t.length*8),this.exchange(G.SyscallBinary,8+t.length*8+n.byteLength,Hf(e,t)||this.bell?null:3e4),i.getBigInt64(0,!0)}names=new Map;lastResult=0;view;readForMapping(e,t,r){const n=new Uint8Array(r),i=this.view??=new DataView(this.payload.buffer,this.payload.byteOffset,this.payload.byteLength);let o=0;for(;o<r;){const a=Math.min(this.payload.byteLength,r-o);i.setInt32(0,e,!0),i.setFloat64(8,t+o,!0),i.setInt32(16,a,!0);const c=this.exchange(G.ReadForMappingBinary,20,3e4);if(this.lastResult===1)return o===0?void 0:n.subarray(0,o);if(n.set(this.payload.subarray(0,c),o),o+=c,c<a)break}return o===r?n:n.subarray(0,o)}mappingPath(e){return this.call(G.MappingPath,{fd:e}).path}writeForMapping(e,t,r){const n=this.encoder.encode(e);if(16+n.byteLength+r.byteLength>this.payload.byteLength)return this.call(G.WriteForMapping,{path:e,offset:t,content:ft(r)}).written;const i=this.view??=new DataView(this.payload.buffer,this.payload.byteOffset,this.payload.byteLength);return i.setFloat64(0,t,!0),i.setUint32(8,n.byteLength,!0),i.setUint32(12,r.byteLength,!0),this.payload.set(n,16),this.payload.set(r,16+n.byteLength),this.exchange(G.WriteForMappingBinary,16+n.byteLength+r.byteLength,3e4),this.payload[0]===1}call(e,t={},r=3e4){const n=this.encoder.encode(JSON.stringify(t));if(n.byteLength>this.payload.byteLength)throw lt(-90);if(Atomics.load(this.control,0)!==0)throw new Error("Concurrent WALI filesystem RPC on one channel.");this.payload.set(n);const i=this.exchange(e,n.byteLength,r);return i>0?JSON.parse(this.decoder.decode(this.payload.slice(0,i))):void 0}exchange(e,t,r){if(Atomics.load(this.control,0)!==0)throw new Error("Concurrent WALI filesystem RPC on one channel.");const n=this.nextRequestId;this.nextRequestId=n>=1073741821?1:n+2,this.control.fill(0),Atomics.store(this.control,1,e),Atomics.store(this.control,3,t),Atomics.store(this.control,0,n);const i=this.channel.local;if(i)for(;i.serveNow(),Atomics.load(this.control,0)!==n+1;)i.idle();else if(this.bell){Atomics.add(this.bell,0,1),Atomics.notify(this.bell,0);const f=Atomics.load(this.bell,1);f!==0&&this.wakeMemory&&Atomics.notify(new Int32Array(this.wakeMemory.buffer),f-1)}else this.channel.port.postMessage(n);const o=r===null?void 0:Date.now()+r;for(;;){const f=Atomics.load(this.control,0);if(f===n+1)break;if(f!==n&&f!==-n)throw new Error(`Invalid WALI filesystem RPC state ${f} for request ${n}.`);const d=o===void 0?void 0:Math.max(0,o-Date.now());if(d===0&&f===n&&Atomics.compareExchange(this.control,0,n,0)===n)throw lt(-110);Atomics.wait(this.control,0,f,f===-n?void 0:d)}const a=Atomics.load(this.control,2),c=Atomics.load(this.control,4);if(Atomics.store(this.control,0,0),a<0)throw lt(a);return this.lastResult=a,c}}function Hf(s,e){if(s==="SYS_flock"){const r=Number(e[1]??0);return(r&4)===0&&(r&8)===0}if(s!=="SYS_fcntl")return!1;const t=Number(e[1]??0);return t===7||t===38}const Vf=5;class tn{sink;root;sharedPipes;constructor(e,t,r){this.sink=e,this.root=t,this.sharedPipes=r}static async createInThread(e,t){const r=await import("./filesystem-host-DJbFuokb.js"),n=new SharedArrayBuffer(2*Int32Array.BYTES_PER_ELEMENT),i=new Int32Array(n);r.hostInThread(n),await r.initializeHost({kind:"initialize",snapshot:e,...t});const o=$n(Jr),a=r.attachChannel({...o.server,...t.sharedPipes?{sharedPipes:t.sharedPipes}:{}}),c=new Qs({...o.client,...t.sharedPipes?{sharedPipes:t.sharedPipes}:{},local:{doorbell:n,serveNow:()=>r.serveNow(a),attach:d=>{r.attachChannel(d)},syscall:(d,y)=>r.syscallNow(a,d,y),handlers:()=>r.handlersNow(a),idle:()=>{r.pumpHost(!0),Atomics.wait(i,0,Atomics.load(i,0),Vf)}}}),f={attach:d=>{r.attachChannel(d)},terminate:()=>r.resetHost(),doorbell:n,host:r};return new tn(f,c,t.sharedPipes)}closePort(){this.sink.host?.closeHostPort()}pump(e=!1){(this.sink.host?.hostWaiting()||e)&&this.sink.host?.pumpHost(e)}doorbell(){return this.sink.doorbell?new Int32Array(this.sink.doorbell):void 0}static async create(e,t){const r=Ta("filesystem",()=>qr(new Worker(new URL("/assets/filesystem-worker-BbsBhZ9p.js",import.meta.url),{type:"module",name:"wali-filesystem"})));await new Promise((o,a)=>{const c=d=>{d.data.kind==="ready"&&(r.removeEventListener("message",c),o()),d.data.kind==="error"&&(r.removeEventListener("message",c),a(new Error(d.data.message)))};r.addEventListener("message",c),r.addEventListener("error",d=>a(d.error??new Error(d.message)),{once:!0});const f=[...t.updatePort?[t.updatePort]:[],...t.fileLocks?[t.fileLocks.channel.port]:[],...t.fileCoherence?[t.fileCoherence.port]:[]];r.postMessage({kind:"initialize",snapshot:e,...t},f)});const n=$n(Jr);r.postMessage({kind:"attach",...n.server},[n.server.port]);const i={attach:(o,a)=>r.postMessage({kind:"attach",...o},a),terminate:()=>r.terminate()};return new tn(i,new Qs({...n.client,...t.sharedPipes?{sharedPipes:t.sharedPipes}:{}}),t.sharedPipes)}createChannel(e,t=0){const r=$n(e),n=this.sharedPipes&&{...this.sharedPipes,table:t===0?this.sharedPipes.table:new SharedArrayBuffer(65536*4)};return this.sink.attach({process:t,...r.server,...n?{sharedPipes:n}:{}},[r.server.port]),{...r.client,...n?{sharedPipes:n}:{},...this.sink.doorbell?{doorbell:this.sink.doorbell}:{}}}copyForExec(){return this.createChannel(Jr,this.root.copyForExec())}filesystem(){return this.root}snapshot(){return this.root.toSnapshot()}finalSnapshot(){return this.root.finalSnapshot()}replaceSnapshot(e){this.root.replaceSnapshot(e)}terminate(){this.sink.terminate()}}const Hr=1e4,Gf=new Set([5,6,7,36,37,38]),jf=new Set(["SYS_open","SYS_openat","SYS_stat","SYS_lstat","SYS_newfstatat","SYS_access","SYS_faccessat","SYS_faccessat2","SYS_chmod","SYS_fchmodat","SYS_chdir","SYS_getcwd","SYS_mkdir","SYS_mkdirat","SYS_statfs","SYS_rmdir","SYS_unlink","SYS_unlinkat","SYS_rename","SYS_utimensat","SYS_symlink","SYS_symlinkat","SYS_readlink","SYS_readlinkat","SYS_inotify_init","SYS_inotify_init1"]),Bo=new Set(["SYS_close","SYS_read","SYS_pread64","SYS_write","SYS_pwrite64","SYS_readv","SYS_writev","SYS_preadv","SYS_pwritev","SYS_lseek","SYS_fstat","SYS_fchmod","SYS_fchdir","SYS_fstatfs","SYS_inotify_add_watch","SYS_inotify_rm_watch","SYS_dup","SYS_dup2","SYS_dup3","SYS_fcntl","SYS_getdents64","SYS_fsync","SYS_fdatasync","SYS_flock","SYS_ftruncate"]);class Kf{client;stdioAliasRegistry;descriptorState;memory;constructor(e,t,r,n){this.client=e,this.stdioAliasRegistry=t,this.descriptorState=r,this.memory=n}poll(e,t,r,n){const i=this.memory?.();if(!i||!Number.isSafeInteger(r)||r<=0||t<0||t+r*8>i.buffer.byteLength)return e(t,r,n);const o=this.descriptorState?new Int32Array(this.descriptorState.table):void 0,a=this.descriptorState?new Int32Array(this.descriptorState.descriptions):void 0,c=this.client.localHandlers(),f=new Map;let d=new DataView(i.buffer);for(let k=0;k<r;k+=1){const M=d.getInt32(t+k*8,!0);if(M<3||M>=Hr&&!ze(M))continue;const L=this.stdioAliasRegistry&&M<this.stdioAliasRegistry.length?Atomics.load(this.stdioAliasRegistry,M):-1;if(L===0||L===1||L===2||o&&a&&Atomics.load(a,Atomics.load(o,M)*3+2))continue;const W=c?c().owns(M):Number(this.client.syscall("SYS_fcntl",[M,1,0]))>=0;f.set(k,W?d.getInt16(t+k*8+4,!0)&4:32)}if(f.size===0)return e(t,r,n);const y=[...f.values()].filter(k=>k!==0).length,p=new Uint8Array(i.buffer,t,r*8).slice(),b=[];for(let k=0;k<r;k+=1)f.has(k)||b.push(k);const S=new Uint8Array(i.buffer);b.forEach((k,M)=>S.set(p.subarray(k*8,k*8+8),t+M*8));let I;try{I=e(t,b.length,y?0:n)}finally{const k=new Uint8Array(i.buffer,t,b.length*8).slice();new Uint8Array(i.buffer).set(p,t),d=new DataView(i.buffer),b.forEach((M,L)=>d.setInt16(t+M*8+6,k[L*8+6]|k[L*8+7]<<8,!0));for(const[M,L]of f)d.setInt16(t+M*8+6,L,!0)}return typeof I!="bigint"&&typeof I!="number"||Number(I)<0?I:BigInt(Number(I)+y)}ownedFileImports(e){const t={};for(const r of Bo){const n=r==="SYS_fcntl",i=n?void 0:this.client.directSyscall(r),o=e[r];if(!i&&!n||!o||r==="SYS_flock")continue;const a=this.client.localHandlers();a&&(t[r]=(...c)=>{const f=Number(c[0]);if(f<3||f>=Hr&&!ze(f)||n&&Gf.has(Number(c[1])))return o(...c);const{imports:d,errno:y,owns:p}=a();if(!p(f))return o(...c);const b=d[r];if(!b)throw lt(-38);let S;try{S=b(...c)}catch(I){throw lt(y(I))}return typeof S=="bigint"?S:BigInt(S??0)})}return t}imports(e){const t={};for(const o of jf){const a=this.client.directSyscall(o);t[o]=a?(...c)=>a(c):(...c)=>this.client.syscall(o,c)}const r=this.descriptorState?new Int32Array(this.descriptorState.table):void 0,n=this.descriptorState?new Int32Array(this.descriptorState.descriptions):void 0;for(const o of Bo){const a=this.client.directSyscall(o),c=o==="SYS_read"||o==="SYS_readv"||o==="SYS_write"||o==="SYS_writev"||o==="SYS_fstat",f=o==="SYS_write"||o==="SYS_writev",d=o==="SYS_pread64"||o==="SYS_pwrite64"||o==="SYS_preadv"||o==="SYS_pwritev";t[o]=(...y)=>{const p=Number(y[0]);if(r&&n&&p>=0&&(p<2e4||ze(p))){const S=Atomics.load(r,p),I=Atomics.load(n,S*3+2);return I&&d?-29n:I&&c?(f&&this.client.prepareSpawn(),e[o]?.(...y)??-9n):a?a(y):this.client.syscall(o,y)}const b=this.stdioAliasRegistry&&p>=0&&p<this.stdioAliasRegistry.length?Atomics.load(this.stdioAliasRegistry,p):-1;return p<3||p>=Hr&&!ze(p)||b===0||b===1||b===2?((o==="SYS_write"||o==="SYS_writev")&&this.client.prepareSpawn(),e[o]?.(...y)??-9n):a?a(y):this.client.syscall(o,y)}}const i=e.SYS_poll;return this.memory&&i&&(t.SYS_poll=(o,a,c)=>this.poll(i,Number(o),Number(a),Number(c))),{...e,...t}}readForMapping(e,t,r){if(!(e<3||e>=Hr&&!ze(e)))return this.client.readForMapping(e,t,r)}mappingPath(e){if(!(e<3||e>=Hr&&!ze(e)))return this.client.mappingPath(e)}writeForMapping(e,t,r){return this.client.writeForMapping(e,t,r)}}function $n(s){const e=new MessageChannel,t=new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT*8),r=new SharedArrayBuffer(s);return e.port1.start(),{client:{port:e.port1,control:t,payload:r},server:{port:e.port2,control:t,payload:r}}}function Oo(s){return{isFile:()=>s.file,isDirectory:()=>s.directory,isSymbolicLink:()=>s.symbolicLink===!0,size:s.size,...Xf(s,"mode","mtimeMs","atimeMs","ctimeMs","nlink","uid","gid","dev","ino","rdev","blksize","blocks")}}function Xf(s,...e){return Object.fromEntries(e.flatMap(t=>s[t]===void 0?[]:[[t,s[t]]]))}function lt(s){const e={2:"ENOENT",9:"EBADF",13:"EACCES",17:"EEXIST",20:"ENOTDIR",21:"EISDIR",22:"EINVAL",24:"EMFILE",28:"ENOSPC",29:"ESPIPE",34:"ERANGE",38:"ENOSYS",39:"ENOTEMPTY",90:"EMSGSIZE",110:"ETIMEDOUT"}[-s]??"EIO";return Object.assign(new Error(e),{code:e})}const Yo=1e4,Jf=19999,Ys=64,qs=64*1024,zn=8,Do=3,Co=4,Ds=2048,Cs=524288,Zf=0,Qf=1,qf=2,eh=3,th=4,Uo=1030,rh=1,nh=4096;function sh(s=new rn(new ni)){const e={table:s.sharedEntries.buffer,descriptions:s.registry.pipeMetadata.buffer,slots:new SharedArrayBuffer(Ys*Int32Array.BYTES_PER_ELEMENT),controls:new SharedArrayBuffer(Ys*zn*Int32Array.BYTES_PER_ELEMENT),payloads:new SharedArrayBuffer(Ys*qs)};return Fa.set(e.table,s),e}const Fa=new WeakMap,Wo=new WeakMap;let ei,ti;function ih(s,e){if(!Number.isSafeInteger(e)||e<0||e>=65536)return 0;let t=s===ei?ti:Wo.get(s);t||(t={table:new Int32Array(s.table),descriptions:new Int32Array(s.descriptions)},Wo.set(s,t)),ei=s,ti=t;const r=Atomics.load(t.table,e);return Atomics.load(t.descriptions,r*3)}function oh(){ei=void 0,ti=void 0}class ah{memory;state;remote;table;slots;constructor(e,t,r,n){this.memory=e,this.state=t,this.remote=n,this.table=r??Fa.get(t.table),this.slots=new Int32Array(t.slots)}isPipeFd(e){return this.entry(e)!==0}exportBrowserProcessPipe(e){const t=this.entry(e);return t===0?void 0:this.handle(t)}pollDescriptor(e,t){const r=this.entry(e);return r===0?void 0:La(this.handle(r),t)}ioctl(e,t){if(this.isPipeFd(e))return t===21537||t===21585||t===21584?0n:-25n}imports(e={}){const t=(n,i)=>e[n]?.(...i)??-38n,r={...e,SYS_pipe:n=>this.pipe(Number(n),0),SYS_pipe2:(n,i)=>this.pipe(Number(n),Number(i)),SYS_close:n=>this.isPipeFd(Number(n))?this.close(Number(n)):e.SYS_close?.(n)??-38n,SYS_read:(n,i,o)=>this.isPipeFd(Number(n))?this.read(Number(n),Number(i),Number(o)):e.SYS_read?.(n,i,o)??-38n,SYS_pread64:(n,i,o,a)=>this.isPipeFd(Number(n))?-29n:e.SYS_pread64?.(n,i,o,a)??-38n,SYS_write:(n,i,o)=>this.isPipeFd(Number(n))?this.write(Number(n),Number(i),Number(o)):e.SYS_write?.(n,i,o)??-38n,SYS_pwrite64:(n,i,o,a)=>this.isPipeFd(Number(n))?-29n:e.SYS_pwrite64?.(n,i,o,a)??-38n,SYS_preadv:(n,i,o,a,c)=>this.isPipeFd(Number(n))?-29n:e.SYS_preadv?.(n,i,o,a,c)??-38n,SYS_pwritev:(n,i,o,a,c)=>this.isPipeFd(Number(n))?-29n:e.SYS_pwritev?.(n,i,o,a,c)??-38n,SYS_readv:(n,i,o)=>this.isPipeFd(Number(n))?this.readv(Number(n),Number(i),Number(o)):e.SYS_readv?.(n,i,o)??-38n,SYS_writev:(n,i,o)=>this.isPipeFd(Number(n))?this.writev(Number(n),Number(i),Number(o)):e.SYS_writev?.(n,i,o)??-38n,SYS_lseek:(n,i,o)=>this.isPipeFd(Number(n))?-29n:e.SYS_lseek?.(n,i,o)??-38n,SYS_fstat:(n,i)=>this.isPipeFd(Number(n))?this.fstat(Number(i)):e.SYS_fstat?.(n,i)??-38n,SYS_dup:n=>this.isPipeFd(Number(n))?this.duplicate(Number(n)):e.SYS_dup?.(n)??-38n,SYS_dup2:(n,i)=>this.isPipeFd(Number(n))?this.duplicate(Number(n),Number(i),3,!1,e):e.SYS_dup2?.(n,i)??-38n,SYS_dup3:(n,i,o)=>this.isPipeFd(Number(n))?Number(n)===Number(i)||(Number(o)&~Cs)!==0?-22n:this.duplicate(Number(n),Number(i),3,!!(Number(o)&Cs),e):e.SYS_dup3?.(n,i,o)??-38n,SYS_fcntl:(n,i,o)=>this.isPipeFd(Number(n))?this.fcntl(Number(n),Number(i),Number(BigInt.asIntN(32,BigInt(o))),e):e.SYS_fcntl?.(n,i,o)??-38n,SYS_poll:(n,i,o)=>this.poll(Number(n),Number(i),Number(o),()=>t("SYS_poll",[n,i,o]))};if(this.remote)for(const n of["SYS_pipe","SYS_pipe2","SYS_close","SYS_dup","SYS_dup2","SYS_dup3","SYS_fcntl"]){const i=r[n];r[n]=(...o)=>n==="SYS_pipe"||n==="SYS_pipe2"||this.isPipeFd(Number(o[0]))?this.remote.syscall(n,o):i(...o)}return r}pipe(e,t){if((t&-526337)!==0)return-22n;if(!this.validRange(e,8))return-14n;const r=this.allocateSlot();if(r<0)return-24n;const n=this.control(r);n.fill(0),Atomics.store(n,Do,1),Atomics.store(n,Co,1);const i=this.allocateDescriptor(r+1),o=i>=0?this.allocateDescriptor(-(r+1)):-1;if(i<0||o<0)return i>=0&&this.table.close(i),Atomics.store(this.slots,r,0),-24n;for(const c of[i,o])this.table.entries[c].flags=t&Cs?1:0,Atomics.store(new Int32Array(this.state.descriptions),this.table.entries[c].description*3+1,t&Ds);const a=this.view();return a.setInt32(e,i,!0),a.setInt32(e+4,o,!0),0n}read(e,t,r){if(!Number.isSafeInteger(r)||r<0||!this.validRange(t,r))return-22n;const i=(this.statusFlags(e)&Ds?oi:If)(this.handle(this.entry(e)),r);return typeof i=="bigint"?i:(this.bytes().set(i,t),BigInt(i.byteLength))}write(e,t,r){return!Number.isSafeInteger(r)||r<0||!this.validRange(t,r)?-22n:Pa(this.handle(this.entry(e)),this.bytes().slice(t,t+r))}readv(e,t,r){if(!Number.isSafeInteger(r)||r<0||r>1024||!this.validRange(t,r*8))return-22n;let n=0n;for(let i=0;i<r;i+=1){const o=t+i*8,a=this.read(e,this.view().getUint32(o,!0),this.view().getUint32(o+4,!0));if(a<0n)return n>0n?n:a;if(n+=a,a<BigInt(this.view().getUint32(o+4,!0)))break}return n}writev(e,t,r){if(!Number.isSafeInteger(r)||r<0||r>1024||!this.validRange(t,r*8))return-22n;let n=0n;for(let i=0;i<r;i+=1){const o=t+i*8,a=this.write(e,this.view().getUint32(o,!0),this.view().getUint32(o+4,!0));if(a<0n)return n>0n?n:a;n+=a}return n}fstat(e){if(!this.validRange(e,144))return-14n;const t=this.view();for(let r=0;r<144;r+=4)t.setUint32(e+r,0,!0);return t.setBigUint64(e+16,1n,!0),t.setUint32(e+24,nh|438,!0),t.setUint32(e+28,1e3,!0),t.setUint32(e+32,1e3,!0),t.setBigInt64(e+56,4096n,!0),0n}statusFlags(e){const t=Atomics.load(new Int32Array(this.state.table),e);return Atomics.load(new Int32Array(this.state.descriptions),t*3+1)}fcntl(e,t,r,n){if(t===Zf||t===Uo)return this.duplicate(e,void 0,Math.max(3,r),t===Uo,n);const i=this.table.entries[e];return t===Qf?BigInt(i.flags):t===qf?(i.flags=r&rh,0n):t===eh?BigInt(this.statusFlags(e)|(this.entry(e)<0?1:0)):t===th?(Atomics.store(new Int32Array(this.state.descriptions),i.description*3+1,r&Ds),0n):-22n}duplicate(e,t,r=Yo,n=!1,i={}){const o=this.table.get(e);if(!o)return-9n;if(t===e)return BigInt(e);const a=t===void 0?this.freeDescriptor(r):t;return a<0||a>=65536?-9n:(this.table.set(a,o,n?1:0),BigInt(a))}close(e){return this.table.close(e)?0n:-9n}poll(e,t,r,n){if(!Number.isSafeInteger(t)||t<0||t>65536||!this.validRange(e,t*8))return-22n;const i=n();let o=typeof i=="bigint"?Number(i):typeof i=="number"?i:0;o<0&&(o=0);for(let a=0;a<t;a+=1){const c=e+a*8,f=this.view().getInt32(c,!0),d=this.pollDescriptor(f,this.view().getInt16(c+4,!0));d!==void 0&&(this.view().getInt16(c+6,!0)!==0&&(o-=1),this.view().setInt16(c+6,d,!0),d!==0&&(o+=1))}return BigInt(o)}allocateSlot(){for(let e=0;e<this.slots.length;e+=1)if(Atomics.compareExchange(this.slots,e,0,1)===0)return e;return-1}freeDescriptor(e){for(let t=Math.max(3,e);t<=Jf;t++)if(!this.table.get(t))return t;return-1}allocateDescriptor(e,t=Yo){const r=this.freeDescriptor(t);if(r<0)return r;const n=Math.abs(e)-1,i=this.table.registry.create("pipe",{pipe:n,side:e>0?"reader":"writer"},()=>{Zr(this.handle(e));const o=this.control(n);Atomics.load(o,Do)===0&&Atomics.load(o,Co)===0&&Atomics.store(this.slots,n,0)});return Atomics.store(this.table.registry.pipeMetadata,i.id*3,e),this.table.set(r,i),r}entry(e){return ih(this.state,e)}handle(e){const t=Math.abs(e)-1;return{control:this.state.controls,payload:this.state.payloads,role:e>0?"reader":"writer",controlOffset:t*zn*Int32Array.BYTES_PER_ELEMENT,payloadOffset:t*qs,payloadLength:qs}}control(e){return new Int32Array(this.state.controls,e*zn*Int32Array.BYTES_PER_ELEMENT,zn)}bytes(){return new Uint8Array(this.memory().buffer)}view(){return new DataView(this.memory().buffer)}validRange(e,t){return Number.isSafeInteger(e)&&Number.isSafeInteger(t)&&e>=0&&t>=0&&e+t<=this.memory().buffer.byteLength}}const Us=64*1024,ch=1e4;var Yt;(function(s){s[s.Query=1]="Query",s[s.Open=2]="Open",s[s.Push=3]="Push",s[s.Pull=4]="Pull",s[s.Flush=5]="Flush",s[s.Close=6]="Close"})(Yt||(Yt={}));var $o;(function(s){s[s.VideoDecoder=0]="VideoDecoder",s[s.VideoEncoder=1]="VideoEncoder",s[s.AudioDecoder=2]="AudioDecoder",s[s.AudioEncoder=3]="AudioEncoder"})($o||($o={}));const zo=1;var Je;(function(s){s[s.State=0]="State",s[s.Operation=1]="Operation",s[s.Result=2]="Result",s[s.Argument0=3]="Argument0",s[s.Argument1=4]="Argument1",s[s.Argument2=5]="Argument2",s[s.Argument3=6]="Argument3",s[s.Argument4=7]="Argument4",s[s.Argument5=8]="Argument5"})(Je||(Je={}));const lh=6,fh=9,hh=-5,Ws=-9,dh=-11,Rn=-14,Qt=-22,br=-95,uh=-110,Ho=3e4,mh=ch+5e3;class yh{channel;control;nextRequestId=1;constructor(e){this.channel=e,this.control=new Int32Array(e.control)}call(e,t,r){if(Atomics.load(this.control,Je.State)!==0)return dh;const n=this.nextRequestId;this.nextRequestId=n>=1073741821?1:n+2,this.control.fill(0);for(let a=0;a<lh;a+=1)Atomics.store(this.control,Je.Argument0+a,t[a]??0);Atomics.store(this.control,Je.Operation,e),Atomics.store(this.control,Je.State,n),this.channel.port.postMessage(n);const i=Date.now()+r;for(;;){const a=Atomics.load(this.control,Je.State);if(a===n+1)break;if(a!==n&&a!==-n)return hh;const c=Math.max(0,i-Date.now());if(c===0&&a===n&&Atomics.compareExchange(this.control,Je.State,n,0)===n)return uh;Atomics.wait(this.control,Je.State,a,a===-n?void 0:c)}const o=Atomics.load(this.control,Je.Result);return Atomics.store(this.control,Je.State,0),o}}function wh(s,e,t){const r=()=>s().buffer.byteLength,n=(c,f)=>Number.isSafeInteger(c)&&c>0&&f>=0&&c<=r()-f,i=(c,f)=>f===0?Number.isSafeInteger(c)&&c>=0:n(c,f),o=(c,f,d=Ho)=>{const y=t();return BigInt(y?y.call(c,f,d):br)},a=c=>(f,d,y)=>{if(!e())return BigInt(br);const p=Number(f),b=Number(d),S=Number(y);return!Number.isInteger(p)||p<0||p>3||!Number.isSafeInteger(S)||S<1||S>Us?BigInt(Qt):n(b,S)?o(c,[p,b,S]):BigInt(Rn)};return{SYS_browser_codec_query_v1:a(Yt.Query),SYS_browser_codec_open_v1:a(Yt.Open),SYS_browser_codec_push_v1:(c,f,d,y,p)=>{if(!e())return BigInt(br);const b=Number(c),S=Number(f),I=Number(d),k=Number(y),M=Number(p);return!Number.isInteger(b)||b<=0?BigInt(Ws):!Number.isSafeInteger(I)||I<0||!Number.isSafeInteger(M)||M<1||M>Us?BigInt(Qt):I>0&&!n(S,I)||!n(k,M)?BigInt(Rn):o(Yt.Push,[b,S,I,k,M])},SYS_browser_codec_pull_v1:(c,f,d,y,p,b)=>{if(!e())return BigInt(br);const S=Number(c),I=Number(f),k=Number(d),M=Number(y),L=Number(p),W=Number(b);return!Number.isInteger(S)||S<=0?BigInt(Ws):!Number.isInteger(I)||(I&~zo)!==0||!Number.isSafeInteger(M)||M<0||!Number.isSafeInteger(W)||W<0||W>Us?BigInt(Qt):!i(k,M)||!i(L,W)?BigInt(Rn):o(Yt.Pull,[S,I,k,M,L,W],(I&zo)===0?Ho:mh)},SYS_browser_codec_flush_v1:c=>{if(!e())return BigInt(br);const f=Number(c);return!Number.isInteger(f)||f<=0?BigInt(Ws):o(Yt.Flush,[f])},SYS_browser_codec_close_v1:c=>{if(!e())return BigInt(br);const f=Number(c);return!Number.isInteger(f)||f<=0?0n:o(Yt.Close,[f])}}}class ci{worker;constructor(e){this.worker=e}static async create(e){const t=qr(new Worker(new URL("/assets/codec-worker-CbrC58Ct.js",import.meta.url),{type:"module",name:"wali-codec"}));return await new Promise((r,n)=>{const i=o=>{o.data.kind==="ready"&&(t.removeEventListener("message",i),r()),o.data.kind==="error"&&(t.removeEventListener("message",i),n(new Error(o.data.message)))};t.addEventListener("message",i),t.addEventListener("error",o=>n(o.error??new Error(o.message)),{once:!0}),t.postMessage({kind:"initialize",memory:e})}),new ci(t)}createChannel(){const e=new MessageChannel,t=new SharedArrayBuffer(fh*Int32Array.BYTES_PER_ELEMENT);return this.worker.postMessage({kind:"attach",port:e.port2,control:t},[e.port2]),{port:e.port1,control:t}}terminate(){this.worker.terminate()}}const $s=1,zs=2,Hs=4,Vo=8,ph=16,gh=32,Ba=1024,Sh=Ba*8;function bh(s,e,t){return(r,n,i,o,a)=>{const c=Number(r);if(!Number.isInteger(c)||c<0||c>Ba)return-22n;const f=[Number(n),Number(i),Number(o)],d=[$s,Hs,zs],y=Math.ceil(c/8);let p=new Uint8Array(s().buffer);for(const D of f)if(D!==0&&(D<0||D+y>p.byteLength))return-14n;const b=Number(a);let S=-1;if(b!==0){if(b<0||b+16>p.byteLength)return-14n;const D=new DataView(s().buffer),v=D.getBigInt64(b,!0),U=D.getBigInt64(b+8,!0);if(v<0n||U<0n)return-22n;S=Number(v*1000n+(U+999n)/1000n)}const I=new Map;f.forEach((D,v)=>{if(D!==0)for(let U=0;U<c;U+=1)p[D+(U>>3)]&1<<(U&7)&&I.set(U,(I.get(U)??0)|d[v])});const k=t();if(k<=0)return-12n;let M=new DataView(s().buffer),L=0;for(const[D,v]of I){const U=k+L*8;M.setInt32(U,D,!0),M.setInt16(U+4,v,!0),M.setInt16(U+6,0,!0),L+=1}const W=e(k,L,S),de=Number(typeof W=="bigint"?W:W??0);if(de<0)return BigInt(de);p=new Uint8Array(s().buffer),M=new DataView(s().buffer);for(const D of f)D!==0&&p.fill(0,D,D+y);let se=0,ie=0;for(const[D,v]of I){const U=M.getInt16(k+ie*8+6,!0);if(ie+=1,U&gh)return-9n;[(v&$s)!==0&&(U&($s|ph|Vo))!==0,(v&Hs)!==0&&(U&(Hs|Vo))!==0,(v&zs)!==0&&(U&zs)!==0].forEach((Se,O)=>{if(!Se)return;const fe=f[O]+(D>>3);p[fe]=(p[fe]??0)|1<<(D&7),se+=1})}return BigInt(se)}}var Dt;(function(s){s[s.Inspect=1]="Inspect",s[s.Read=2]="Read",s[s.WriteStart=3]="WriteStart",s[s.WriteChunk=4]="WriteChunk",s[s.WriteFinish=5]="WriteFinish",s[s.Remove=6]="Remove"})(Dt||(Dt={}));const vn=512*1024,Go=256*1024*1024,jo=5,Eh=new TextEncoder,Ah=new TextDecoder("utf-8",{fatal:!0});class _h{channel;control;payload;nextRequestId=1;constructor(e){this.channel=e,this.control=new Int32Array(e.control),this.payload=new Uint8Array(e.payload)}pull(e){const t=this.call(Dt.Inspect,{path:e});if(!t.exists)return;const r=ri(t.length,0,Go),n=new Uint8Array(r);for(let i=0;i<r;i+=vn){const o=Math.min(vn,r-i),a=this.call(Dt.Read,{path:e,offset:i,length:o}),c=tr(a.content);if(c.byteLength!==o)throw new Error("Invalid coherent file response.");n.set(c,i)}return{bytes:n,...t.mode===void 0?{}:{mode:t.mode},...t.mtimeMs===void 0?{}:{mtimeMs:t.mtimeMs},parents:Oa(e,t.parents)}}push(e,t){if(!t){this.call(Dt.Remove,{path:e});return}if(t.bytes.byteLength>Go)throw new Error("Coherent file exceeds 256 MiB.");this.call(Dt.WriteStart,{path:e,length:t.bytes.byteLength,...t.mode===void 0?{}:{mode:t.mode},...t.mtimeMs===void 0?{}:{mtimeMs:t.mtimeMs},...t.parents===void 0?{}:{parents:t.parents}});for(let r=0;r<t.bytes.byteLength;r+=vn){const n=t.bytes.subarray(r,r+vn);this.call(Dt.WriteChunk,{offset:r,content:ft(n)})}this.call(Dt.WriteFinish)}call(e,t={}){const r=()=>{if(Atomics.load(this.control,jo))throw Object.assign(new Error("Browser file coherence was cancelled."),{errno:125})};r();const n=Eh.encode(JSON.stringify(t));if(n.byteLength>this.payload.byteLength)throw new Error("File-coherence request is too large.");if(Atomics.load(this.control,0)!==0)throw new Error("Concurrent file-coherence RPC on one channel.");const i=this.nextRequestId;this.nextRequestId=i>=1073741821?1:i+2,this.control.fill(0,0,jo),this.payload.set(n),Atomics.store(this.control,1,e),Atomics.store(this.control,3,n.byteLength),Atomics.store(this.control,0,i);try{for(this.channel.port.postMessage(i);Atomics.load(this.control,0)!==i+1;){r();const f=Atomics.load(this.control,0);f!==i+1&&Atomics.wait(this.control,0,f)}const o=Atomics.load(this.control,2),a=ri(Atomics.load(this.control,4),0,this.payload.byteLength),c=a===0?void 0:JSON.parse(Ah.decode(this.payload.slice(0,a)));if(o<0)throw Object.assign(new Error(`Browser file coherence failed with ${o}.`),{errno:-o});return c}finally{Atomics.store(this.control,0,0)}}}function Ko(s){const e=s.replace(/-(?:journal|shm|wal)$/u,"");return[e,`${e}-journal`,`${e}-wal`,`${e}-shm`]}function Nh(s,e){return li(e).flatMap(t=>{if(!s.existsSync(t))return[];const r=s.statSync(t);if(!r.isDirectory())throw _t("A coherent file parent must be a directory.");return[{path:t,...Ya({mode:r.mode,mtimeMs:r.mtimeMs})}]})}function Ih(s,e,t){const r=new Map(Oa(e,t).map(n=>[n.path,n]));for(const n of li(e)){if(s.existsSync(n)){if(!s.statSync(n).isDirectory())throw _t("A coherent file parent must be a directory.");continue}s.mkdirSync(n);const i=r.get(n);i?.mode!==void 0&&s.chmodSync?.(n,i.mode),i?.mtimeMs!==void 0&&s.utimesSync?.(n,new Date(i.mtimeMs),new Date(i.mtimeMs))}}function Oa(s,e){if(e===void 0)return[];const t=new Set(li(s));if(!Array.isArray(e)||e.length>t.size)throw _t("Invalid coherent file parents.");return e.map(r=>{if(typeof r!="object"||r===null)throw _t("Invalid coherent file parent.");const n=r,i=Da(n.path);if(!t.delete(i))throw _t("Coherent metadata must name distinct ancestors of its file.");return{path:i,...Ya(n)}})}function li(s){const e=[];for(const t of Da(s).split("/"))!t||t==="."||(t===".."?e.pop():e.push(t));return e.slice(0,-1).map((t,r)=>`/${e.slice(0,r+1).join("/")}`)}function Ya(s){const e=s.mode===void 0?void 0:ri(s.mode,0,65535),t=s.mtimeMs===void 0?void 0:xh(s.mtimeMs);return{...e===void 0?{}:{mode:e},...t===void 0?{}:{mtimeMs:t}}}function Da(s){const e=kh(s);if(!e.startsWith("/")||e.length>4096||e.includes("\0"))throw _t("Invalid coherent file path.");return e}function kh(s){if(typeof s!="string")throw _t("Expected a string.");return s}function ri(s,e,t){if(!Number.isSafeInteger(s)||s<e||s>t)throw _t("Expected a bounded integer.");return s}function xh(s){if(typeof s!="number"||!Number.isFinite(s))throw _t("Expected a finite number.");return s}function _t(s){return Object.assign(new Error(s),{errno:22})}class Mh{locks;coherence;filesystem;held=[];locallyCreated=new Set;constructor(e,t,r){this.locks=e,this.coherence=t,this.filesystem=r}created(e){this.locallyCreated.add(e)}request(e){if(e.operation==="query")return this.locks.request(e);if(e.operation==="set"){const i=!this.held.some(a=>a.path===e.path),o=this.locks.request(e);if(o.result<0)return o;if(i)try{this.refresh(e.path)}catch(a){throw this.locks.request({operation:"unlock",owner:e.owner,namespace:e.namespace,path:e.path,range:e.range}),a}return this.install(e.owner,e.namespace,e.path,e.range),o}if(e.operation==="unlock"){const i=this.without(e.owner,e.namespace,e.path,e.range);this.held.some(a=>a.path===e.path)&&!i.some(a=>a.path===e.path)&&this.publish(e.path);const o=this.locks.request(e);return o.result>=0&&this.replaceHeld(i),o}const t=this.held.filter(i=>i.owner!==e.owner),r=new Set(this.held.filter(i=>i.owner===e.owner).map(i=>i.path));for(const i of r)t.some(o=>o.path===i)||this.publish(i);const n=this.locks.request(e);return n.result>=0&&this.replaceHeld(t),n}refresh(e){const t=performance.now();try{this.refreshNow(e)}finally{Qe.waited.ms+=performance.now()-t}}publish(e){const t=performance.now();try{this.publishNow(e)}finally{Qe.waited.ms+=performance.now()-t}}refreshNow(e){for(const t of Ko(e)){const r=this.coherence.pull(t);if(!r&&this.locallyCreated.delete(t)){this.coherence.push(t,this.readLocal(t)),this.filesystem.dropChangedPaths?.([t]);continue}this.locallyCreated.delete(t),this.writeLocal(t,r),this.filesystem.dropChangedPaths?.([t])}}publishNow(e){for(const t of Ko(e))this.coherence.push(t,this.readLocal(t)),this.filesystem.dropChangedPaths?.([t])}readLocal(e){if(!this.filesystem.existsSync(e))return;const t=this.filesystem.statSync(e);if(!t.isDirectory())return{bytes:this.filesystem.readFileSync(e),...t.mode===void 0?{}:{mode:t.mode},...t.mtimeMs===void 0?{}:{mtimeMs:t.mtimeMs},parents:Nh(this.filesystem,e)}}writeLocal(e,t){if(!t){this.filesystem.existsSync(e)&&!this.filesystem.statSync(e).isDirectory()&&this.filesystem.unlinkSync(e);return}Ih(this.filesystem,e,t.parents),this.filesystem.writeFileSync(e,t.bytes),t.mode!==void 0&&this.filesystem.chmodSync?.(e,t.mode),t.mtimeMs!==void 0&&this.filesystem.utimesSync?.(e,new Date(t.mtimeMs),new Date(t.mtimeMs))}install(e,t,r,n){const i=this.without(e,t,r,n);i.push({owner:e,namespace:t,path:r,...n}),this.replaceHeld(i)}without(e,t,r,n){return this.held.flatMap(i=>i.owner===e&&i.namespace===t&&i.path===r&&Lh(i,n)?Ph(i,n):[i])}replaceHeld(e){this.held.splice(0,this.held.length,...e)}}function Lh(s,e){return s.start<(e.end??Number.POSITIVE_INFINITY)&&e.start<(s.end??Number.POSITIVE_INFINITY)}function Ph(s,e){const t=[];s.start<e.start&&t.push({...s,end:e.start});const r=s.end??Number.POSITIVE_INFINITY,n=e.end??Number.POSITIVE_INFINITY;return n<r&&t.push({...s,start:n,...s.end===void 0?{}:{end:s.end}}),t}const Rh=9n,vh=22n,Xo=new TextEncoder,Vr=new TextDecoder;class Ca extends Error{imports;constructor(e){super(`Unsupported WALI imports: ${e.join(", ")}`),this.imports=e,this.name="UnsupportedWaliImportError"}}function Th(s,e){if(jc(s))return()=>{throw new Ca([s])};let t=!1;return()=>{if(!t){t=!0;const r=`[WALI] ${s} is not implemented; answering -ENOSYS (38) as a kernel would.`;console.error(r),e?.(r)}return Gc}}class Jo extends Error{}class Zo extends Error{code;constructor(e){super(`WALI process exited with status ${e}`),this.code=e}}class Fh{async run(e,t={}){const r=t.filesystemPolicy===void 0?void 0:er(t.filesystemPolicy),n=r,i=await Wc(e),o=$c(i);zc(o);const a=o.filter(g=>g.module==="wali"),c=[],f=[],d=typeof t.stdin=="object"&&t.stdin!==null&&"read"in t.stdin?t.stdin:new ca(typeof t.stdin=="string"?Xo.encode(t.stdin):t.stdin??new Uint8Array),y=t.argv?.length?[...t.argv]:["wali-program"],p=y.map(g=>Xo.encode(`${g}\0`)),b=Dh(t.pid),S=performance.now(),I={...Qe.waited};let k=S;const M=new Map,L=t.signalState??Tc();let W,de,se,ie,D,v,U=!1;const X=hf(e,t.memory),Se=Nl(),O=new Int32Array(new SharedArrayBuffer(3*Int32Array.BYTES_PER_ELEMENT));Atomics.store(O,1,-1);const fe=new rn(new ni),ue=t.descriptorTable?.sharedPipes??sh(fe),V=()=>{if(X)return X;const g=W?.exports.memory;if(!(g instanceof WebAssembly.Memory))throw new Error("WALI module does not export linear memory.");return g},me=()=>new DataView(V().buffer),T=()=>new Uint8Array(V().buffer),j=(g,N)=>(Er(V(),g,N),T().slice(g,g+N)),pe=(g,N)=>{Er(V(),g,N.byteLength),T().set(N,g)},ve=(g,N)=>{if(g===1)c.push(N),t.onStdout?.(N.slice());else if(g===2)f.push(N),t.onStderr?.(N.slice());else return-Rh;return BigInt(N.byteLength)},Oe=(g,N="SYS_exit_group")=>{const P=`[WALI] ${N}(${g&255}) on the MAIN thread -- the process is ending here, not in a pthread. If the program did not ask to exit, this is the caller to find.`;throw console.error(P),t.onDiagnostic?.(P),new Zo(g&255)},Ie=g=>g<0||g>64?-22n:g===0?0n:g!==9&&(tt.mask&1n<<BigInt(g-1))!==0n?(new hs(L).raise(g),0n):((g===9||g===19?"default":new hs(L).raise(g))==="default"&&vc(g)&&Oe(128+g,`signal ${g}`),0n),dt=t.executablePath??(y[0].startsWith("/")?y[0]:`/usr/bin/${y[0]}`),Te=a.some(g=>g.name==="__wasm_thread_spawn"),ut=a.some(g=>Bh.has(g.name))?t.browserProcess:void 0,nn=t.forkState?.allocator??pa(),mt=zl(),K=t.descriptorTable?new Qs(t.descriptorTable):void 0;if(K&&X&&K.attachMemory(X),!K&&(Te||ut)&&t.filesystem?.toSnapshot&&t.filesystem.replaceSnapshot){if(!X)throw new Error("A threaded WALI module must import its shared process memory.");const g=t.store||t.layers?t.filesystem.toStoreOverlaySnapshot?.():void 0;U=!(!!ut?.fork&&WebAssembly.Module.exports(i).some(P=>P.name==="asyncify_start_unwind")||a.some(P=>P.name==="SYS_browser_spawn"||P.name==="SYS_browser_spawn_confined_v1")),v=await(U?tn.createInThread:tn.create)(g??t.filesystem.toSnapshot(),{...t.store?{store:t.store}:{},...t.layers?{layers:t.layers}:{},...t.privateRoots?{privateRoots:t.privateRoots}:{},memory:X,sharedPipes:ue,...n?{filesystemPolicy:n}:{},cwd:t.cwd??"/",executablePath:dt,pid:b,...t.filesystemUpdatePort?{updatePort:t.filesystemUpdatePort}:{},...t.fileLocks?{fileLocks:t.fileLocks}:{},...t.fileCoherence?{fileCoherence:t.fileCoherence}:{}})}if(n&&Te&&!v&&!K)throw new Error("Confined WALI threads require the shared filesystem owner.");const ke=K??v?.filesystem()??t.filesystem,he=()=>{v&&t.filesystem?.replaceSnapshot&&t.filesystem.replaceSnapshot(v.snapshot())},oe=new Kn({...K||v?{descriptorState:ue}:{descriptors:fe},...n?{filesystemPolicy:n}:{},...ke?{filesystem:ke}:{},cwd:t.cwd??"/",stdin:d,executablePath:dt,memory:V,emit:ve,stdioAliasRegistry:Se,pid:b,...!v&&t.fileLocks?{fileLocks:t.fileCoherence?new Mh(new Qe(t.fileLocks.channel),new _h(t.fileCoherence),ke):new Qe(t.fileLocks.channel),lockOwner:t.fileLocks.owner}:{},...v?{specialDescriptorMinimum:1e4,descriptorMaximum:19999}:{},...!v&&!K&&t.privateRoots?{privateRoots:t.privateRoots.map(g=>`/${g.split("/").filter(Boolean).join("/")}`)}:{},...t.onDiagnostic?{onDiagnostic:t.onDiagnostic}:{}}),He=oe.imports(),et=oe.writeEnvironmentFile(t.env??{},b),ne=K??v?.filesystem(),Ye=ne?new Kf(ne,Se,ue,V):void 0,xe=new Hl(V,(g,N,P)=>Ye?.readForMapping(g,N,P)??oe.readForMapping(g,N,P),nn,g=>Ye?.mappingPath(g)??oe.mappingPath(g),(g,N,P)=>Ye?.writeForMapping(g,N,P)??oe.writeForMapping(g,N,P),mt,t.onDiagnostic),tt=new Fc(new hs(L),V,()=>W?.exports.__indirect_function_table,()=>Number(xe.imports().SYS_mmap(0,4096,3,34,-1,0)),Bc(()=>W?.exports,V)),be=t.threadPoolSize??18,sn=new rf(V,b,d,O,t.terminal,be,()=>xe.growAhead()),Mr=U?v?.doorbell():void 0;Ui(Mr?{pump:()=>v.pump(!0),doorbell:Mr}:void 0);let on=!1;(t.network||ut)&&(se=await ai.create(t.network,ue,d instanceof Xs?d.buffer:void 0,Se.buffer,L));const Ee=se?new $f(V,se.createChannel(),tt):void 0,nr=new ah(V,ue,ne?void 0:fe,ne),Qn=new ff(V,oe,(g,N)=>nr.pollDescriptor(g,N)??(Ee?.isNetworkFd(g)?Ee.pollFd(g,N):void 0)),qn=new Of(V,oe),an=oe.imports(),sr=Ye?.imports(an)??an,Wt=nr.imports({...qn.imports(),...sr}),cn=Qn.imports(),$t=sn.imports(),zt=t.forkState?.parentPid??t.parentPid??1,De=new Int32Array(t.childPidAllocator??new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT));t.childPidAllocator||Atomics.store(De,0,Math.max(b+1,1e4));const ir=g=>{if(!Number.isSafeInteger(g)||g<=0||g>=T().byteLength)throw new WebAssembly.RuntimeError("WALI process string pointer is out of bounds.");const N=T().indexOf(0,g);if(N<0||N-g>1024*1024)throw new WebAssembly.RuntimeError("WALI process string is not terminated.");return Vr.decode(T().slice(g,N))},or=g=>{if(g===0)return[];const N=[];for(let P=0;P<65536;P+=1){Er(V(),g+P*4,4);const $=me().getUint32(g+P*4,!0);if($===0)return N;N.push(ir($))}throw new WebAssembly.RuntimeError("WALI process string array is not terminated.")},yt=(g,N)=>{const P=nr.exportBrowserProcessPipe(g)??oe.exportBrowserProcessPipe(g);if(!(!P||P.role!==N))return Ma(P)},es=(g,N,P)=>{if(!Ee)return-10n;if(N!==0&&(N<0||N+4>T().byteLength))return-14n;const{result:$,process:z}=Ee.waitChild(g,P,tt.mask);if($<=0)return BigInt($);const te=xf(z);if(te){v&&v.filesystem().importPeerPatch(te),t.filesystem&&gf(t.filesystem,te);const ye=t.filesystem?.toSnapshot?.();ye&&t.browserProcess?.restore?.(ye)}return N!==0&&me().setInt32(N,(Atomics.load(new Int32Array(z.control),1)&255)<<8,!0),BigInt($)},ln=(g,N)=>{const[P,$,z,te,ye,ae,Me]=g;if(!t.browserProcess)return-38;const kt=Pr(1,[ye,ae,Me]);if(kt!==void 0)return kt;N&&(N=er(N));const xt=r;if(xt){if(t.browserProcess.filesystemPolicyVersion!==1)return-95;N=Oc(xt,N)}const Mt=ir(Number(P)),_e=or(Number($));_e.length===0&&_e.push(Mt);const lr={};for(const gt of or(Number(z))){const Lt=gt.indexOf("=");Lt>0&&(lr[gt.slice(0,Lt)]=gt.slice(Lt+1))}const fr=Atomics.add(De,0,1),hr={control:new SharedArrayBuffer(8*Int32Array.BYTES_PER_ELEMENT),response:new SharedArrayBuffer(Zs),snapshotApplied:!1},Fe=yt(Number(ye),"reader"),st=yt(Number(ae),"writer"),pt=yt(Number(Me),"writer");let Le;try{const gt=Ee.registerChild(fr,hr);if(gt<0)throw new Error(`Child registration failed: ${gt}`);return ne?.prepareSpawn(),he(),Le=ne?.copyForExecChannel([Number(ye),Number(ae),Number(Me)]),t.browserProcess.spawn({pid:fr,parentPid:b,childPidAllocator:De.buffer,...Le?{descriptorTable:Le}:{},...N?{filesystemPolicy:N}:{},executablePath:Mt,argv:_e,env:lr,...Number(z)===0?{inheritEnvironment:!0}:{},cwd:Number(te)===0?oe.currentWorkingDirectory():ir(Number(te)),control:hr.control,response:hr.response,...Fe?{stdin:Fe}:{},...st?{stdout:st}:{},...pt?{stderr:pt}:{}}),fr}catch{return Le?.releasePort?.postMessage(!0),Ee.forgetChild(fr),Fe&&Zr(Fe),st&&Zr(st),pt&&Zr(pt),-5}};let ee=t.forkState?.asyncifyData??0,rt=!1,Ve=!!t.forkState,wt=0,Lr=!1;const Ge=(g,...N)=>{const P=W?.exports[g];if(typeof P!="function")throw new Error(`Missing ${g}; build the module with the Binaryen Asyncify stage.`);P(...N)},Ht=()=>ne?.currentWorkingDirectory()??oe.currentWorkingDirectory(),Pr=(g,N=[])=>{const P=W?.exports.__wali_private_tree_release;if(typeof P!="function")return;const $=Number(P(g,Number(N[0]??-1),Number(N[1]??-1),Number(N[2]??-1)));return $<0?$:void 0},ts=()=>{if(typeof W?.exports.asyncify_start_unwind!="function")return Lr||t.onDiagnostic?.("[WALI] SYS_fork answers -ENOSYS: module lacks the Binaryen Asyncify build stage (--asyncify --pass-arg=asyncify-imports@wali.SYS_fork)."),Lr=!0,-38n;if(Ve)return Ge("asyncify_stop_rewind"),Ve=!1,BigInt(wt);if(!t.browserProcess?.fork||!ne||!Ee)return-38n;const g=Pr(0);return g!==void 0?BigInt(g):(rt=!0,me().setUint32(ee,ee+8,!0),Ge("asyncify_start_unwind",ee),0n)},fn=(g,N,P)=>{if(!t.forkState||!t.browserProcess||!ne)return-38n;const $=Pr(0);if($!==void 0)return BigInt($);const z=ir(g),te=z.startsWith("/")?z:`${Ht()}/${z}`;if(!ke?.existsSync(te))return-2n;if(!ke.statSync(te).isFile())return-13n;const ye=P===0?{...t.env}:{};for(const Mt of or(P)){const _e=Mt.indexOf("=");_e>0&&(ye[Mt.slice(0,_e)]=Mt.slice(_e+1))}ne.prepareSpawn();const ae=ne.copyForExecChannel([0,1,2]),Me=yt(0,"reader"),kt=yt(1,"writer"),xt=yt(2,"writer");throw t.browserProcess.spawn({pid:b,parentPid:zt,childPidAllocator:De.buffer,executablePath:te,argv:or(N),env:ye,cwd:Ht(),descriptorTable:ae,control:t.forkState.control,response:t.forkState.response,...n?{filesystemPolicy:n}:{},...Me?{stdin:Me}:{},...kt?{stdout:kt}:{},...xt?{stderr:xt}:{}}),new Jo},Ae={...{__init:()=>0,__deinit:()=>0,__proc_exit:g=>Oe(Number(g)),__cl_get_argc:()=>p.length,__cl_get_argv_len:g=>p[Number(g)]?.byteLength??0,__cl_copy_argv:(g,N)=>{const P=p[Number(N)];return P?(pe(Number(g),P),0):-1},__get_init_envfile:(g,N)=>et?oe.copyCString(Number(g),et,Number(N)):0,SYS_write:(g,N,P)=>ve(Number(g),j(Number(N),Number(P))),SYS_writev:(g,N,P)=>{let $=0n;for(let z=0;z<Number(P);z+=1){const te=Number(N)+z*8;Er(V(),te,8);const ye=me().getUint32(te,!0),ae=me().getUint32(te+4,!0),Me=ve(Number(g),j(ye,ae));if(Me<0n)return Me;$+=Me}return $},SYS_exit:g=>Oe(Number(g),"SYS_exit"),SYS_exit_group:g=>Oe(Number(g),"SYS_exit_group"),SYS_getpid:()=>BigInt(b),SYS_getppid:()=>BigInt(zt),SYS_gettid:()=>BigInt(b),SYS_getuid:()=>1000n,SYS_geteuid:()=>1000n,SYS_getgid:()=>1000n,SYS_getegid:()=>1000n,SYS_set_tid_address:()=>BigInt(b),SYS_sched_yield:()=>0n,SYS_sched_setscheduler:()=>0n,SYS_tkill:(g,N)=>Ie(Number(N)),...wh(V,()=>t.codec?.version===1,()=>D),SYS_browser_spawn:(...g)=>ln(g),SYS_browser_spawn_confined_v1:Dc(V,()=>t.browserProcess?.filesystemPolicyVersion===1,ln),SYS_fork:ts,SYS_execve:(g,N,P)=>fn(Number(g),Number(N),Number(P)),SYS_wait4:(g,N,P)=>{for(;;){const $=es(Number(g),Number(N),Number(P));if($!==-4n||!tt.deliver(!0))return $}},SYS_pidfd_open:()=>-38n,SYS_kill:(g,N)=>{if(Number(g)===b||Number(g)===0)return Ie(Number(N));const P=Math.abs(Number(g));return Ee?.hasChild(P)?(t.browserProcess?.kill?.(P,Number(N)),0n):-3n},SYS_setpgid:()=>0n,SYS_getpgid:g=>BigInt(Number(g)===0?b:Math.abs(Number(g))),__wasm_thread_spawn:(g,N)=>{const P=de?.spawn(Number(g),Number(N),tt.mask)??-11;if(P===-11&&!on){on=!0;const $=`[WALI] pthread_create answered -EAGAIN: all ${be} worker slots are in use. The pool is the process's whole thread budget and does not grow, so this is a QUOTA, not a cpu count -- sysconf(_SC_NPROCESSORS_ONLN) answers ${sn.reportedCpuCount()} here and a library that opens more than one pool from that number wants a multiple of it. Raise the program's requirements.workers, or state the library's concurrency.`;console.error($),t.onDiagnostic?.($)}return P},SYS_clock_gettime:(g,N)=>{const P=Ch(Number(g));return P===void 0?-vh:(Uh(me(),Number(N),P),0n)},SYS_gettimeofday:g=>{if(Number(g)!==0){const N=BigInt(Math.floor(ge()*1e3));Er(V(),Number(g),16),me().setBigInt64(Number(g),N/1000000n,!0),me().setBigInt64(Number(g)+8,N%1000000n,!0)}return 0n},SYS_getrandom:(g,N)=>{const P=T().subarray(Number(g),Number(g)+Number(N));return Er(V(),Number(g),Number(N)),Wh(P),BigInt(P.byteLength)},...xe.imports(),...$t,...tt.imports(),...Wt,...Ee?Ee.imports({...Wt,...cn}):cn,SYS_ioctl:(g,N,P)=>nr.ioctl(Number(g),Number(N))??oe.ioctl(Number(g),Number(N))??$t.SYS_ioctl(g,N,P),SYS_prctl:(g,...N)=>Number(g)!==da?0n:ne?ne.syscall("SYS_prctl",[g,...N]):He.SYS_prctl(g,...N)},...t.imports};let Rr=0;if(Ae.SYS_select??=bh(V,(g,N,P)=>Ae.SYS_poll(g,N,P),()=>Rr||=Number(xe.imports().SYS_mmap(0,Sh,3,34,-1,0))),U&&Ye)for(const[g,N]of Object.entries(Ye.ownedFileImports(Ae)))t.imports?.[g]||(Ae[g]=N);const ar={};for(const g of a){const N=Ae[g.name]??Th(g.name,t.onDiagnostic),P=(!ne||U)&&Yh.has(g.name),$={calls:0,ms:0,sampled:P};M.set(g.name,$),ar[g.name]=(...z)=>{t.onSyscall?.(g.name,z),U&&v.pump();const te=!P||($.calls&Qo-1)===0,ye=te?performance.now():0;try{const ae=N(...z);return t.onSyscallResult?.(g.name,ae),tt.deliver(ae===-4n),ae}finally{$.calls+=1,te&&($.ms+=(performance.now()-ye)*(P?Qo:1))}}}const nt={...X?{memory:X}:{},_Unwind_Backtrace:()=>5,_Unwind_FindEnclosingFunction:g=>g,_Unwind_GetCFA:()=>0};if(W=await WebAssembly.instantiate(i,{wali:ar,env:nt}),t.forkState){T().set(new Uint8Array(t.forkState.memory));for(const[g,N]of Object.entries(t.forkState.globals)){const P=W.exports[g];if(!(P instanceof WebAssembly.Global))throw new Error(`Fork snapshot global ${g} is not exported.`);P.value=N}xe.restoreFork(t.forkState.mappings),$t.SYS_umask(t.forkState.umask)}else if(typeof W.exports.asyncify_start_unwind=="function"){const g=W.exports.__stack_pointer;if(!(g instanceof WebAssembly.Global))throw new Error("Asyncify fork requires --export=__stack_pointer at link.");const N=Number(g.value);if(N<=0)throw new Error("Asyncify fork requires a nonempty module stack.");ee=V().buffer.byteLength,V().grow(Math.ceil((N+8)/65536)),me().setUint32(ee+4,ee+8+N,!0)}if(t.codec?.version===1)try{ie=await ci.create(V()),D=new yh(ie.createChannel())}catch(g){console.warn("[WALI] the codec bridge is unavailable:",g),ie=void 0,D=void 0}if(Te){if(!X)throw new Error("A threaded WALI module must be linked with --import-memory so browser workers can share its process memory.");const g=t.memoryLayout??(e instanceof WebAssembly.Module?void 0:Xn(e instanceof Uint8Array?e:new Uint8Array(e)));de=new wf({module:i,memory:X,onDemand:g?.passiveData===!0,mmapCursor:xe.allocatorControl(),sharedMmapRegistry:mt,fatalState:O.buffer,imports:o,size:be,pid:b,executablePath:dt,argv:y,cwd:oe.currentWorkingDirectory(),stdioAliasRegistry:Se.buffer,sharedPipes:ue,signals:L,childPidAllocator:De.buffer,...r?{inheritedFilesystemPolicy:r}:{},...t.browserProcessPorts?{browserProcessPorts:t.browserProcessPorts}:{},...t.browserProcess?.filesystemPolicyVersion===1?{childFilesystemPolicyVersion:1}:{},...t.threadOutputPorts?{outputPorts:t.threadOutputPorts}:{},...d instanceof Xs?{stdin:d.buffer}:{},terminal:t.terminal===!0,onStdout:N=>{ve(1,N)},onStderr:N=>{ve(2,N)},...se?{network:se}:{},...ne?{filesystem:ne}:{},...ie?{codec:ie}:{}}),await de.initialize()}const hn=W.exports._start;if(typeof hn!="function")throw new Error("WALI module does not export _start.");U&&v?.closePort(),k=performance.now();let cr=0,It=!1;try{try{for(Ve&&Ge("asyncify_start_rewind",ee);hn(),!!rt;){Ge("asyncify_stop_unwind"),rt=!1;const g=t.memoryLayout??(e instanceof WebAssembly.Module?void 0:Xn(e instanceof Uint8Array?e:new Uint8Array(e)));if(!g)throw new Error("Fork requires the module's imported memory layout.");const N={};for(const[ye,ae]of Object.entries(W.exports))if(ae instanceof WebAssembly.Global)try{ae.value=ae.value,N[ye]=ae.value}catch{}const P=new SharedArrayBuffer(8*Int32Array.BYTES_PER_ELEMENT),$=new SharedArrayBuffer(Zs);wt=Atomics.add(De,0,1);const z=Ee.registerChild(wt,{control:P,response:$});if(z<0)throw new Error(`Fork child registration failed: ${z}`);const te=Number($t.SYS_umask(0));$t.SYS_umask(te),t.onDiagnostic?.(`[WALI] fork snapshot: ${V().buffer.byteLength} bytes, Asyncify stack ${me().getUint32(ee,!0)-ee-8} bytes.`),t.browserProcess.fork({module:i,memoryLayout:g,pid:wt,control:P,response:$,descriptorTable:ne.copyForForkChannel(),childPidAllocator:De.buffer,argv:y,env:{...t.env},cwd:Ht(),executablePath:dt,...n?{filesystemPolicy:n}:{},forkState:{control:P,response:$,memory:T().slice().buffer,globals:N,allocator:xe.allocatorControl().slice(0),mappings:xe.forkSnapshot(),asyncifyData:ee,umask:te,parentPid:b}}),Ve=!0,Ge("asyncify_start_rewind",ee)}}catch(g){if(g instanceof Jo)It=!0;else if(g instanceof Zo||g instanceof Sa)cr=g.code;else{if(g instanceof Ca)throw g;{const N=g instanceof Error?g.stack??g.message:String(g),P=Atomics.load(O,1),$=de?.diagnostics(P>=0?P:void 0)??[];throw new Error(`${N}
|
|
12
12
|
WALI stdout:
|
|
13
13
|
${Vr.decode(Tn(c))}
|
|
14
14
|
WALI stderr:
|
|
15
15
|
${Vr.decode(Tn(f))}`+($.length>0?`
|
|
16
16
|
WALI pthread diagnostics:
|
|
17
17
|
${$.join(`
|
|
18
|
-
`)}`:""),{cause:g})}}}}finally{oh(),de?.terminate(),se?.terminate(),ie?.terminate(),et&&ke?.existsSync(et)&&ke.unlinkSync(et),v&&t.filesystemUpdatePort&&t.filesystem?.replaceSnapshot?(t.filesystem.replaceSnapshot(v.finalSnapshot()),t.onFilesystemFinalized?.()):he(),ne?.closeProcess(),ne||oe.descriptors.exit(),v?.terminate(),Ui(void 0)}const Ce=performance.now()-S;if(Ce>Oh){const g=[...M].filter(([,$])=>$.calls>0),N=g.reduce(($,[,z])=>$+z.ms,0),P=g.sort(($,z)=>z[1].ms-$[1].ms).slice(0,8).map(([$,z])=>`${$.replace(/^SYS_/u,"")} ${z.calls}x ${z.sampled?"~":""}${Math.round(z.ms)}ms`);console.log("[wali-profile]",JSON.stringify({argv:y.slice(0,3),wallMs:Math.round(Ce),setupMs:Math.round(k-S),guestMs:Math.round(performance.now()-k),syscallMs:Math.round(N),top:P,locks:`${Qe.waited.calls-I.calls}x ${Math.round(Qe.waited.ms-I.ms)}ms`}))}return{exitCode:cr,...It?{replaced:It}:{},stdout:Vr.decode(Tn(c)),stderr:Vr.decode(Tn(f)),imports:o}}}const Bh=new Set(["SYS_fork","SYS_execve","SYS_browser_spawn","SYS_browser_spawn_confined_v1","SYS_wait4"]),Oh=2e3,Yh=new Set(["SYS_open","SYS_openat","SYS_stat","SYS_lstat","SYS_fstat","SYS_newfstatat","SYS_statx","SYS_lseek","SYS_access","SYS_faccessat","SYS_faccessat2","SYS_readlink","SYS_readlinkat","SYS_getcwd","SYS_getdents64","SYS_mkdir","SYS_mkdirat","SYS_unlink","SYS_unlinkat","SYS_rename","SYS_renameat","SYS_rmdir","SYS_chmod","SYS_fchmod","SYS_utimensat","SYS_ftruncate","SYS_truncate","SYS_mmap","SYS_munmap","SYS_mprotect","SYS_madvise","SYS_mremap","SYS_brk","SYS_getpid","SYS_gettid","SYS_getppid","SYS_getuid","SYS_geteuid","SYS_getgid","SYS_getegid","SYS_clock_gettime","SYS_clock_getres","SYS_gettimeofday","SYS_rt_sigprocmask","SYS_rt_sigaction","SYS_uname","SYS_umask","SYS_dup","SYS_dup2","SYS_dup3","SYS_close","SYS_fcntl"]),Qo=16;function Dh(s){if(s===void 0)return 2;if(!Number.isSafeInteger(s)||s<=1||s>2147483647)throw new Error("WALI pid must be an integer between 2 and 2147483647.");return s}function Er(s,e,t){if(!Number.isSafeInteger(e)||!Number.isSafeInteger(t)||e<0||t<0||e+t>s.buffer.byteLength)throw new WebAssembly.RuntimeError(`WALI memory access is out of bounds: ${e}+${t}.`)}function Tn(s){const e=new Uint8Array(s.reduce((r,n)=>r+n.byteLength,0));let t=0;for(const r of s)e.set(r,t),t+=r.byteLength;return e}function Ch(s){if(s===0){const e=typeof performance>"u"?Date.now():performance.timeOrigin+performance.now();return BigInt(Math.floor(e*1e6))}if(s===1||s===4)return BigInt(Math.floor(Vn()*1e6))}function Uh(s,e,t){if(e<0||e+16>s.byteLength)throw new WebAssembly.RuntimeError("WALI timespec pointer is out of bounds.");s.setBigInt64(e,t/1000000000n,!0),s.setBigInt64(e+8,t%1000000000n,!0)}function Wh(s){if(!globalThis.crypto?.getRandomValues)throw new Error("Web Crypto is required for SYS_getrandom.");for(let e=0;e<s.byteLength;e+=65536){const t=new Uint8Array(Math.min(65536,s.byteLength-e));globalThis.crypto.getRandomValues(t),s.set(t,e)}}class Zn extends Map{names=new Map;static rooted(){const e=new Zn;return e.set("/",Gh()),e}set(e,t){if(!this.has(e)&&e!=="/"){const r=Ct(e);let n=this.names.get(r);n||(n=new Set,this.names.set(r,n)),n.add(e.slice(r==="/"?1:r.length+1))}return super.set(e,t)}delete(e){if(!super.delete(e))return!1;const t=Ct(e),r=this.names.get(t);return r?.delete(e.slice(t==="/"?1:t.length+1)),r?.size===0&&this.names.delete(t),!0}clear(){super.clear(),this.names.clear()}namesIn(e){return[...this.names.get(e)??[]]}subtree(e){const t=[],r=[e];for(;r.length>0;){const n=r.shift(),i=this.get(n);if(i){t.push([n,i]);for(const o of this.names.get(n)??[])r.push(n==="/"?`/${o}`:`${n}/${o}`)}}return t}}class _r{nodes=Zn.rooted();lower;rangeBlocks=new Map;rangeBlockBytes=0;hidden=new Set;nextInode=2;mutationDepth=0;mutated=!1;mutationHandler;changedPaths;static fromSnapshot(e){const t=new _r;return t.replaceSnapshot(e),t}static fromStore(e,t){const r=new _r;return r.lower=e,r.mutate(()=>{const n=t.files.filter(i=>{const o=i,a=q(o.path);if(a==="/")return!1;if(o.content!==void 0)return!0;const c=e.entries.get(a);return!c||o.type==="directory"!=(c.type==="directory")?!0:o.mode!==void 0&&o.mode!==(c.mode&4095)||o.mtimeMs!==void 0&&o.mtimeMs!==c.mtimeMs});for(const i of n.sort((o,a)=>Fn(o.path)-Fn(a.path))){const o=i,a=q(o.path);if(o.type==="directory")r.node(a)||r.mkdirSync(a,{recursive:!0});else if(o.content!==void 0)r.writeFileSync(a,tr(o.content));else if(!r.node(a))continue;const c=r.node(a);c&&(o.mode!==void 0&&(c.mode=o.mode),o.mtimeMs!==void 0&&(c.atimeMs=c.mtimeMs=o.mtimeMs))}r.mutated=!1}),r}node(e){const t=this.nodes.get(e);if(t||!this.lower||e==="/")return t;if(this.isHidden(e))return;const r=this.lower.entries.get(e);if(!r)return;const n=this.lowerNode(e,r);return this.nodes.set(e,n),n}lowerNode(e,t){const r=this.lower;return t.type==="directory"?{type:"directory",fromStore:!0,mode:t.mode&4095,atimeMs:t.mtimeMs,mtimeMs:t.mtimeMs,ino:this.nextInode++}:{type:"file",fromStore:!0,load:()=>r.view?r.view(e):r.read(e),...r.readRange&&t.length>=$h&&r.readsByRange?.(e)?{range:(n,i)=>this.readBlocks(e,t.length,n,i,(o,a)=>r.readRange(e,o,a))}:{},size:t.length,mode:t.mode&4095,atimeMs:t.mtimeMs,mtimeMs:t.mtimeMs,ino:this.nextInode++}}readBlocks(e,t,r,n,i){const o=Math.min(Math.max(0,r),t),a=Math.min(t,o+Math.max(0,n));if(a<=o)return new Uint8Array(0);if(a-o>Hh)return i(o,a-o);const c=Math.floor(o/Gr),f=Math.floor((a-1)/Gr),d=new Uint8Array(a-o);for(let y=c;y<=f;y+=1){const p=`${y}:${e}`;let b=this.rangeBlocks.get(p);if(b)this.rangeBlocks.delete(p);else for(b=i(y*Gr,Gr),this.rangeBlockBytes+=b.byteLength;this.rangeBlockBytes>zh&&this.rangeBlocks.size>0;){const[M,L]=this.rangeBlocks.entries().next().value;this.rangeBlocks.delete(M),this.rangeBlockBytes-=L.byteLength}this.rangeBlocks.set(p,b);const S=y*Gr,I=Math.max(o,S),k=Math.min(a,S+b.byteLength);k>I&&d.set(b.subarray(I-S,k-S),I-o)}return d}toStoreOverlaySnapshot(){if(!this.lower||this.hidden.size>0)return this.toSnapshot();const e=this.lower;return{files:[...this.nodes.entries()].filter(([r,n])=>{if(r==="/")return!1;const i=e.entries.get(r);return!(n.fromStore&&!n.dirty&&i&&n.mode===(i.mode&4095)&&n.mtimeMs===i.mtimeMs)}).map(([r,n])=>n.type==="directory"?{path:r,type:"directory",mode:n.mode,mtimeMs:n.mtimeMs}:n.load&&!n.dirty?this.sized(r,n):{path:r,type:"file",content:ft(n.content??new Uint8Array),mode:n.mode,mtimeMs:n.mtimeMs})}}isHidden(e){if(this.hidden.size===0)return!1;for(let t=e;t!=="/";t=Ct(t))if(this.hidden.has(t))return!0;return!1}hide(e){this.lower?.entries.has(e)&&this.hidden.add(e)}unhide(e){if(!(!this.lower||!this.isHidden(e))){this.hidden.delete(e);for(const t of this.lower.childrenOf(e))this.hidden.add(e==="/"?`/${t}`:`${e}/${t}`)}}everyNode(){const e=[...this.nodes.entries()];if(!this.lower)return e;for(const[t,r]of this.lower.entries)t==="/"||this.nodes.has(t)||this.isHidden(t)||e.push([t,this.lowerNode(t,r)]);return e}setMutationHandler(e){this.mutationHandler=e,this.changedPaths=e?new Set:void 0}takeChangedPaths(){const e=this.changedPaths??new Set;return this.changedPaths=this.changedPaths?new Set:void 0,e}dropChangedPaths(e){if(this.changedPaths)for(const t of e)this.changedPaths.delete(q(t))}writtenEntry(e,t=!1){const r=q(e),n=this.node(r);if(!n)return;const i={mode:n.mode,mtimeMs:n.mtimeMs};return n.type==="directory"?{path:r,type:"directory",...i}:t?{path:r,type:"file",bytes:this.bytesOf(n).slice(),...i}:{path:r,type:"file",content:ft(this.bytesOf(n)),...i}}replaceSnapshot(e){this.mutate(()=>{const t=new Map(this.everyNode());this.lower=void 0,this.hidden.clear(),this.nodes=Zn.rooted();for(const n of t.keys())this.markMutation(n);this.markMutation("/");const r=e.files.slice().sort((n,i)=>Fn(n.path)-Fn(i.path));for(const n of r){const i=n,o=q(i.path);if(o!=="/")if(i.type==="directory")this.mkdirSync(o,{recursive:!0});else if(i.content!==void 0){this.writeFileSync(o,tr(i.content));const c=this.nodes.get(o);c&&(c.dirty=!1)}else{const c=t.get(o);this.mkdirSync(Ct(o),{recursive:!0}),c?.type==="file"&&this.nodes.set(o,c)}const a=this.node(o);a&&(i.mode!==void 0&&(a.mode=i.mode),i.mtimeMs!==void 0&&(a.atimeMs=a.mtimeMs=i.mtimeMs),this.markMutation(o))}})}toSnapshot(){return{files:[...this.nodes.entries()].map(([e,t])=>t.type==="directory"?{path:e,type:"directory",mode:t.mode,mtimeMs:t.mtimeMs}:t.load&&!t.dirty?this.sized(e,t):{path:e,type:"file",content:ft(t.content??new Uint8Array),mode:t.mode,mtimeMs:t.mtimeMs}).concat(this.untouchedStoreEntries())}}untouchedStoreEntries(){const e=[];if(!this.lower)return e;for(const[t,r]of this.lower.entries)t==="/"||this.nodes.has(t)||this.isHidden(t)||e.push(r.type==="directory"?{path:t,type:"directory",mode:r.mode&4095,mtimeMs:r.mtimeMs}:{path:t,type:"file",size:r.length,mode:r.mode&4095,mtimeMs:r.mtimeMs});return e}toWrittenSnapshot(){return{files:[...this.nodes.entries()].map(([e,t])=>t.type==="directory"?{path:e,type:"directory",mode:t.mode,mtimeMs:t.mtimeMs}:t.dirty?{path:e,type:"file",content:ft(t.content??new Uint8Array),mode:t.mode,mtimeMs:t.mtimeMs}:this.sized(e,t)).concat(this.untouchedStoreEntries())}}sized(e,t){return{path:e,type:"file",size:t.content?.byteLength??t.size??0,mode:t.mode,mtimeMs:t.mtimeMs}}existsSync(e){return this.node(q(e))!==void 0}statSync(e){const t=q(e),r=this.node(t);if(!r)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);const n=r.content?.byteLength??r.size??0;return{isFile:()=>r.type==="file",isDirectory:()=>r.type==="directory",size:n,mode:r.mode,mtimeMs:r.mtimeMs,atimeMs:r.atimeMs,ctimeMs:r.mtimeMs,nlink:1,uid:1e3,gid:1e3,dev:1,ino:r.ino,rdev:0,blksize:4096,blocks:Math.ceil(n/512)}}lstatSync(e){return this.statSync(e)}async readFile(e){return this.readFileSync(e)}readFileSync(e){const t=q(e),r=this.node(t);if(!r)throw new Error(`ENOENT: no such file, open '${t}'`);if(r.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);return this.bytesOf(r).slice()}linkTargetSync(e,t,r,n,i=!1){const o=this.node(i?e:q(e));if(o?.type==="file"){if(o.link===void 0){const a=o.content?.byteLength??o.size??0;o.link=a<t||a>r?null:n(this.bytesOf(o))??null}return o.link??void 0}}bytesOf(e){return e.content===void 0&&e.load&&(e.content=e.load(),e.size=e.content.byteLength),e.content??new Uint8Array}viewRangeSync(e,t,r){const n=this.node(q(e));if(!n)throw new Error(`ENOENT: no such file, open '${q(e)}'`);if(n.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${q(e)}'`);return n.range&&n.content===void 0?n.range(t,r):this.bytesOf(n).subarray(t,t+r)}readRangeSync(e,t,r){const n=q(e),i=this.node(n);if(!i)throw new Error(`ENOENT: no such file, open '${n}'`);if(i.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${n}'`);return i.range&&i.content===void 0?i.range(t,r):this.bytesOf(i).slice(t,t+r)}writeRangeSync(e,t,r){this.mutate(()=>{const n=q(e);this.mkdirSync(Ct(n),{recursive:!0});const i=this.isHidden(n);this.unhide(n);const o=i?this.nodes.get(n):this.node(n);if(o?.type==="directory")throw new Error(`EISDIR: illegal operation on a directory, write '${n}'`);const a=o?this.bytesOf(o):new Uint8Array,c=t+r.byteLength;let f;if(c<=a.byteLength)f=o?.dirty?a:a.slice();else if(c<=a.buffer.byteLength-a.byteOffset&&o?.dirty)f=new Uint8Array(a.buffer,a.byteOffset,c),f.fill(0,a.byteLength,t);else{const d=this.takeSpare(c);f=new Uint8Array(d??new ArrayBuffer(Math.max(c,a.byteLength*2,4096)),0,c),f.set(a),d&&f.fill(0,a.byteLength,t),o?.dirty&&this.release(a)}f.set(r,t),this.nodes.set(n,{type:"file",content:f,dirty:!0,mode:o?.type==="file"?o.mode:420,atimeMs:ge(),mtimeMs:ge(),ino:o?.type==="file"?o.ino:this.nextInode++}),this.markMutation(n)})}truncateSync(e,t){this.mutate(()=>{const r=q(e),n=this.node(r);if(!n)throw new Error(`ENOENT: no such file, truncate '${r}'`);if(n.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, truncate '${r}'`);let i;if(t===0&&n.content===void 0)i=new Uint8Array;else{const o=this.bytesOf(n),a=o.buffer.byteLength-o.byteOffset;n.dirty&&t<=a&&(a<=Vs||t*4>=a)?(i=new Uint8Array(o.buffer,o.byteOffset,t),i.fill(0,o.byteLength)):(i=new Uint8Array(t),i.set(o.subarray(0,t)),n.dirty&&this.release(o))}this.nodes.set(r,{type:"file",content:i,dirty:!0,mode:n.mode,atimeMs:ge(),mtimeMs:ge(),ino:n.ino}),this.markMutation(r)})}spares=[];release(e){const t=e.buffer;if(!(t instanceof ArrayBuffer)||t.byteLength<Vs||t.byteLength>qo)return;this.spares.push(t);let r=this.spares.reduce((n,i)=>n+i.byteLength,0);for(;this.spares.length>Vh||r>qo;)r-=this.spares.shift().byteLength}takeSpare(e){const t=Math.max(e*4,Vs*4);let r=-1;return this.spares.forEach((n,i)=>{n.byteLength>=e&&n.byteLength<=t&&(r<0||n.byteLength<this.spares[r].byteLength)&&(r=i)}),r<0?void 0:this.spares.splice(r,1)[0]}writeFileSync(e,t){this.mutate(()=>{const r=q(e);this.mkdirSync(Ct(r),{recursive:!0});const n=this.isHidden(r);this.unhide(r);const i=n?this.nodes.get(r):this.node(r);i?.type==="file"&&i.dirty&&i.content&&this.release(i.content),this.nodes.set(r,{type:"file",content:typeof t=="string"?new TextEncoder().encode(t):t.slice(),dirty:!0,mode:i?.type==="file"?i.mode:420,atimeMs:ge(),mtimeMs:ge(),ino:i?.type==="file"?i.ino:this.nextInode++}),this.markMutation(r)})}mkdirSync(e,t){this.mutate(()=>{const r=q(e);if(r==="/")return;if(!this.node(r)&&this.node(Ct(r))?.type==="directory"){this.unhide(r);const a=ge();this.nodes.set(r,{type:"directory",mode:493,atimeMs:a,mtimeMs:a,ino:this.nextInode++}),this.markMutation(r);return}const n=r.slice(1).split("/");let i="";for(let o=0;o<n.length;o+=1){i+=`/${n[o]}`;const a=this.node(i);if(a?.type==="file")throw new Error(`ENOTDIR: not a directory, mkdir '${i}'`);if(a)continue;if(!t?.recursive&&o!==n.length-1)throw new Error(`ENOENT: no such directory, mkdir '${i}'`);this.unhide(i);const c=ge();this.nodes.set(i,{type:"directory",mode:493,atimeMs:c,mtimeMs:c,ino:this.nextInode++}),this.markMutation(i)}})}readdirSync(e){const t=q(e),r=this.node(t);if(!r)throw new Error(`ENOENT: no such directory, scandir '${t}'`);if(r.type!=="directory")throw new Error(`ENOTDIR: not a directory, scandir '${t}'`);const n=new Set(this.nodes.namesIn(t));if(this.lower&&!this.isHidden(t)){const i=t==="/"?[...new Set([...this.lower.childrenOf("/"),...sa.filter(o=>this.lower.entries.has(o)).map(o=>o.slice(1))])]:this.lower.childrenOf(t);for(const o of i)this.isHidden(t==="/"?`/${o}`:`${t}/${o}`)||n.add(o)}return[...n]}unlinkSync(e){this.mutate(()=>{const t=q(e),r=this.node(t);if(!r)throw new Error(`ENOENT: no such file, unlink '${t}'`);if(r.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, unlink '${t}'`);r.dirty&&r.content&&this.release(r.content),this.nodes.delete(t),this.hide(t),this.markMutation(t)})}rmdirSync(e){this.mutate(()=>{const t=q(e);if(t==="/")throw new Error("EPERM: cannot remove root directory");const r=this.node(t);if(!r)throw new Error(`ENOENT: no such directory, rmdir '${t}'`);if(r.type!=="directory")throw new Error(`ENOTDIR: not a directory, rmdir '${t}'`);if(this.readdirSync(t).length>0)throw new Error(`ENOTEMPTY: directory not empty, rmdir '${t}'`);this.nodes.delete(t),this.hide(t),this.markMutation(t)})}renameSync(e,t){this.mutate(()=>{const r=q(e),n=q(t);if(!this.node(r))throw new Error(`ENOENT: no such file or directory, rename '${r}'`);if(this.mkdirSync(Ct(n),{recursive:!0}),this.lower&&!this.isHidden(r))for(const[a]of this.lower.descendants(r))this.node(a);const o=this.nodes.subtree(r);for(const[a]of o)this.nodes.delete(a);this.hide(r),this.unhide(n);for(const[a,c]of o){if(c.type==="file"){const y=this.bytesOf(c);c.dirty||(c.content=y.slice()),c.dirty=!0}const f=`${n}${a.slice(r.length)}`,d=this.nodes.get(f);d?.type==="file"&&d.dirty&&d.content&&d!==c&&this.release(d.content),this.nodes.set(f,c),this.markMutation(a),this.markMutation(f)}})}reserveInodes(e){const t=this.nextInode;return this.nextInode+=e,t}restoreNodeSync(e,t){this.mutate(()=>{const r=q(e);this.unhide(r);const n=this.nodes.get(r);n?.type==="file"&&n.dirty&&n.content&&this.release(n.content),this.nodes.set(r,t.directory?{type:"directory",mode:t.mode&4095,atimeMs:t.atimeMs,mtimeMs:t.mtimeMs,ino:t.ino}:{type:"file",content:t.content??new Uint8Array,dirty:!0,mode:t.mode&4095,atimeMs:t.atimeMs,mtimeMs:t.mtimeMs,ino:t.ino}),this.markMutation(r)})}chmodSync(e,t){this.mutate(()=>{const r=q(e),n=this.node(r);if(!n)throw new Error(`ENOENT: no such file or directory, chmod '${r}'`);n.mode=t&4095,this.markMutation(r)})}utimesSync(e,t,r){this.mutate(()=>{const n=q(e),i=this.node(n);if(!i)throw new Error(`ENOENT: no such file or directory, utimes '${n}'`);i.atimeMs=t instanceof Date?t.getTime():t,i.mtimeMs=r instanceof Date?r.getTime():r,this.markMutation(n)})}mutate(e){this.mutationDepth+=1;try{return e()}finally{this.mutationDepth-=1,this.mutationDepth===0&&this.mutated&&(this.mutated=!1,this.mutationHandler?.())}}markMutation(e){this.mutated=!0,this.changedPaths?.add(q(e))}}const $h=1<<20,Gr=64*1024,zh=8*1024*1024,Hh=1<<20,Vs=64*1024,Vh=2,qo=32*1024*1024;function Gh(){const s=ge();return{type:"directory",mode:493,atimeMs:s,mtimeMs:s,ino:1}}function q(s){if(jh(s))return s;const e=[];for(const t of`/${s}`.split("/"))!t||t==="."||(t===".."?e.pop():e.push(t));return`/${e.join("/")}`}function jh(s){if(s.charCodeAt(0)!==47)return!1;if(s.length===1)return!0;let e=1;for(let t=1;t<=s.length;t+=1){if(t<s.length&&s.charCodeAt(t)!==47)continue;const r=t-e;if(r===0||s.charCodeAt(e)===46&&(r===1||r===2&&s.charCodeAt(e+1)===46))return!1;e=t+1}return!0}function Ct(s){return s.slice(0,s.lastIndexOf("/"))||"/"}function Fn(s){let e=1;for(let t=0;t<s.length;t+=1)s.charCodeAt(t)===47&&(e+=1);return e}const Kh=`${hc}/.volter-tree-complete`;async function Xh(s,e){const t=Ks(s);try{if((await t.initialize(e,{readOnly:!0})||t.opened())&&t.entries.has(Kh))return t}catch(r){throw t.close(),r}t.close()}const ea=new WeakMap;async function Jh(s,e){const t=[...new Set((s??[]).flatMap(o=>o.store===void 0?[]:[o.store]))];if(t.length===0)return;e??={navigator:globalThis.navigator};const r=e;let n=ea.get(r.navigator);n||ea.set(r.navigator,n=new Map);const i=new Map;for(const o of t){let a=n.get(o);a||(a=uc(o,r.navigator.locks).then(()=>Xh(r,o)),n.set(o,a));let c;try{c=await a}catch(f){throw n.delete(o),new Error(`The installed tree ${o} would not open: ${f instanceof Error?f.message:String(f)}`,{cause:f})}if(!c)throw n.delete(o),new Error(`The installed tree ${o} is not on this origin's disk to read.`);i.set(o,c)}return i}const Bn=new Map,On=new Map;async function Zh(s){const e=On.get(s);if(e){const n=await e.catch(()=>{});if(n)try{return await n.refresh(),n}catch{n.close()}On.delete(s)}const t=_c({navigator:globalThis.navigator},s);On.set(s,t);const r=await t.catch(()=>{});return r||On.delete(s),r}self.onmessage=s=>{Qh(s.data)};async function Qh(s){const e=performance.now();let t,r,n;try{n=await Jh(s.layers)}catch(f){Xe({type:"result",id:s.id,filesystem:s.filesystem,error:f instanceof Error?f.message:String(f)});return}if(s.store){if(t=await Zh(s.store.projectId),!t){Xe({type:"result",id:s.id,filesystem:s.filesystem,error:"The project's store is not there to read."});return}r=_r.fromStore(Pi(t,s.layers,n),s.filesystem)}else s.layers?r=_r.fromStore(Pi(void 0,s.layers,n),s.filesystem):r=_r.fromSnapshot(s.filesystem);const i=r.toSnapshot();r.mkdirSync("/tmp",{recursive:!0}),r.mkdirSync("/home/user",{recursive:!0}),r.mkdirSync(s.cwd,{recursive:!0});const o=ko(i,r.toSnapshot(),{written:!0});s.filesystemUpdatePort&&(o.files.length>0||o.removed.length>0)&&s.filesystemUpdatePort.postMessage({type:"filesystem",patch:o});let a=!1;const c=performance.now()-e;try{const f=performance.now(),d=await ed(s.url,s.integrity,s.compiled,L=>Xe({type:"compiled",id:s.id,compiled:L})),y=performance.now()-f,p=d.layout,b=p?ba(p):void 0,S=await new Fh().run(d.module,{argv:s.argv,...s.pid!==void 0?{pid:s.pid}:{},...s.parentPid!==void 0?{parentPid:s.parentPid}:{},...s.childPidAllocator?{childPidAllocator:s.childPidAllocator}:{},...p?{memoryLayout:p}:{},...s.descriptorTable?{descriptorTable:s.descriptorTable}:{},...s.executablePath?{executablePath:s.executablePath}:{},cwd:s.cwd,env:s.env,stdin:new Xs(s.stdin),terminal:s.terminal,filesystem:r,...s.filesystemPolicy?{filesystemPolicy:s.filesystemPolicy}:{},...s.store?{store:s.store}:{},...s.layers?{layers:s.layers}:{},...s.privateRoots?{privateRoots:s.privateRoots}:{},...b?{memory:b}:{},threadPoolSize:s.threadPoolSize,...s.codec?{codec:s.codec}:{},...s.network?{network:{...s.network,...s.loopbackPort?{loopbackPort:s.loopbackPort}:{}}}:{},...s.browserProcessPorts?{browserProcessPorts:s.browserProcessPorts}:{},...s.threadOutputPorts?{threadOutputPorts:s.threadOutputPorts}:{},...s.filesystemUpdatePort?{filesystemUpdatePort:s.filesystemUpdatePort}:{},...s.fileLocks?{fileLocks:s.fileLocks}:{},fileCoherence:s.fileCoherence,signalState:s.signalState,browserProcess:{fork:L=>Xe({type:"fork",id:s.id,...L,stdin:s.stdin,threadPoolSize:s.threadPoolSize,...s.network&&s.network.allowedHosts.length>0?{network:s.network}:{}}),...s.childFilesystemPolicyVersion===1?{filesystemPolicyVersion:1}:{},spawn:L=>Xe({type:"spawn",id:s.id,...L,filesystemPatch:ko(i,r.toSnapshot(),{written:!0})}),kill:(L,W)=>Xe({type:"kill",id:s.id,pid:L,signal:W}),restore:L=>r.replaceSnapshot(L)},onStdout:L=>Xe({type:"stdout",id:s.id,chunk:L}),onStderr:L=>Xe({type:"stderr",id:s.id,chunk:new TextDecoder().decode(L)}),onDiagnostic:L=>Xe({type:"diagnostic",id:s.id,message:L}),onFilesystemFinalized:()=>{a=!0}}),I=performance.now(),k=r.toSnapshot(),M=performance.now()-e;M>2e3&&console.log("[wali-profile]",JSON.stringify({argv:s.argv.slice(0,3),worker:{filesystemMs:Math.round(c),moduleMs:Math.round(y),snapshotMs:Math.round(performance.now()-I),totalMs:Math.round(M)}})),Xe({type:"result",id:s.id,filesystem:k,filesystemFinalized:a,result:{stdout:S.stdout,stderr:S.stderr,exitCode:S.exitCode}})}catch(f){Xe({type:"result",id:s.id,filesystem:r.toSnapshot(),filesystemFinalized:a,error:qh(f)})}}const ta=48*1024;function qh(s){const e=s instanceof Error?s.stack??s.message:String(s),t=e.split(`
|
|
18
|
+
`)}`:""),{cause:g})}}}}finally{oh(),de?.terminate(),se?.terminate(),ie?.terminate(),et&&ke?.existsSync(et)&&ke.unlinkSync(et),v&&t.filesystemUpdatePort&&t.filesystem?.replaceSnapshot?(t.filesystem.replaceSnapshot(v.finalSnapshot()),t.onFilesystemFinalized?.()):he(),ne?.closeProcess(),ne||oe.descriptors.exit(),v?.terminate(),Ui(void 0)}const Ce=performance.now()-S;if(Ce>Oh){const g=[...M].filter(([,$])=>$.calls>0),N=g.reduce(($,[,z])=>$+z.ms,0),P=g.sort(($,z)=>z[1].ms-$[1].ms).slice(0,8).map(([$,z])=>`${$.replace(/^SYS_/u,"")} ${z.calls}x ${z.sampled?"~":""}${Math.round(z.ms)}ms`);console.log("[wali-profile]",JSON.stringify({argv:y.slice(0,3),wallMs:Math.round(Ce),setupMs:Math.round(k-S),guestMs:Math.round(performance.now()-k),syscallMs:Math.round(N),top:P,locks:`${Qe.waited.calls-I.calls}x ${Math.round(Qe.waited.ms-I.ms)}ms`}))}return{exitCode:cr,...It?{replaced:It}:{},stdout:Vr.decode(Tn(c)),stderr:Vr.decode(Tn(f)),imports:o}}}const Bh=new Set(["SYS_fork","SYS_execve","SYS_browser_spawn","SYS_browser_spawn_confined_v1","SYS_wait4"]),Oh=2e3,Yh=new Set(["SYS_open","SYS_openat","SYS_stat","SYS_lstat","SYS_fstat","SYS_newfstatat","SYS_statx","SYS_lseek","SYS_access","SYS_faccessat","SYS_faccessat2","SYS_readlink","SYS_readlinkat","SYS_getcwd","SYS_getdents64","SYS_mkdir","SYS_mkdirat","SYS_unlink","SYS_unlinkat","SYS_rename","SYS_renameat","SYS_rmdir","SYS_chmod","SYS_fchmod","SYS_utimensat","SYS_ftruncate","SYS_truncate","SYS_mmap","SYS_munmap","SYS_mprotect","SYS_madvise","SYS_mremap","SYS_brk","SYS_getpid","SYS_gettid","SYS_getppid","SYS_getuid","SYS_geteuid","SYS_getgid","SYS_getegid","SYS_clock_gettime","SYS_clock_getres","SYS_gettimeofday","SYS_rt_sigprocmask","SYS_rt_sigaction","SYS_uname","SYS_umask","SYS_dup","SYS_dup2","SYS_dup3","SYS_close","SYS_fcntl"]),Qo=16;function Dh(s){if(s===void 0)return 2;if(!Number.isSafeInteger(s)||s<=1||s>2147483647)throw new Error("WALI pid must be an integer between 2 and 2147483647.");return s}function Er(s,e,t){if(!Number.isSafeInteger(e)||!Number.isSafeInteger(t)||e<0||t<0||e+t>s.buffer.byteLength)throw new WebAssembly.RuntimeError(`WALI memory access is out of bounds: ${e}+${t}.`)}function Tn(s){const e=new Uint8Array(s.reduce((r,n)=>r+n.byteLength,0));let t=0;for(const r of s)e.set(r,t),t+=r.byteLength;return e}function Ch(s){if(s===0){const e=typeof performance>"u"?Date.now():performance.timeOrigin+performance.now();return BigInt(Math.floor(e*1e6))}if(s===1||s===4)return BigInt(Math.floor(Vn()*1e6))}function Uh(s,e,t){if(e<0||e+16>s.byteLength)throw new WebAssembly.RuntimeError("WALI timespec pointer is out of bounds.");s.setBigInt64(e,t/1000000000n,!0),s.setBigInt64(e+8,t%1000000000n,!0)}function Wh(s){if(!globalThis.crypto?.getRandomValues)throw new Error("Web Crypto is required for SYS_getrandom.");for(let e=0;e<s.byteLength;e+=65536){const t=new Uint8Array(Math.min(65536,s.byteLength-e));globalThis.crypto.getRandomValues(t),s.set(t,e)}}class Zn extends Map{names=new Map;static rooted(){const e=new Zn;return e.set("/",Gh()),e}set(e,t){if(!this.has(e)&&e!=="/"){const r=Ct(e);let n=this.names.get(r);n||(n=new Set,this.names.set(r,n)),n.add(e.slice(r==="/"?1:r.length+1))}return super.set(e,t)}delete(e){if(!super.delete(e))return!1;const t=Ct(e),r=this.names.get(t);return r?.delete(e.slice(t==="/"?1:t.length+1)),r?.size===0&&this.names.delete(t),!0}clear(){super.clear(),this.names.clear()}namesIn(e){return[...this.names.get(e)??[]]}subtree(e){const t=[],r=[e];for(;r.length>0;){const n=r.shift(),i=this.get(n);if(i){t.push([n,i]);for(const o of this.names.get(n)??[])r.push(n==="/"?`/${o}`:`${n}/${o}`)}}return t}}class _r{nodes=Zn.rooted();lower;rangeBlocks=new Map;rangeBlockBytes=0;hidden=new Set;nextInode=2;mutationDepth=0;mutated=!1;mutationHandler;changedPaths;static fromSnapshot(e){const t=new _r;return t.replaceSnapshot(e),t}static fromStore(e,t){const r=new _r;return r.lower=e,r.mutate(()=>{const n=t.files.filter(i=>{const o=i,a=q(o.path);if(a==="/")return!1;if(o.content!==void 0)return!0;const c=e.entries.get(a);return!c||o.type==="directory"!=(c.type==="directory")?!0:o.mode!==void 0&&o.mode!==(c.mode&4095)||o.mtimeMs!==void 0&&o.mtimeMs!==c.mtimeMs});for(const i of n.sort((o,a)=>Fn(o.path)-Fn(a.path))){const o=i,a=q(o.path);if(o.type==="directory")r.node(a)||r.mkdirSync(a,{recursive:!0});else if(o.content!==void 0)r.writeFileSync(a,tr(o.content));else if(!r.node(a))continue;const c=r.node(a);c&&(o.mode!==void 0&&(c.mode=o.mode),o.mtimeMs!==void 0&&(c.atimeMs=c.mtimeMs=o.mtimeMs))}r.mutated=!1}),r}node(e){const t=this.nodes.get(e);if(t||!this.lower||e==="/")return t;if(this.isHidden(e))return;const r=this.lower.entries.get(e);if(!r)return;const n=this.lowerNode(e,r);return this.nodes.set(e,n),n}lowerNode(e,t){const r=this.lower;return t.type==="directory"?{type:"directory",fromStore:!0,mode:t.mode&4095,atimeMs:t.mtimeMs,mtimeMs:t.mtimeMs,ino:this.nextInode++}:{type:"file",fromStore:!0,load:()=>r.view?r.view(e):r.read(e),...r.readRange&&t.length>=$h&&r.readsByRange?.(e)?{range:(n,i)=>this.readBlocks(e,t.length,n,i,(o,a)=>r.readRange(e,o,a))}:{},size:t.length,mode:t.mode&4095,atimeMs:t.mtimeMs,mtimeMs:t.mtimeMs,ino:this.nextInode++}}readBlocks(e,t,r,n,i){const o=Math.min(Math.max(0,r),t),a=Math.min(t,o+Math.max(0,n));if(a<=o)return new Uint8Array(0);if(a-o>Hh)return i(o,a-o);const c=Math.floor(o/Gr),f=Math.floor((a-1)/Gr),d=new Uint8Array(a-o);for(let y=c;y<=f;y+=1){const p=`${y}:${e}`;let b=this.rangeBlocks.get(p);if(b)this.rangeBlocks.delete(p);else for(b=i(y*Gr,Gr),this.rangeBlockBytes+=b.byteLength;this.rangeBlockBytes>zh&&this.rangeBlocks.size>0;){const[M,L]=this.rangeBlocks.entries().next().value;this.rangeBlocks.delete(M),this.rangeBlockBytes-=L.byteLength}this.rangeBlocks.set(p,b);const S=y*Gr,I=Math.max(o,S),k=Math.min(a,S+b.byteLength);k>I&&d.set(b.subarray(I-S,k-S),I-o)}return d}toStoreOverlaySnapshot(){if(!this.lower||this.hidden.size>0)return this.toSnapshot();const e=this.lower;return{files:[...this.nodes.entries()].filter(([r,n])=>{if(r==="/")return!1;const i=e.entries.get(r);return!(n.fromStore&&!n.dirty&&i&&n.mode===(i.mode&4095)&&n.mtimeMs===i.mtimeMs)}).map(([r,n])=>n.type==="directory"?{path:r,type:"directory",mode:n.mode,mtimeMs:n.mtimeMs}:n.load&&!n.dirty?this.sized(r,n):{path:r,type:"file",content:ft(n.content??new Uint8Array),mode:n.mode,mtimeMs:n.mtimeMs})}}isHidden(e){if(this.hidden.size===0)return!1;for(let t=e;t!=="/";t=Ct(t))if(this.hidden.has(t))return!0;return!1}hide(e){this.lower?.entries.has(e)&&this.hidden.add(e)}unhide(e){if(!(!this.lower||!this.isHidden(e))){this.hidden.delete(e);for(const t of this.lower.childrenOf(e))this.hidden.add(e==="/"?`/${t}`:`${e}/${t}`)}}everyNode(){const e=[...this.nodes.entries()];if(!this.lower)return e;for(const[t,r]of this.lower.entries)t==="/"||this.nodes.has(t)||this.isHidden(t)||e.push([t,this.lowerNode(t,r)]);return e}setMutationHandler(e){this.mutationHandler=e,this.changedPaths=e?new Set:void 0}takeChangedPaths(){const e=this.changedPaths??new Set;return this.changedPaths=this.changedPaths?new Set:void 0,e}dropChangedPaths(e){if(this.changedPaths)for(const t of e)this.changedPaths.delete(q(t))}writtenEntry(e,t=!1){const r=q(e),n=this.node(r);if(!n)return;const i={mode:n.mode,mtimeMs:n.mtimeMs};return n.type==="directory"?{path:r,type:"directory",...i}:t?{path:r,type:"file",bytes:this.bytesOf(n).slice(),...i}:{path:r,type:"file",content:ft(this.bytesOf(n)),...i}}replaceSnapshot(e){this.mutate(()=>{const t=new Map(this.everyNode());this.lower=void 0,this.hidden.clear(),this.nodes=Zn.rooted();for(const n of t.keys())this.markMutation(n);this.markMutation("/");const r=e.files.slice().sort((n,i)=>Fn(n.path)-Fn(i.path));for(const n of r){const i=n,o=q(i.path);if(o!=="/")if(i.type==="directory")this.mkdirSync(o,{recursive:!0});else if(i.content!==void 0){this.writeFileSync(o,tr(i.content));const c=this.nodes.get(o);c&&(c.dirty=!1)}else{const c=t.get(o);this.mkdirSync(Ct(o),{recursive:!0}),c?.type==="file"&&this.nodes.set(o,c)}const a=this.node(o);a&&(i.mode!==void 0&&(a.mode=i.mode),i.mtimeMs!==void 0&&(a.atimeMs=a.mtimeMs=i.mtimeMs),this.markMutation(o))}})}toSnapshot(){return{files:[...this.nodes.entries()].map(([e,t])=>t.type==="directory"?{path:e,type:"directory",mode:t.mode,mtimeMs:t.mtimeMs}:t.load&&!t.dirty?this.sized(e,t):{path:e,type:"file",content:ft(t.content??new Uint8Array),mode:t.mode,mtimeMs:t.mtimeMs}).concat(this.untouchedStoreEntries())}}untouchedStoreEntries(){const e=[];if(!this.lower)return e;for(const[t,r]of this.lower.entries)t==="/"||this.nodes.has(t)||this.isHidden(t)||e.push(r.type==="directory"?{path:t,type:"directory",mode:r.mode&4095,mtimeMs:r.mtimeMs}:{path:t,type:"file",size:r.length,mode:r.mode&4095,mtimeMs:r.mtimeMs});return e}toWrittenSnapshot(){return{files:[...this.nodes.entries()].map(([e,t])=>t.type==="directory"?{path:e,type:"directory",mode:t.mode,mtimeMs:t.mtimeMs}:t.dirty?{path:e,type:"file",content:ft(t.content??new Uint8Array),mode:t.mode,mtimeMs:t.mtimeMs}:this.sized(e,t)).concat(this.untouchedStoreEntries())}}sized(e,t){return{path:e,type:"file",size:t.content?.byteLength??t.size??0,mode:t.mode,mtimeMs:t.mtimeMs}}existsSync(e){return this.node(q(e))!==void 0}statSync(e){const t=q(e),r=this.node(t);if(!r)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);const n=r.content?.byteLength??r.size??0;return{isFile:()=>r.type==="file",isDirectory:()=>r.type==="directory",size:n,mode:r.mode,mtimeMs:r.mtimeMs,atimeMs:r.atimeMs,ctimeMs:r.mtimeMs,nlink:1,uid:1e3,gid:1e3,dev:1,ino:r.ino,rdev:0,blksize:4096,blocks:Math.ceil(n/512)}}lstatSync(e){return this.statSync(e)}async readFile(e){return this.readFileSync(e)}readFileSync(e){const t=q(e),r=this.node(t);if(!r)throw new Error(`ENOENT: no such file, open '${t}'`);if(r.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);return this.bytesOf(r).slice()}linkTargetSync(e,t,r,n,i=!1){const o=this.node(i?e:q(e));if(o?.type==="file"){if(o.link===void 0){const a=o.content?.byteLength??o.size??0;o.link=a<t||a>r?null:n(this.bytesOf(o))??null}return o.link??void 0}}bytesOf(e){return e.content===void 0&&e.load&&(e.content=e.load(),e.size=e.content.byteLength),e.content??new Uint8Array}viewRangeSync(e,t,r){const n=this.node(q(e));if(!n)throw new Error(`ENOENT: no such file, open '${q(e)}'`);if(n.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${q(e)}'`);return n.range&&n.content===void 0?n.range(t,r):this.bytesOf(n).subarray(t,t+r)}readRangeSync(e,t,r){const n=q(e),i=this.node(n);if(!i)throw new Error(`ENOENT: no such file, open '${n}'`);if(i.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${n}'`);return i.range&&i.content===void 0?i.range(t,r):this.bytesOf(i).slice(t,t+r)}writeRangeSync(e,t,r){this.mutate(()=>{const n=q(e);this.mkdirSync(Ct(n),{recursive:!0});const i=this.isHidden(n);this.unhide(n);const o=i?this.nodes.get(n):this.node(n);if(o?.type==="directory")throw new Error(`EISDIR: illegal operation on a directory, write '${n}'`);const a=o?this.bytesOf(o):new Uint8Array,c=t+r.byteLength;let f;if(c<=a.byteLength)f=o?.dirty?a:a.slice();else if(c<=a.buffer.byteLength-a.byteOffset&&o?.dirty)f=new Uint8Array(a.buffer,a.byteOffset,c),f.fill(0,a.byteLength,t);else{const d=this.takeSpare(c);f=new Uint8Array(d??new ArrayBuffer(Math.max(c,a.byteLength*2,4096)),0,c),f.set(a),d&&f.fill(0,a.byteLength,t),o?.dirty&&this.release(a)}f.set(r,t),this.nodes.set(n,{type:"file",content:f,dirty:!0,mode:o?.type==="file"?o.mode:420,atimeMs:ge(),mtimeMs:ge(),ino:o?.type==="file"?o.ino:this.nextInode++}),this.markMutation(n)})}truncateSync(e,t){this.mutate(()=>{const r=q(e),n=this.node(r);if(!n)throw new Error(`ENOENT: no such file, truncate '${r}'`);if(n.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, truncate '${r}'`);let i;if(t===0&&n.content===void 0)i=new Uint8Array;else{const o=this.bytesOf(n),a=o.buffer.byteLength-o.byteOffset;n.dirty&&t<=a&&(a<=Vs||t*4>=a)?(i=new Uint8Array(o.buffer,o.byteOffset,t),i.fill(0,o.byteLength)):(i=new Uint8Array(t),i.set(o.subarray(0,t)),n.dirty&&this.release(o))}this.nodes.set(r,{type:"file",content:i,dirty:!0,mode:n.mode,atimeMs:ge(),mtimeMs:ge(),ino:n.ino}),this.markMutation(r)})}spares=[];release(e){const t=e.buffer;if(!(t instanceof ArrayBuffer)||t.byteLength<Vs||t.byteLength>qo)return;this.spares.push(t);let r=this.spares.reduce((n,i)=>n+i.byteLength,0);for(;this.spares.length>Vh||r>qo;)r-=this.spares.shift().byteLength}takeSpare(e){const t=Math.max(e*4,Vs*4);let r=-1;return this.spares.forEach((n,i)=>{n.byteLength>=e&&n.byteLength<=t&&(r<0||n.byteLength<this.spares[r].byteLength)&&(r=i)}),r<0?void 0:this.spares.splice(r,1)[0]}writeFileSync(e,t){this.mutate(()=>{const r=q(e);this.mkdirSync(Ct(r),{recursive:!0});const n=this.isHidden(r);this.unhide(r);const i=n?this.nodes.get(r):this.node(r);i?.type==="file"&&i.dirty&&i.content&&this.release(i.content),this.nodes.set(r,{type:"file",content:typeof t=="string"?new TextEncoder().encode(t):t.slice(),dirty:!0,mode:i?.type==="file"?i.mode:420,atimeMs:ge(),mtimeMs:ge(),ino:i?.type==="file"?i.ino:this.nextInode++}),this.markMutation(r)})}mkdirSync(e,t){this.mutate(()=>{const r=q(e);if(r==="/")return;if(!this.node(r)&&this.node(Ct(r))?.type==="directory"){this.unhide(r);const a=ge();this.nodes.set(r,{type:"directory",mode:493,atimeMs:a,mtimeMs:a,ino:this.nextInode++}),this.markMutation(r);return}const n=r.slice(1).split("/");let i="";for(let o=0;o<n.length;o+=1){i+=`/${n[o]}`;const a=this.node(i);if(a?.type==="file")throw new Error(`ENOTDIR: not a directory, mkdir '${i}'`);if(a)continue;if(!t?.recursive&&o!==n.length-1)throw new Error(`ENOENT: no such directory, mkdir '${i}'`);this.unhide(i);const c=ge();this.nodes.set(i,{type:"directory",mode:493,atimeMs:c,mtimeMs:c,ino:this.nextInode++}),this.markMutation(i)}})}readdirSync(e){const t=q(e),r=this.node(t);if(!r)throw new Error(`ENOENT: no such directory, scandir '${t}'`);if(r.type!=="directory")throw new Error(`ENOTDIR: not a directory, scandir '${t}'`);const n=new Set(this.nodes.namesIn(t));if(this.lower&&!this.isHidden(t)){const i=t==="/"?[...new Set([...this.lower.childrenOf("/"),...sa.filter(o=>this.lower.entries.has(o)).map(o=>o.slice(1))])]:this.lower.childrenOf(t);for(const o of i)this.isHidden(t==="/"?`/${o}`:`${t}/${o}`)||n.add(o)}return[...n]}unlinkSync(e){this.mutate(()=>{const t=q(e),r=this.node(t);if(!r)throw new Error(`ENOENT: no such file, unlink '${t}'`);if(r.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, unlink '${t}'`);r.dirty&&r.content&&this.release(r.content),this.nodes.delete(t),this.hide(t),this.markMutation(t)})}rmdirSync(e){this.mutate(()=>{const t=q(e);if(t==="/")throw new Error("EPERM: cannot remove root directory");const r=this.node(t);if(!r)throw new Error(`ENOENT: no such directory, rmdir '${t}'`);if(r.type!=="directory")throw new Error(`ENOTDIR: not a directory, rmdir '${t}'`);if(this.readdirSync(t).length>0)throw new Error(`ENOTEMPTY: directory not empty, rmdir '${t}'`);this.nodes.delete(t),this.hide(t),this.markMutation(t)})}renameSync(e,t){this.mutate(()=>{const r=q(e),n=q(t);if(!this.node(r))throw new Error(`ENOENT: no such file or directory, rename '${r}'`);if(this.mkdirSync(Ct(n),{recursive:!0}),this.lower&&!this.isHidden(r))for(const[a]of this.lower.descendants(r))this.node(a);const o=this.nodes.subtree(r);for(const[a]of o)this.nodes.delete(a);this.hide(r),this.unhide(n);for(const[a,c]of o){if(c.type==="file"){const y=this.bytesOf(c);c.dirty||(c.content=y.slice()),c.dirty=!0}const f=`${n}${a.slice(r.length)}`,d=this.nodes.get(f);d?.type==="file"&&d.dirty&&d.content&&d!==c&&this.release(d.content),this.nodes.set(f,c),this.markMutation(a),this.markMutation(f)}})}reserveInodes(e){const t=this.nextInode;return this.nextInode+=e,t}restoreNodeSync(e,t){this.mutate(()=>{const r=q(e);this.unhide(r);const n=this.nodes.get(r);n?.type==="file"&&n.dirty&&n.content&&this.release(n.content),this.nodes.set(r,t.directory?{type:"directory",mode:t.mode&4095,atimeMs:t.atimeMs,mtimeMs:t.mtimeMs,ino:t.ino}:{type:"file",content:t.content??new Uint8Array,dirty:!0,mode:t.mode&4095,atimeMs:t.atimeMs,mtimeMs:t.mtimeMs,ino:t.ino}),this.markMutation(r)})}chmodSync(e,t){this.mutate(()=>{const r=q(e),n=this.node(r);if(!n)throw new Error(`ENOENT: no such file or directory, chmod '${r}'`);n.mode=t&4095,this.markMutation(r)})}utimesSync(e,t,r){this.mutate(()=>{const n=q(e),i=this.node(n);if(!i)throw new Error(`ENOENT: no such file or directory, utimes '${n}'`);i.atimeMs=typeof t=="number"?t:Number(t),i.mtimeMs=typeof r=="number"?r:Number(r),this.markMutation(n)})}mutate(e){this.mutationDepth+=1;try{return e()}finally{this.mutationDepth-=1,this.mutationDepth===0&&this.mutated&&(this.mutated=!1,this.mutationHandler?.())}}markMutation(e){this.mutated=!0,this.changedPaths?.add(q(e))}}const $h=1<<20,Gr=64*1024,zh=8*1024*1024,Hh=1<<20,Vs=64*1024,Vh=2,qo=32*1024*1024;function Gh(){const s=ge();return{type:"directory",mode:493,atimeMs:s,mtimeMs:s,ino:1}}function q(s){if(jh(s))return s;const e=[];for(const t of`/${s}`.split("/"))!t||t==="."||(t===".."?e.pop():e.push(t));return`/${e.join("/")}`}function jh(s){if(s.charCodeAt(0)!==47)return!1;if(s.length===1)return!0;let e=1;for(let t=1;t<=s.length;t+=1){if(t<s.length&&s.charCodeAt(t)!==47)continue;const r=t-e;if(r===0||s.charCodeAt(e)===46&&(r===1||r===2&&s.charCodeAt(e+1)===46))return!1;e=t+1}return!0}function Ct(s){return s.slice(0,s.lastIndexOf("/"))||"/"}function Fn(s){let e=1;for(let t=0;t<s.length;t+=1)s.charCodeAt(t)===47&&(e+=1);return e}const Kh=`${hc}/.volter-tree-complete`;async function Xh(s,e){const t=Ks(s);try{if((await t.initialize(e,{readOnly:!0})||t.opened())&&t.entries.has(Kh))return t}catch(r){throw t.close(),r}t.close()}const ea=new WeakMap;async function Jh(s,e){const t=[...new Set((s??[]).flatMap(o=>o.store===void 0?[]:[o.store]))];if(t.length===0)return;e??={navigator:globalThis.navigator};const r=e;let n=ea.get(r.navigator);n||ea.set(r.navigator,n=new Map);const i=new Map;for(const o of t){let a=n.get(o);a||(a=uc(o,r.navigator.locks).then(()=>Xh(r,o)),n.set(o,a));let c;try{c=await a}catch(f){throw n.delete(o),new Error(`The installed tree ${o} would not open: ${f instanceof Error?f.message:String(f)}`,{cause:f})}if(!c)throw n.delete(o),new Error(`The installed tree ${o} is not on this origin's disk to read.`);i.set(o,c)}return i}const Bn=new Map,On=new Map;async function Zh(s){const e=On.get(s);if(e){const n=await e.catch(()=>{});if(n)try{return await n.refresh(),n}catch{n.close()}On.delete(s)}const t=_c({navigator:globalThis.navigator},s);On.set(s,t);const r=await t.catch(()=>{});return r||On.delete(s),r}self.onmessage=s=>{Qh(s.data)};async function Qh(s){const e=performance.now();let t,r,n;try{n=await Jh(s.layers)}catch(f){Xe({type:"result",id:s.id,filesystem:s.filesystem,error:f instanceof Error?f.message:String(f)});return}if(s.store){if(t=await Zh(s.store.projectId),!t){Xe({type:"result",id:s.id,filesystem:s.filesystem,error:"The project's store is not there to read."});return}r=_r.fromStore(Pi(t,s.layers,n),s.filesystem)}else s.layers?r=_r.fromStore(Pi(void 0,s.layers,n),s.filesystem):r=_r.fromSnapshot(s.filesystem);const i=r.toSnapshot();r.mkdirSync("/tmp",{recursive:!0}),r.mkdirSync("/home/user",{recursive:!0}),r.mkdirSync(s.cwd,{recursive:!0});const o=ko(i,r.toSnapshot(),{written:!0});s.filesystemUpdatePort&&(o.files.length>0||o.removed.length>0)&&s.filesystemUpdatePort.postMessage({type:"filesystem",patch:o});let a=!1;const c=performance.now()-e;try{const f=performance.now(),d=await ed(s.url,s.integrity,s.compiled,L=>Xe({type:"compiled",id:s.id,compiled:L})),y=performance.now()-f,p=d.layout,b=p?ba(p):void 0,S=await new Fh().run(d.module,{argv:s.argv,...s.pid!==void 0?{pid:s.pid}:{},...s.parentPid!==void 0?{parentPid:s.parentPid}:{},...s.childPidAllocator?{childPidAllocator:s.childPidAllocator}:{},...p?{memoryLayout:p}:{},...s.descriptorTable?{descriptorTable:s.descriptorTable}:{},...s.executablePath?{executablePath:s.executablePath}:{},cwd:s.cwd,env:s.env,stdin:new Xs(s.stdin),terminal:s.terminal,filesystem:r,...s.filesystemPolicy?{filesystemPolicy:s.filesystemPolicy}:{},...s.store?{store:s.store}:{},...s.layers?{layers:s.layers}:{},...s.privateRoots?{privateRoots:s.privateRoots}:{},...b?{memory:b}:{},threadPoolSize:s.threadPoolSize,...s.codec?{codec:s.codec}:{},...s.network?{network:{...s.network,...s.loopbackPort?{loopbackPort:s.loopbackPort}:{}}}:{},...s.browserProcessPorts?{browserProcessPorts:s.browserProcessPorts}:{},...s.threadOutputPorts?{threadOutputPorts:s.threadOutputPorts}:{},...s.filesystemUpdatePort?{filesystemUpdatePort:s.filesystemUpdatePort}:{},...s.fileLocks?{fileLocks:s.fileLocks}:{},fileCoherence:s.fileCoherence,signalState:s.signalState,browserProcess:{fork:L=>Xe({type:"fork",id:s.id,...L,stdin:s.stdin,threadPoolSize:s.threadPoolSize,...s.network&&s.network.allowedHosts.length>0?{network:s.network}:{}}),...s.childFilesystemPolicyVersion===1?{filesystemPolicyVersion:1}:{},spawn:L=>Xe({type:"spawn",id:s.id,...L,filesystemPatch:ko(i,r.toSnapshot(),{written:!0})}),kill:(L,W)=>Xe({type:"kill",id:s.id,pid:L,signal:W}),restore:L=>r.replaceSnapshot(L)},onStdout:L=>Xe({type:"stdout",id:s.id,chunk:L}),onStderr:L=>Xe({type:"stderr",id:s.id,chunk:new TextDecoder().decode(L)}),onDiagnostic:L=>Xe({type:"diagnostic",id:s.id,message:L}),onFilesystemFinalized:()=>{a=!0}}),I=performance.now(),k=r.toSnapshot(),M=performance.now()-e;M>2e3&&console.log("[wali-profile]",JSON.stringify({argv:s.argv.slice(0,3),worker:{filesystemMs:Math.round(c),moduleMs:Math.round(y),snapshotMs:Math.round(performance.now()-I),totalMs:Math.round(M)}})),Xe({type:"result",id:s.id,filesystem:k,filesystemFinalized:a,result:{stdout:S.stdout,stderr:S.stderr,exitCode:S.exitCode}})}catch(f){Xe({type:"result",id:s.id,filesystem:r.toSnapshot(),filesystemFinalized:a,error:qh(f)})}}const ta=48*1024;function qh(s){const e=s instanceof Error?s.stack??s.message:String(s),t=e.split(`
|
|
19
19
|
`).slice(0,8).join(`
|
|
20
20
|
`).slice(0,4*1024);if(e.length<=ta)return`${e}
|
|
21
21
|
WALI error summary:
|