v86 0.5.10 → 0.5.12

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.
@@ -1,732 +1,729 @@
1
- ;let module = {exports:{}}; var ba=[[1,""],[2,"CPU"],[32768,"DISK"],[4,"FPU"],[8,"MEM"],[16,"DMA"],[32,"IO"],[64,"PS2"],[128,"PIC"],[256,"VGA"],[512,"PIT"],[1024,"MOUS"],[2048,"PCI"],[4096,"BIOS"],[8192,"FLOP"],[16384,"SERI"],[65536,"RTC"],[262144,"ACPI"],[524288,"APIC"],[1048576,"NET"],[2097152,"VIO"],[4194304,"9P"],[8388608,"SB16"],[16777216,"FETC"]];function ca(a,b){function c(C){C=C.toString(16);return"#"+"0".repeat(6-C.length)+C}function d(C){var z=256*na,I=8*U,M=Pa?Pa.canvas:null;M&&M.width===z&&M.height===I||(M?(M.width=
2
- z,M.height=I):(M=new OffscreenCanvas(z,I),Pa=M.getContext("2d")),tb=Pa.createImageData(z,I));const T=tb.data;let S=0,V;I=ub?function(aa){V=V||aa;T[S+3]=aa;T[S+7]=aa;S+=8}:function(aa){V=V||aa;T[S+3]=aa;S+=4};M=32-U;const ja=z*(U-1)*4;z=4*(na-z*U);const ha=1020*na;for(let aa=0,ra=0;2048>aa;++aa,ra+=M,S+=z){const Da=aa%256;aa&&!Da&&(S+=ja);V=!1;for(let Ja=0;Ja<U;++Ja,++ra,S+=ha){const Ka=C[ra];for(let ua=128;0<ua;ua>>=1)I(Ka&ua?255:0);vb&&I(wb&&192<=Da&&223>=Da&&Ka&1?255:0)}Ob[aa]=V?1:0}Pa.putImageData(tb,
3
- 0,0)}function e(C,z,I,M){if(z&&I){C.style.width="";C.style.height="";M&&(C.style.transform="");var T=C.getBoundingClientRect();M?C.style.transform=(1===z?"":" scaleX("+z+")")+(1===I?"":" scaleY("+I+")"):(0===z%1&&0===I%1?(f.style.imageRendering="crisp-edges",f.style.imageRendering="pixelated",f.style["-ms-interpolation-mode"]="nearest-neighbor"):(f.style.imageRendering="",f.style["-ms-interpolation-mode"]=""),M=window.devicePixelRatio||1,0!==M%1&&(z/=M,I/=M));1!==z&&(C.style.width=T.width*z+"px");
4
- 1!==I&&(C.style.height=T.height*I+"px")}}const g=a.container;this.screen_fill_buffer=b;console.assert(g,"options.container must be provided");this.FLAG_BLINKING=1;this.FLAG_FONT_PAGE_B=2;var f=g.getElementsByTagName("canvas")[0],l=f.getContext("2d",{alpha:!1}),n=g.getElementsByTagName("div")[0],m=document.createElement("div"),q,r,t=void 0!==a.scale?a.scale:1,v=void 0!==a.scale?a.scale:1,y=1,D,u,A,x,H,L,oa,Pa,tb,Ob=new Int8Array(2048),U,na,vb,ub,wb,xb=0,yb=0,hb,Pb=0,ib,zb,jb,Ab=[],$a=Ab,kb=0,Bb=!1;
5
- this.init=function(){const C=new Uint16Array([32,9786,9787,9829,9830,9827,9824,8226,9688,9675,9689,9794,9792,9834,9835,9788,9658,9668,8597,8252,182,167,9644,8616,8593,8595,8594,8592,8735,8596,9650,9660]),z=new Uint16Array([8962,199,252,233,226,228,224,229,231,234,235,232,239,238,236,196,197,201,230,198,244,246,242,251,249,255,214,220,162,163,165,8359,402,225,237,243,250,241,209,170,186,191,8976,172,189,188,161,171,187,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,
6
- 9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,945,223,915,960,931,963,181,964,934,920,937,948,8734,966,949,8745,8801,177,8805,8804,8992,8993,247,8776,176,8729,183,8730,8319,178,9632,160]);for(var I=0,M;256>I;I++)M=126<I?z[I-127]:32>I?C[I]:I,Ab.push(String.fromCharCode(M));m.classList.add("cursor");m.style.position="absolute";m.style.backgroundColor="#ccc";m.style.width="7px";m.style.display=
7
- "inline-block";this.set_mode(!1);this.set_size_text(80,25);2===u&&this.set_size_graphical(720,400,720,400);this.set_scale(t,v);this.timer()};this.make_screenshot=function(){const C=new Image;if(1===u||2===u)C.src=f.toDataURL("image/png");else{const z=[9,16],I=document.createElement("canvas");I.width=x*z[0];I.height=H*z[1];const M=I.getContext("2d");M.imageSmoothingEnabled=!1;M.font=window.getComputedStyle(n).font;M.textBaseline="top";for(let T=0;T<H;T++)for(let S=0;S<x;S++){const V=4*(T*x+S),ja=A[V+
8
- 0],ha=A[V+3];M.fillStyle=c(A[V+2]);M.fillRect(S*z[0],T*z[1],z[0],z[1]);M.fillStyle=c(ha);M.fillText($a[ja],S*z[0],T*z[1])}"none"!==m.style.display&&q<H&&r<x&&(M.fillStyle=m.style.backgroundColor,M.fillRect(r*z[0],q*z[1]+parseInt(m.style.marginTop,10),parseInt(m.style.width,10),parseInt(m.style.height,10)));C.src=I.toDataURL("image/png")}return C};this.put_char=function(C,z,I,M,T,S){h(0<=C&&C<H);h(0<=z&&z<x);h(0<=I&&256>I);z=4*(C*x+z);A[z+0]=I;A[z+1]=M;A[z+2]=T;A[z+3]=S;D[C]=1};this.timer=function(){kb=
9
- requestAnimationFrame(()=>this.update_screen())};this.update_screen=function(){Bb||(0===u?this.update_text():1===u?this.update_graphical():this.update_graphical_text());this.timer()};this.update_text=function(){for(var C=0;C<H;C++)D[C]&&(this.text_update_row(C),D[C]=0)};this.update_graphical=function(){this.screen_fill_buffer()};this.update_graphical_text=function(){if(L){var C=performance.now();if(266<C-Pb){hb=!hb;jb&&(D[q]=1);var z=4*x;for(let ja=0,ha=0;ja<H;++ja)if(D[ja])ha+=z;else for(var I=0;I<
10
- x;++I,ha+=4)if(A[ha+1]&1){D[ja]=1;ha+=z-4*I;break}Pb=C}C=Pa.canvas;z=oa.canvas;I=4*x;const T=x*na,S=U;let V=0;for(let ja=0,ha=0,aa=0;ja<H;++ja,ha+=U){if(!D[ja]){aa+=I;continue}++V;oa.clearRect(0,S,T,U);let ra,Da,Ja,Ka;for(let ua=0;ua<T;ua+=na,aa+=4){const Qb=A[aa+0];var M=A[aa+1];const Rb=A[aa+2],Sb=A[aa+3],Tb=M&2?yb:xb;M=(!(M&1)||hb)&&Ob[(Tb<<8)+Qb];Ja!==Rb&&(void 0!==Ja&&(L.fillStyle=c(Ja),L.fillRect(Ka,ha,ua-Ka,U)),Ja=Rb,Ka=ua);ra!==Sb&&(void 0!==ra&&(oa.fillStyle=c(ra),oa.fillRect(Da,0,ua-Da,
11
- U)),ra=Sb,Da=ua);M&&oa.drawImage(C,Qb*na,Tb*U,na,U,ua,S,na,U)}oa.fillStyle=c(ra);oa.fillRect(Da,0,T-Da,U);oa.globalCompositeOperation="destination-in";oa.drawImage(z,0,S,T,U,0,0,T,U);oa.globalCompositeOperation="source-over";L.fillStyle=c(Ja);L.fillRect(Ka,ha,T-Ka,U);L.drawImage(z,0,0,T,U,0,ha,T,U)}V&&(hb&&jb&&D[q]&&(L.fillStyle=c(A[4*(q*x+r)+3]),L.fillRect(r*na,q*U+ib,na,zb-ib+1)),D.fill(0));V&&l.drawImage(L.canvas,0,0)}};this.destroy=function(){kb&&(cancelAnimationFrame(kb),kb=0)};this.pause=function(){Bb=
12
- !0;m.classList.remove("blinking-cursor")};this.continue=function(){Bb=!1;m.classList.add("blinking-cursor")};this.set_mode=function(C){u=C?1:a.use_graphical_text?2:0;0===u?(n.style.display="block",f.style.display="none"):(n.style.display="none",f.style.display="block",2===u&&D&&D.fill(1))};this.set_font_bitmap=function(C,z,I,M,T,S){const V=I?16:z?9:8;if(U!==C||na!==V||vb!==z||ub!==I||wb!==M||S)S=na!==V||U!==C,U=C,na=V,vb=z,ub=I,wb=M,2===u&&(d(T),D.fill(1),S&&this.set_size_graphical_text())};this.set_font_page=
13
- function(C,z){if(xb!==C||yb!==z)xb=C,yb=z,D.fill(1)};this.clear_screen=function(){l.fillStyle="#000";l.fillRect(0,0,f.width,f.height)};this.set_size_graphical_text=function(){if(Pa){var C=na*x,z=U*H,I=2*U;L&&L.canvas.width===C&&L.canvas.height===z&&oa.canvas.height===I||(L?(L.canvas.width=C,L.canvas.height=z,oa.canvas.width=C,oa.canvas.height=I):(L=(new OffscreenCanvas(C,z)).getContext("2d",{alpha:!1}),oa=(new OffscreenCanvas(C,I)).getContext("2d")),this.set_size_graphical(C,z,C,z),D.fill(1))}};this.set_size_text=
14
- function(C,z){if(C!==x||z!==H)if(D=new Int8Array(z),A=new Int32Array(C*z*4),x=C,H=z,0===u){for(;n.childNodes.length>z;)n.removeChild(n.firstChild);for(;n.childNodes.length<z;)n.appendChild(document.createElement("div"));for(C=0;C<z;C++)this.text_update_row(C);e(n,t,v,!0)}else 2===u&&this.set_size_graphical_text()};this.set_size_graphical=function(C,z){f.style.display="block";f.width=C;f.height=z;l.imageSmoothingEnabled=!1;y=640>=C&&2*C<window.innerWidth*window.devicePixelRatio&&2*z<window.innerHeight*
15
- window.devicePixelRatio?2:1;e(f,t*y,v*y,!1)};this.set_charmap=function(C){$a=C||Ab};this.set_scale=function(C,z){t=C;v=z;e(n,t,v,!0);e(f,t*y,v*y,!1)};this.update_cursor_scanline=function(C,z,I){if(C!==ib||z!==zb||I!==jb)0===u?I?(m.style.display="inline",m.style.height=z-C+"px",m.style.marginTop=C+"px"):m.style.display="none":2===u&&q<H&&(D[q]=1),ib=C,zb=z,jb=I};this.update_cursor=function(C,z){if(C!==q||z!==r)C<H&&(D[C]=1),q<H&&(D[q]=1),q=C,r=z};this.text_update_row=function(C){var z=4*C*x,I;var M=
16
- n.childNodes[C];var T=document.createElement("div");for(var S=0;S<x;){var V=document.createElement("span");var ja=A[z+1]&1;var ha=A[z+2];var aa=A[z+3];ja&&V.classList.add("blink");V.style.backgroundColor=c(ha);V.style.color=c(aa);for(I="";S<x&&(A[z+1]&1)===ja&&A[z+2]===ha&&A[z+3]===aa;){var ra=A[z+0];I+=$a[ra];h($a[ra]);S++;z+=4;if(C===q)if(S===r)break;else if(S===r+1){m.style.backgroundColor=V.style.color;T.appendChild(m);break}}V.textContent=I;T.appendChild(V)}M.parentNode.replaceChild(T,M)};this.update_buffer=
17
- function(C){for(const z of C)l.putImageData(z.image_data,z.screen_x-z.buffer_x,z.screen_y-z.buffer_y,z.buffer_x,z.buffer_y,z.buffer_width,z.buffer_height)};this.get_text_screen=function(){for(var C=[],z=0;z<H;z++)C.push(this.get_text_row(z));return C};this.get_text_row=function(C){let z="";for(let I=0;I<x;I++)z+=$a[A[4*(C*x+I)]];return z};this.init()}const da=["shared","exclusive","unlock"];function ea(a,b,c){this.fs=a;this.bus=c;this.configspace_tagname=[104,111,115,116,57,112];this.configspace_taglen=
18
- this.configspace_tagname.length;this.VERSION="9P2000.L";this.msize=this.BLOCKSIZE=8192;this.replybuffer=new Uint8Array(2*this.msize);this.replybuffersize=0;this.fids=[];this.virtio=new fa(b,{name:"virtio-9p",pci_id:48,device_id:4169,subsystem_device_id:9,common:{initial_port:43008,queues:[{size_supported:32,notify_offset:0}],features:[0,32,29,28],on_driver_ok:()=>{}},notification:{initial_port:43264,single_handler:!1,handlers:[d=>{if(0!==d)h(!1,"Virtio9P Notified for non-existent queue: "+d+" (expected queue_id of 0)");
19
- else{for(;this.virtqueue.has_request();)d=this.virtqueue.pop_request(),this.ReceiveRequest(d);this.virtqueue.notify_me_after(0)}}]},isr_status:{initial_port:42752},device_specific:{initial_port:42496,struct:[{bytes:2,name:"mount tag length",read:()=>this.configspace_taglen,write:()=>{}}].concat(k.range(254).map(d=>({bytes:1,name:"mount tag name "+d,read:()=>this.configspace_tagname[d]||0,write:()=>{}})))}});this.virtqueue=this.virtio.queues[0]}ea.prototype.get_state=function(){var a=[];a[0]=this.configspace_tagname;
20
- a[1]=this.configspace_taglen;a[2]=this.virtio;a[3]=this.VERSION;a[4]=this.BLOCKSIZE;a[5]=this.msize;a[6]=this.replybuffer;a[7]=this.replybuffersize;a[8]=this.fids.map(function(b){return[b.inodeid,b.type,b.uid,b.dbg_name]});a[9]=this.fs;return a};ea.prototype.set_state=function(a){this.configspace_tagname=a[0];this.configspace_taglen=a[1];this.virtio.set_state(a[2]);this.virtqueue=this.virtio.queues[0];this.VERSION=a[3];this.BLOCKSIZE=a[4];this.msize=a[5];this.replybuffer=a[6];this.replybuffersize=
21
- a[7];this.fids=a[8].map(function(b){return{inodeid:b[0],type:b[1],uid:b[2],dbg_name:b[3]}});this.fs.set_state(a[9])};ea.prototype.Createfid=function(a,b,c,d){return{inodeid:a,type:b,uid:c,dbg_name:d}};ea.prototype.update_dbg_name=function(a,b){for(const c of this.fids)c.inodeid===a&&(c.dbg_name=b)};ea.prototype.reset=function(){this.fids=[];this.virtio.reset()};ea.prototype.BuildReply=function(a,b,c){h(0<=c,"9P: Negative payload size");p.Marshall(["w","b","h"],[c+7,a+1,b],this.replybuffer,0);c+7>=
22
- this.replybuffer.length&&w.Debug("Error in 9p: payloadsize exceeds maximum length");this.replybuffersize=c+7};ea.prototype.SendError=function(a,b,c){b=p.Marshall(["w"],[c],this.replybuffer,7);this.BuildReply(6,a,b)};ea.prototype.SendReply=function(a){h(0<=this.replybuffersize,"9P: Negative replybuffersize");a.set_next_blob(this.replybuffer.subarray(0,this.replybuffersize));this.virtqueue.push_reply(a);this.virtqueue.flush_replies()};ea.prototype.ReceiveRequest=async function(a){var b=new Uint8Array(a.length_readable);
23
- a.get_next_blob(b);var c={offset:0},d=p.Unmarshall(["w","b","h"],b,c),e=d[0],g=d[1],f=d[2];switch(g){case 8:e=this.fs.GetTotalSize();b=this.fs.GetSpace();d=[16914839];d[1]=this.BLOCKSIZE;d[2]=Math.floor(b/d[1]);d[3]=d[2]-Math.floor(e/d[1]);d[4]=d[2]-Math.floor(e/d[1]);d[5]=this.fs.CountUsedInodes();d[6]=this.fs.CountFreeInodes();d[7]=0;d[8]=256;e=p.Marshall("wwddddddw".split(""),d,this.replybuffer,7);this.BuildReply(g,f,e);this.SendReply(a);break;case 112:case 12:d=p.Unmarshall(["w","w"],b,c);var l=
24
- d[0];c=d[1];w.Debug("[open] fid="+l+", mode="+c);b=this.fids[l].inodeid;var n=this.fs.GetInode(b);w.Debug("file open "+this.fids[l].dbg_name);d=this.fs.OpenInode(b,c);this.fs.AddEvent(this.fids[l].inodeid,function(){w.Debug("file opened "+this.fids[l].dbg_name+" tag:"+f);var t=[];t[0]=n.qid;t[1]=this.msize-24;p.Marshall(["Q","w"],t,this.replybuffer,7);this.BuildReply(g,f,17);this.SendReply(a)}.bind(this));break;case 70:d=p.Unmarshall(["w","w","s"],b,c);b=d[0];l=d[1];e=d[2];w.Debug("[link] dfid="+
25
- b+", name="+e);d=this.fs.Link(this.fids[b].inodeid,this.fids[l].inodeid,e);if(0>d){e="";-1===d?e="Operation not permitted":(e="Unknown error: "+-d,h(!1,"[link]: Unexpected error code: "+-d));this.SendError(f,e,-d);this.SendReply(a);break}this.BuildReply(g,f,0);this.SendReply(a);break;case 16:d=p.Unmarshall(["w","s","s","w"],b,c);l=d[0];e=d[1];b=d[2];d=d[3];w.Debug("[symlink] fid="+l+", name="+e+", symgt="+b+", gid="+d);b=this.fs.CreateSymlink(e,this.fids[l].inodeid,b);n=this.fs.GetInode(b);n.uid=
26
- this.fids[l].uid;n.gid=d;p.Marshall(["Q"],[n.qid],this.replybuffer,7);this.BuildReply(g,f,13);this.SendReply(a);break;case 18:d=p.Unmarshall("wswwww".split(""),b,c);l=d[0];e=d[1];c=d[2];b=d[3];var m=d[4];d=d[5];w.Debug("[mknod] fid="+l+", name="+e+", major="+b+", minor="+m);b=this.fs.CreateNode(e,this.fids[l].inodeid,b,m);n=this.fs.GetInode(b);n.mode=c;n.uid=this.fids[l].uid;n.gid=d;p.Marshall(["Q"],[n.qid],this.replybuffer,7);this.BuildReply(g,f,13);this.SendReply(a);break;case 22:d=p.Unmarshall(["w"],
27
- b,c);l=d[0];n=this.fs.GetInode(this.fids[l].inodeid);w.Debug("[readlink] fid="+l+" name="+this.fids[l].dbg_name+" target="+n.symlink);e=p.Marshall(["s"],[n.symlink],this.replybuffer,7);this.BuildReply(g,f,e);this.SendReply(a);break;case 72:d=p.Unmarshall(["w","s","w","w"],b,c);l=d[0];e=d[1];c=d[2];d=d[3];w.Debug("[mkdir] fid="+l+", name="+e+", mode="+c+", gid="+d);b=this.fs.CreateDirectory(e,this.fids[l].inodeid);n=this.fs.GetInode(b);n.mode=c|ia;n.uid=this.fids[l].uid;n.gid=d;p.Marshall(["Q"],[n.qid],
28
- this.replybuffer,7);this.BuildReply(g,f,13);this.SendReply(a);break;case 14:d=p.Unmarshall(["w","s","w","w","w"],b,c);l=d[0];e=d[1];b=d[2];c=d[3];d=d[4];this.bus.send("9p-create",[e,this.fids[l].inodeid]);w.Debug("[create] fid="+l+", name="+e+", flags="+b+", mode="+c+", gid="+d);b=this.fs.CreateFile(e,this.fids[l].inodeid);this.fids[l].inodeid=b;this.fids[l].type=1;this.fids[l].dbg_name=e;n=this.fs.GetInode(b);n.uid=this.fids[l].uid;n.gid=d;n.mode=c|ka;p.Marshall(["Q","w"],[n.qid,this.msize-24],this.replybuffer,
29
- 7);this.BuildReply(g,f,17);this.SendReply(a);break;case 52:d=p.Unmarshall("wbwddws".split(""),b,c);l=d[0];b=d[2];e=0===d[4]?Infinity:d[4];e=this.fs.DescribeLock(d[1],d[3],e,d[5],d[6]);w.Debug("[lock] fid="+l+", type="+da[e.type]+", start="+e.start+", length="+e.length+", proc_id="+e.proc_id);d=this.fs.Lock(this.fids[l].inodeid,e,b);p.Marshall(["b"],[d],this.replybuffer,7);this.BuildReply(g,f,1);this.SendReply(a);break;case 54:d=p.Unmarshall("wbddws".split(""),b,c);l=d[0];e=0===d[3]?Infinity:d[3];
30
- e=this.fs.DescribeLock(d[1],d[2],e,d[4],d[5]);w.Debug("[getlock] fid="+l+", type="+da[e.type]+", start="+e.start+", length="+e.length+", proc_id="+e.proc_id);d=this.fs.GetLock(this.fids[l].inodeid,e);d||(d=e,d.type=2);e=p.Marshall(["b","d","d","w","s"],[d.type,d.start,Infinity===d.length?0:d.length,d.proc_id,d.client_id],this.replybuffer,7);this.BuildReply(g,f,e);this.SendReply(a);break;case 24:d=p.Unmarshall(["w","d"],b,c);l=d[0];n=this.fs.GetInode(this.fids[l].inodeid);w.Debug("[getattr]: fid="+
31
- l+" name="+this.fids[l].dbg_name+" request mask="+d[1]);if(!n||n.status===la){w.Debug("getattr: unlinked");this.SendError(f,"No such file or directory",2);this.SendReply(a);break}d[0]=d[1];d[1]=n.qid;d[2]=n.mode;d[3]=n.uid;d[4]=n.gid;d[5]=n.nlinks;d[6]=n.major<<8|n.minor;d[7]=n.size;d[8]=this.BLOCKSIZE;d[9]=Math.floor(n.size/512+1);d[10]=n.atime;d[11]=0;d[12]=n.mtime;d[13]=0;d[14]=n.ctime;d[15]=0;d[16]=0;d[17]=0;d[18]=0;d[19]=0;p.Marshall("dQwwwddddddddddddddd".split(""),d,this.replybuffer,7);this.BuildReply(g,
32
- f,153);this.SendReply(a);break;case 26:d=p.Unmarshall("wwwwwddddd".split(""),b,c);l=d[0];n=this.fs.GetInode(this.fids[l].inodeid);w.Debug("[setattr]: fid="+l+" request mask="+d[1]+" name="+this.fids[l].dbg_name);d[1]&1&&(n.mode=d[2]);d[1]&2&&(n.uid=d[3]);d[1]&4&&(n.gid=d[4]);d[1]&16&&(n.atime=Math.floor((new Date).getTime()/1E3));d[1]&32&&(n.mtime=Math.floor((new Date).getTime()/1E3));d[1]&64&&(n.ctime=Math.floor((new Date).getTime()/1E3));d[1]&128&&(n.atime=d[6]);d[1]&256&&(n.mtime=d[8]);d[1]&8&&
33
- await this.fs.ChangeSize(this.fids[l].inodeid,d[5]);this.BuildReply(g,f,0);this.SendReply(a);break;case 50:d=p.Unmarshall(["w","d"],b,c);l=d[0];this.BuildReply(g,f,0);this.SendReply(a);break;case 40:case 116:d=p.Unmarshall(["w","d","w"],b,c);l=d[0];e=d[1];m=d[2];n=this.fs.GetInode(this.fids[l].inodeid);40===g&&w.Debug("[treaddir]: fid="+l+" offset="+e+" count="+m);116===g&&w.Debug("[read]: fid="+l+" ("+this.fids[l].dbg_name+") offset="+e+" count="+m+" fidtype="+this.fids[l].type);if(!n||n.status===
34
- la){w.Debug("read/treaddir: unlinked");this.SendError(f,"No such file or directory",2);this.SendReply(a);break}if(2===this.fids[l].type)for(n.caps.length<e+m&&(m=n.caps.length-e),d=0;d<m;d++)this.replybuffer[11+d]=n.caps[e+d];else this.fs.OpenInode(this.fids[l].inodeid,void 0),d=this.fids[l].inodeid,m=Math.min(m,this.replybuffer.length-11),n.size<e+m?m=n.size-e:40===g&&(m=this.fs.RoundToDirentry(d,e+m)-e),e>n.size&&(m=0),this.bus.send("9p-read-start",[this.fids[l].dbg_name]),d=await this.fs.Read(d,
35
- e,m),this.bus.send("9p-read-end",[this.fids[l].dbg_name,m]),d&&this.replybuffer.set(d,11);p.Marshall(["w"],[m],this.replybuffer,7);this.BuildReply(g,f,4+m);this.SendReply(a);break;case 118:d=p.Unmarshall(["w","d","w"],b,c);l=d[0];e=d[1];m=d[2];d=this.fids[l].dbg_name;w.Debug("[write]: fid="+l+" ("+d+") offset="+e+" count="+m+" fidtype="+this.fids[l].type);if(2===this.fids[l].type){this.SendError(f,"Setxattr not supported",95);this.SendReply(a);break}else await this.fs.Write(this.fids[l].inodeid,e,
36
- m,b.subarray(c.offset));this.bus.send("9p-write-end",[d,m]);p.Marshall(["w"],[m],this.replybuffer,7);this.BuildReply(g,f,4);this.SendReply(a);break;case 74:d=p.Unmarshall(["w","s","w","s"],b,c);e=d[0];b=d[1];c=d[2];d=d[3];w.Debug("[renameat]: oldname="+b+" newname="+d);d=await this.fs.Rename(this.fids[e].inodeid,b,this.fids[c].inodeid,d);if(0>d){e="";-2===d?e="No such file or directory":-1===d?e="Operation not permitted":-39===d?e="Directory not empty":(e="Unknown error: "+-d,h(!1,"[renameat]: Unexpected error code: "+
37
- -d));this.SendError(f,e,-d);this.SendReply(a);break}this.BuildReply(g,f,0);this.SendReply(a);break;case 76:d=p.Unmarshall(["w","s","w"],b,c);c=d[0];e=d[1];b=d[2];w.Debug("[unlink]: dirfd="+c+" name="+e+" flags="+b);l=this.fs.Search(this.fids[c].inodeid,e);if(-1===l){this.SendError(f,"No such file or directory",2);this.SendReply(a);break}d=this.fs.Unlink(this.fids[c].inodeid,e);if(0>d){e="";-39===d?e="Directory not empty":-1===d?e="Operation not permitted":(e="Unknown error: "+-d,h(!1,"[unlink]: Unexpected error code: "+
38
- -d));this.SendError(f,e,-d);this.SendReply(a);break}this.BuildReply(g,f,0);this.SendReply(a);break;case 100:d=p.Unmarshall(["w","s"],b,c);w.Debug("[version]: msize="+d[0]+" version="+d[1]);this.msize!==d[0]&&(this.msize=d[0],this.replybuffer=new Uint8Array(Math.min(16777216,2*this.msize)));e=p.Marshall(["w","s"],[this.msize,this.VERSION],this.replybuffer,7);this.BuildReply(g,f,e);this.SendReply(a);break;case 104:d=p.Unmarshall(["w","w","s","s","w"],b,c);l=d[0];e=d[4];w.Debug("[attach]: fid="+l+" afid="+
39
- B(d[1])+" uname="+d[2]+" aname="+d[3]);this.fids[l]=this.Createfid(0,1,e,"");n=this.fs.GetInode(this.fids[l].inodeid);p.Marshall(["Q"],[n.qid],this.replybuffer,7);this.BuildReply(g,f,13);this.SendReply(a);this.bus.send("9p-attach");break;case 108:d=p.Unmarshall(["h"],b,c);w.Debug("[flush] "+f);this.BuildReply(g,f,0);this.SendReply(a);break;case 110:d=p.Unmarshall(["w","w","h"],b,c);l=d[0];m=d[1];var q=d[2];w.Debug("[walk]: fid="+d[0]+" nwfid="+d[1]+" nwname="+q);if(0===q){this.fids[m]=this.Createfid(this.fids[l].inodeid,
40
- 1,this.fids[l].uid,this.fids[l].dbg_name);p.Marshall(["h"],[0],this.replybuffer,7);this.BuildReply(g,f,2);this.SendReply(a);break}e=[];for(d=0;d<q;d++)e.push("s");c=p.Unmarshall(e,b,c);b=this.fids[l].inodeid;e=9;var r=0;w.Debug("walk in dir "+this.fids[l].dbg_name+" to: "+c.toString());for(d=0;d<q;d++){b=this.fs.Search(b,c[d]);if(-1===b){w.Debug("Could not find: "+c[d]);break}e+=p.Marshall(["Q"],[this.fs.GetInode(b).qid],this.replybuffer,e);r++;this.fids[m]=this.Createfid(b,1,this.fids[l].uid,c[d])}p.Marshall(["h"],
41
- [r],this.replybuffer,7);this.BuildReply(g,f,e-7);this.SendReply(a);break;case 120:d=p.Unmarshall(["w"],b,c);w.Debug("[clunk]: fid="+d[0]);this.fids[d[0]]&&0<=this.fids[d[0]].inodeid&&(await this.fs.CloseInode(this.fids[d[0]].inodeid),this.fids[d[0]].inodeid=-1,this.fids[d[0]].type=-1);this.BuildReply(g,f,0);this.SendReply(a);break;case 32:d=p.Unmarshall(["w","s","d","w"],b,c);l=d[0];e=d[1];c=d[2];b=d[3];w.Debug("[txattrcreate]: fid="+l+" name="+e+" attr_size="+c+" flags="+b);this.fids[l].type=2;this.BuildReply(g,
42
- f,0);this.SendReply(a);break;case 30:d=p.Unmarshall(["w","w","s"],b,c);l=d[0];e=d[2];w.Debug("[xattrwalk]: fid="+d[0]+" newfid="+d[1]+" name="+d[2]);this.SendError(f,"Setxattr not supported",95);this.SendReply(a);break;default:w.Debug("Error in Virtio9p: Unknown id "+g+" received"),w.Abort()}};var ma=-15786961;function pa(a){this.ports=[];this.cpu=a;for(var b=0;65536>b;b++)this.ports[b]=this.create_empty_entry();var c=a.memory_size[0];for(b=0;b<<17<c;b++)a.memory_map_read8[b]=a.memory_map_write8[b]=
43
- void 0,a.memory_map_read32[b]=a.memory_map_write32[b]=void 0;this.mmap_register(c,4294967296-c,function(d){E("Read from unmapped memory space, addr="+B(d>>>0,8),32);return 255},function(d,e){E("Write to unmapped memory space, addr="+B(d>>>0,8)+" value="+B(e,2),32)},function(d){E("Read from unmapped memory space, addr="+B(d>>>0,8),32);return-1},function(d,e){E("Write to unmapped memory space, addr="+B(d>>>0,8)+" value="+B(e>>>0,8),32)})}pa.prototype.create_empty_entry=function(){return{read8:this.empty_port_read8,
44
- read16:this.empty_port_read16,read32:this.empty_port_read32,write8:this.empty_port_write,write16:this.empty_port_write,write32:this.empty_port_write,device:void 0}};pa.prototype.empty_port_read8=function(){return 255};pa.prototype.empty_port_read16=function(){return 65535};pa.prototype.empty_port_read32=function(){return-1};pa.prototype.empty_port_write=function(){};pa.prototype.register_read=function(a,b,c,d,e){function g(f){h(!1,"Overlapped read"+f+" "+B(a,4)+" ("+b.name+")");return-1>>>32-f|0}
45
- h("number"===typeof a);h("object"===typeof b);h(!c||"function"===typeof c);h(!d||"function"===typeof d);h(!e||"function"===typeof e);h(c||d||e);c||(c=g.bind(this,8));d||(d=g.bind(this,16));e||(e=g.bind(this,32));c&&(this.ports[a].read8=c);d&&(this.ports[a].read16=d);e&&(this.ports[a].read32=e);this.ports[a].device=b};pa.prototype.register_write=function(a,b,c,d,e){function g(f){h(!1,"Overlapped write"+f+" "+B(a)+" ("+b.name+")")}h("number"===typeof a);h("object"===typeof b);h(!c||"function"===typeof c);
46
- h(!d||"function"===typeof d);h(!e||"function"===typeof e);h(c||d||e);c||(c=g.bind(this,8));d||(d=g.bind(this,16));e||(e=g.bind(this,32));c&&(this.ports[a].write8=c);d&&(this.ports[a].write16=d);e&&(this.ports[a].write32=e);this.ports[a].device=b};pa.prototype.register_read_consecutive=function(a,b,c,d,e,g){function f(){return c.call(this)|d.call(this)<<8}function l(){return e.call(this)|g.call(this)<<8}function n(){return c.call(this)|d.call(this)<<8|e.call(this)<<16|g.call(this)<<24}h(4===arguments.length||
47
- 6===arguments.length);e&&g?(this.register_read(a,b,c,f,n),this.register_read(a+1,b,d),this.register_read(a+2,b,e,l),this.register_read(a+3,b,g)):(this.register_read(a,b,c,f),this.register_read(a+1,b,d))};pa.prototype.register_write_consecutive=function(a,b,c,d,e,g){function f(m){c.call(this,m&255);d.call(this,m>>8&255)}function l(m){e.call(this,m&255);g.call(this,m>>8&255)}function n(m){c.call(this,m&255);d.call(this,m>>8&255);e.call(this,m>>16&255);g.call(this,m>>>24)}h(4===arguments.length||6===
48
- arguments.length);e&&g?(this.register_write(a,b,c,f,n),this.register_write(a+1,b,d),this.register_write(a+2,b,e,l),this.register_write(a+3,b,g)):(this.register_write(a,b,c,f),this.register_write(a+1,b,d))};pa.prototype.mmap_read32_shim=function(a){var b=this.cpu.memory_map_read8[a>>>17];return b(a)|b(a+1)<<8|b(a+2)<<16|b(a+3)<<24};pa.prototype.mmap_write32_shim=function(a,b){var c=this.cpu.memory_map_write8[a>>>17];c(a,b&255);c(a+1,b>>8&255);c(a+2,b>>16&255);c(a+3,b>>>24)};pa.prototype.mmap_register=
49
- function(a,b,c,d,e,g){E("mmap_register addr="+B(a>>>0,8)+" size="+B(b,8),32);h(0===(a&131071));h(b&&0===(b&131071));e||(e=this.mmap_read32_shim.bind(this));g||(g=this.mmap_write32_shim.bind(this));for(a>>>=17;0<b;a++)this.cpu.memory_map_read8[a]=c,this.cpu.memory_map_write8[a]=d,this.cpu.memory_map_read32[a]=e,this.cpu.memory_map_write32[a]=g,b-=131072};pa.prototype.port_write8=function(a,b){var c=this.ports[a];c.write8===this.empty_port_write&&E("write8 port #"+B(a,4)+" <- "+B(b,2)+this.get_port_description(a),
50
- 32);return c.write8.call(c.device,b)};pa.prototype.port_write16=function(a,b){var c=this.ports[a];c.write16===this.empty_port_write&&E("write16 port #"+B(a,4)+" <- "+B(b,4)+this.get_port_description(a),32);return c.write16.call(c.device,b)};pa.prototype.port_write32=function(a,b){var c=this.ports[a];c.write32===this.empty_port_write&&E("write32 port #"+B(a,4)+" <- "+B(b>>>0,8)+this.get_port_description(a),32);return c.write32.call(c.device,b)};pa.prototype.port_read8=function(a){var b=this.ports[a];
51
- b.read8===this.empty_port_read8&&E("read8 port #"+B(a,4)+this.get_port_description(a),32);b=b.read8.call(b.device,a);h("number"===typeof b);h(256>b&&0<=b,"8 bit port returned large value: "+B(a));return b};pa.prototype.port_read16=function(a){var b=this.ports[a];b.read16===this.empty_port_read16&&E("read16 port #"+B(a,4)+this.get_port_description(a),32);b=b.read16.call(b.device,a);h("number"===typeof b);h(65536>b&&0<=b,"16 bit port returned large value: "+B(a));return b};pa.prototype.port_read32=
52
- function(a){var b=this.ports[a];b.read32===this.empty_port_read32&&E("read32 port #"+B(a,4)+this.get_port_description(a),32);a=b.read32.call(b.device,a);h((a|0)===a);return a};var qa={4:"PORT_DMA_ADDR_2",5:"PORT_DMA_CNT_2",10:"PORT_DMA1_MASK_REG",11:"PORT_DMA1_MODE_REG",12:"PORT_DMA1_CLEAR_FF_REG",13:"PORT_DMA1_MASTER_CLEAR",32:"PORT_PIC1_CMD",33:"PORT_PIC1_DATA",64:"PORT_PIT_COUNTER0",65:"PORT_PIT_COUNTER1",66:"PORT_PIT_COUNTER2",67:"PORT_PIT_MODE",96:"PORT_PS2_DATA",97:"PORT_PS2_CTRLB",100:"PORT_PS2_STATUS",
53
- 112:"PORT_CMOS_INDEX",113:"PORT_CMOS_DATA",128:"PORT_DIAG",129:"PORT_DMA_PAGE_2",146:"PORT_A20",160:"PORT_PIC2_CMD",161:"PORT_PIC2_DATA",178:"PORT_SMI_CMD",179:"PORT_SMI_STATUS",212:"PORT_DMA2_MASK_REG",214:"PORT_DMA2_MODE_REG",218:"PORT_DMA2_MASTER_CLEAR",240:"PORT_MATH_CLEAR",368:"PORT_ATA2_CMD_BASE",496:"PORT_ATA1_CMD_BASE",632:"PORT_LPT2",744:"PORT_SERIAL4",760:"PORT_SERIAL2",884:"PORT_ATA2_CTRL_BASE",888:"PORT_LPT1",1E3:"PORT_SERIAL3",1008:"PORT_FD_BASE",1010:"PORT_FD_DOR",1012:"PORT_FD_STATUS",
54
- 1013:"PORT_FD_DATA",1014:"PORT_HD_DATA",1015:"PORT_FD_DIR",1016:"PORT_SERIAL1",3320:"PORT_PCI_CMD",3321:"PORT_PCI_REBOOT",3324:"PORT_PCI_DATA",1026:"PORT_BIOS_DEBUG",1296:"PORT_QEMU_CFG_CTL",1297:"PORT_QEMU_CFG_DATA",45056:"PORT_ACPI_PM_BASE",45312:"PORT_SMB_BASE",35072:"PORT_BIOS_APM"};pa.prototype.get_port_description=function(a){return qa[a]?" ("+qa[a]+")":""};function F(a,b){this.stopping=this.running=!1;this.idle=!0;this.tick_counter=0;this.worker=null;this.cpu=new G(a,b,()=>{this.idle&&this.next_tick(0)});
55
- this.bus=a;this.register_yield()}F.prototype.run=function(){this.stopping=!1;this.running||(this.running=!0,this.bus.send("emulator-started"));this.next_tick(0)};F.prototype.do_tick=function(){if(this.stopping||!this.running)this.stopping=this.running=!1,this.bus.send("emulator-stopped");else{this.idle=!1;var a=this.cpu.main_loop();this.next_tick(a)}};F.prototype.next_tick=function(a){const b=++this.tick_counter;this.idle=!0;this.yield(a,b)};F.prototype.yield_callback=function(a){a===this.tick_counter&&
56
- this.do_tick()};F.prototype.stop=function(){this.running&&(this.stopping=!0)};F.prototype.destroy=function(){this.unregister_yield()};F.prototype.restart=function(){this.cpu.reset_cpu();this.cpu.load_bios()};F.prototype.init=function(a){this.cpu.init(a,this.bus);this.bus.send("emulator-ready")};if("undefined"!==typeof process)F.prototype.yield=function(a,b){1>a?global.setImmediate(c=>this.yield_callback(c),b):setTimeout(c=>this.yield_callback(c),a,b)},F.prototype.register_yield=function(){},F.prototype.unregister_yield=
57
- function(){};else if("undefined"!==typeof Worker){function a(){let b;globalThis.onmessage=function(c){const d=c.data.t;b=b&&clearTimeout(b);1>d?postMessage(c.data.tick):b=setTimeout(()=>postMessage(c.data.tick),d)}}F.prototype.register_yield=function(){const b=URL.createObjectURL(new Blob(["("+a.toString()+")()"],{type:"text/javascript"}));this.worker=new Worker(b);this.worker.onmessage=c=>this.yield_callback(c.data);URL.revokeObjectURL(b)};F.prototype.yield=function(b,c){this.worker.postMessage({t:b,
58
- tick:c})};F.prototype.unregister_yield=function(){this.worker&&this.worker.terminate();this.worker=null}}else F.prototype.yield=function(a){setTimeout(()=>{this.do_tick()},a)},F.prototype.register_yield=function(){},F.prototype.unregister_yield=function(){};F.prototype.save_state=function(){return this.cpu.save_state()};F.prototype.restore_state=function(a){return this.cpu.restore_state(a)};if("object"===typeof performance&&performance.now)F.microtick=performance.now.bind(performance);else if("function"===
59
- typeof require){const {performance:a}=require("perf_hooks");F.microtick=a.now.bind(a)}else F.microtick="object"===typeof process&&process.hrtime?function(){var a=process.hrtime();return 1E3*a[0]+a[1]/1E6}:Date.now;var J=J||{};J.exportSymbol=function(a,b){"undefined"!==typeof module&&"undefined"!==typeof module.exports?module.exports[a]=b:"undefined"!==typeof window?window[a]=b:"function"===typeof importScripts&&(self[a]=b)};J.exportProperty=function(){};var k=k||{};k.pads=function(a,b){return(a||
60
- 0===a?a+"":"").padEnd(b," ")};k.pad0=function(a,b){return(a||0===a?a+"":"").padStart(b,"0")};k.zeros=function(a){return Array(a).fill(0)};k.range=function(a){return Array.from(Array(a).keys())};k.view=function(a,b,c,d){h(0<=c);return new Proxy({},{get:function(e,g){e=new a(b.buffer,c,d);const f=e[g];if("function"===typeof f)return f.bind(e);h(/^\d+$/.test(g)||"buffer"===g||"length"===g||"BYTES_PER_ELEMENT"===g||"byteOffset"===g);return f},set:function(e,g,f){h(/^\d+$/.test(g));(new a(b.buffer,c,d))[g]=
61
- f;return!0}})};function B(a,b){a=a?a.toString(16):"";return"0x"+k.pad0(a.toUpperCase(),b||1)}if("undefined"!==typeof crypto&&crypto.getRandomValues){const a=new Int32Array(1);k.get_rand_int=function(){crypto.getRandomValues(a);return a[0]}}else if("undefined"!==typeof require){const a=require("crypto");k.get_rand_int=function(){return a.randomBytes(4).readInt32LE(0)}}else h(!1,"Unsupported platform: No cryptographic random values");(function(){if("function"===typeof Math.clz32)k.int_log2=function(d){h(0<
62
- d);return 31-Math.clz32(d)};else{for(var a=new Int8Array(256),b=0,c=-2;256>b;b++)b&b-1||c++,a[b]=c;k.int_log2=function(d){d>>>=0;h(0<d);var e=d>>>16;if(e){var g=e>>>8;return g?24+a[g]:16+a[e]}return(g=d>>>8)?8+a[g]:a[d]}}})();k.round_up_to_next_power_of_2=function(a){h(0<=a);return 1>=a?1:1<<1+k.int_log2(a-1)};h(0===k.int_log2(1));h(1===k.int_log2(2));h(2===k.int_log2(7));h(3===k.int_log2(8));h(26===k.int_log2(123456789));h(1===k.round_up_to_next_power_of_2(0));h(1===k.round_up_to_next_power_of_2(1));
63
- h(2===k.round_up_to_next_power_of_2(2));h(8===k.round_up_to_next_power_of_2(7));h(8===k.round_up_to_next_power_of_2(8));h(134217728===k.round_up_to_next_power_of_2(123456789));function sa(a){var b=new Uint8Array(a),c,d;h(0===(a&a-1));this.length=0;this.push=function(e){this.length!==a&&this.length++;b[d]=e;d=d+1&a-1};this.shift=function(){if(this.length){var e=b[c];c=c+1&a-1;this.length--;return e}return-1};this.peek=function(){return this.length?b[c]:-1};this.clear=function(){this.length=d=c=0};
64
- this.clear()}function ta(a){this.size=a;this.data=new Float32Array(a);this.length=this.end=this.start=0;h(0===(a&a-1))}ta.prototype.push=function(a){this.length===this.size?this.start=this.start+1&this.size-1:this.length++;this.data[this.end]=a;this.end=this.end+1&this.size-1};ta.prototype.shift=function(){if(this.length){var a=this.data[this.start];this.start=this.start+1&this.size-1;this.length--;return a}};ta.prototype.shift_block=function(a){var b=new Float32Array(a);a>this.length&&(a=this.length);
65
- var c=this.start+a,d=this.data.subarray(this.start,c);b.set(d);c>=this.size&&(c-=this.size,b.set(this.data.subarray(0,c),d.length));this.start=c;this.length-=a;return b};ta.prototype.peek=function(){if(this.length)return this.data[this.start]};ta.prototype.clear=function(){this.length=this.end=this.start=0};function va(a,b){Array.isArray(a)||(a=[a]);var c=new Blob(a);a=document.createElement("a");a.download=b;a.href=window.URL.createObjectURL(c);a.dataset.downloadurl=["application/octet-stream",a.download,
66
- a.href].join(":");document.createEvent?(b=document.createEvent("MouseEvent"),b.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),a.dispatchEvent(b)):a.click();window.URL.revokeObjectURL(a.href)}k.Bitmap=function(a){"number"===typeof a?this.view=new Uint8Array(a+7>>3):a instanceof ArrayBuffer?this.view=new Uint8Array(a):h(!1,"v86util.Bitmap: Invalid argument")};k.Bitmap.prototype.set=function(a,b){const c=a>>3;a=1<<(a&7);this.view[c]=b?this.view[c]|a:this.view[c]&~a};k.Bitmap.prototype.get=
67
- function(a){return this.view[a>>3]>>(a&7)&1};k.Bitmap.prototype.get_buffer=function(){return this.view.buffer};k.load_file="undefined"===typeof XMLHttpRequest?wa:xa;function xa(a,b,c){function d(){const n=c||0;setTimeout(()=>{xa(a,b,n+1)},1E3*([1,1,2,3,5,8,13,21][n]||34))}var e=new XMLHttpRequest;e.open(b.method||"get",a,!0);e.responseType=b.as_json?"json":"arraybuffer";if(b.headers)for(var g=Object.keys(b.headers),f=0;f<g.length;f++){var l=g[f];e.setRequestHeader(l,b.headers[l])}b.range&&(g=b.range.start,
68
- e.setRequestHeader("Range","bytes="+g+"-"+(g+b.range.length-1)),e.setRequestHeader("X-Accept-Encoding","identity"),e.onreadystatechange=function(){200===e.status&&(console.error("Server sent full file in response to ranged request, aborting",{filename:a}),e.abort())});e.onload=function(){if(4===e.readyState)if(200!==e.status&&206!==e.status)console.error("Loading the image "+a+" failed (status %d)",e.status),500<=e.status&&600>e.status&&d();else if(e.response){if(b.range){const n=e.getResponseHeader("Content-Encoding");
69
- n&&"identity"!==n&&console.error("Server sent Content-Encoding in response to ranged request",{filename:a,enc:n})}b.done&&b.done(e.response,e)}};e.onerror=function(n){console.error("Loading the image "+a+" failed",n);d()};b.progress&&(e.onprogress=function(n){b.progress(n)});e.send(null)}function wa(a,b){const c=require("fs");b.range?(h(!b.as_json),c.open(a,"r",(d,e)=>{if(d)throw d;const g=b.range.length;var f=Buffer.allocUnsafe(g);c.read(e,f,0,g,b.range.start,(l,n)=>{if(l)throw l;h(n===g);b.done&&
70
- b.done(new Uint8Array(f));c.close(e,m=>{if(m)throw m;})})})):c.readFile(a,{encoding:b.as_json?"utf-8":null},function(d,e){d?console.log("Could not read file:",a,d):(d=e,d=b.as_json?JSON.parse(d):(new Uint8Array(d)).buffer,b.done(d))})}k.read_sized_string_from_mem=function(a,b,c){return String.fromCharCode(...(new Uint8Array(a.buffer,b>>>0,c>>>0)))};(function(){function a(f){h(f instanceof ArrayBuffer);this.buffer=f;this.byteLength=f.byteLength;this.onprogress=this.onload=void 0}function b(f,l,n){this.filename=
71
- f;this.byteLength=l;this.block_cache=new Map;this.block_cache_is_write=new Set;this.fixed_chunk_size=n;this.cache_reads=!!n;this.onprogress=this.onload=void 0}function c(f,l,n,m,q){const r=f.match(/\.[^\.]+(\.zst)?$/);this.extension=r?r[0]:"";this.basename=f.substring(0,f.length-this.extension.length);this.is_zstd=this.extension.endsWith(".zst");this.basename.endsWith("/")||(this.basename+="-");this.block_cache=new Map;this.block_cache_is_write=new Set;this.byteLength=l;this.fixed_chunk_size=n;this.partfile_alt_format=
72
- !!m;this.zstd_decompress=q;this.cache_reads=!!n;this.onprogress=this.onload=void 0}function d(f){this.file=f;this.byteLength=f.size;1073741824<f.size&&console.warn("SyncFileBuffer: Allocating buffer of "+(f.size>>20)+" MB ...");this.buffer=new ArrayBuffer(f.size);this.onprogress=this.onload=void 0}function e(f){this.file=f;this.byteLength=f.size;this.block_cache=new Map;this.block_cache_is_write=new Set;this.onprogress=this.onload=void 0}k.SyncBuffer=a;k.AsyncXHRBuffer=b;k.AsyncXHRPartfileBuffer=
73
- c;k.AsyncFileBuffer=e;k.SyncFileBuffer=d;k.buffer_from_object=function(f,l){if(f.buffer instanceof ArrayBuffer)return new k.SyncBuffer(f.buffer);if("undefined"!==typeof File&&f.buffer instanceof File)return l=f.async,void 0===l&&(l=268435456<=f.buffer.size),l?new k.AsyncFileBuffer(f.buffer):new k.SyncFileBuffer(f.buffer);if(f.url)return f.use_parts?new k.AsyncXHRPartfileBuffer(f.url,f.size,f.fixed_chunk_size,!1,l):new k.AsyncXHRBuffer(f.url,f.size,f.fixed_chunk_size);E("Ignored file: url="+f.url+
74
- " buffer="+f.buffer)};a.prototype.load=function(){this.onload&&this.onload({buffer:this.buffer})};a.prototype.get=function(f,l,n){h(f+l<=this.byteLength);n(new Uint8Array(this.buffer,f,l))};a.prototype.set=function(f,l,n){h(f+l.byteLength<=this.byteLength);(new Uint8Array(this.buffer,f,l.byteLength)).set(l);n()};a.prototype.get_buffer=function(f){f(this.buffer)};a.prototype.get_state=function(){const f=[];f[0]=this.byteLength;f[1]=new Uint8Array(this.buffer);return f};a.prototype.set_state=function(f){this.byteLength=
75
- f[0];this.buffer=f[1].slice().buffer};b.prototype.load=function(){void 0!==this.byteLength?this.onload&&this.onload(Object.create(null)):g(this.filename,(f,l)=>{if(f)throw Error("Cannot use: "+this.filename+". "+f);h(0<=l);this.byteLength=l;this.onload&&this.onload(Object.create(null))})};b.prototype.get_from_cache=function(f,l){var n=l/256;f/=256;for(var m=0;m<n;m++)if(!this.block_cache.get(f+m))return;if(1===n)return this.block_cache.get(f);l=new Uint8Array(l);for(m=0;m<n;m++)l.set(this.block_cache.get(f+
76
- m),256*m);return l};b.prototype.get=function(f,l,n){h(f+l<=this.byteLength);h(0===f%256);h(0===l%256);h(l);var m=this.get_from_cache(f,l);if(m)n(m);else{var q=f,r=l;this.fixed_chunk_size&&(q=f-f%this.fixed_chunk_size,r=Math.ceil((f-q+l)/this.fixed_chunk_size)*this.fixed_chunk_size);k.load_file(this.filename,{done:function(t){t=new Uint8Array(t);this.handle_read(q,r,t);q===f&&r===l?n(t):n(t.subarray(f-q,f-q+l))}.bind(this),range:{start:q,length:r}})}};b.prototype.set=function(f,l,n){var m=l.length;
77
- h(f+l.byteLength<=this.byteLength);h(0===f%256);h(0===m%256);h(m);f/=256;m/=256;for(var q=0;q<m;q++){var r=this.block_cache.get(f+q);if(void 0===r)r=l.slice(256*q,256*(q+1)),this.block_cache.set(f+q,r);else{const t=l.subarray(256*q,256*(q+1));h(r.byteLength===t.length);r.set(t)}this.block_cache_is_write.add(f+q)}n()};b.prototype.handle_read=function(f,l,n){f/=256;l/=256;for(var m=0;m<l;m++){const q=this.block_cache.get(f+m);q?n.set(q,256*m):this.cache_reads&&this.block_cache.set(f+m,n.slice(256*m,
78
- 256*(m+1)))}};b.prototype.get_buffer=function(f){f()};b.prototype.get_state=function(){const f=[],l=[];for(const [n,m]of this.block_cache)h(isFinite(n)),this.block_cache_is_write.has(n)&&l.push([n,m]);f[0]=l;return f};b.prototype.set_state=function(f){f=f[0];this.block_cache.clear();this.block_cache_is_write.clear();for(const [l,n]of f)h(isFinite(l)),this.block_cache.set(l,n),this.block_cache_is_write.add(l)};c.prototype.load=function(){void 0===this.byteLength&&h(!1);this.onload&&this.onload(Object.create(null))};
79
- c.prototype.get=function(f,l,n){h(f+l<=this.byteLength);h(0===f%256);h(0===l%256);h(l);var m=this.get_from_cache(f,l);if(m)n(m);else if(this.fixed_chunk_size){const r=Math.floor(f/this.fixed_chunk_size),t=f-r*this.fixed_chunk_size;h(0<=t);const v=Math.ceil((t+l)/this.fixed_chunk_size),y=new Uint8Array(v*this.fixed_chunk_size);let D=0;for(let u=0;u<v;u++){var q=(r+u)*this.fixed_chunk_size;m=this.partfile_alt_format?this.basename+(r+u+"").padStart(8,"0")+this.extension:this.basename+q+"-"+(q+this.fixed_chunk_size)+
80
- this.extension;(q=this.get_from_cache(q,this.fixed_chunk_size))?(y.set(q,u*this.fixed_chunk_size),D++,D===v&&n(y.subarray(t,t+l))):k.load_file(m,{done:async function(A){A=new Uint8Array(A);this.is_zstd&&(A=await this.zstd_decompress(this.fixed_chunk_size,A),A=new Uint8Array(A));y.set(A,u*this.fixed_chunk_size);this.handle_read((r+u)*this.fixed_chunk_size,this.fixed_chunk_size|0,A);D++;D===v&&n(y.subarray(t,t+l))}.bind(this)})}}else k.load_file(this.basename+f+"-"+(f+l)+this.extension,{done:function(r){h(r.byteLength===
81
- l);r=new Uint8Array(r);this.handle_read(f,l,r);n(r)}.bind(this)})};c.prototype.get_from_cache=b.prototype.get_from_cache;c.prototype.set=b.prototype.set;c.prototype.handle_read=b.prototype.handle_read;c.prototype.get_state=b.prototype.get_state;c.prototype.set_state=b.prototype.set_state;d.prototype.load=function(){this.load_next(0)};d.prototype.load_next=function(f){var l=new FileReader;l.onload=function(m){m=new Uint8Array(m.target.result);(new Uint8Array(this.buffer,f)).set(m);this.load_next(f+
82
- 4194304)}.bind(this);if(this.onprogress)this.onprogress({loaded:f,total:this.byteLength,lengthComputable:!0});if(f<this.byteLength){var n=this.file.slice(f,Math.min(f+4194304,this.byteLength));l.readAsArrayBuffer(n)}else this.file=void 0,this.onload&&this.onload({buffer:this.buffer})};d.prototype.get=a.prototype.get;d.prototype.set=a.prototype.set;d.prototype.get_buffer=a.prototype.get_buffer;d.prototype.get_state=a.prototype.get_state;d.prototype.set_state=a.prototype.set_state;e.prototype.load=
83
- function(){this.onload&&this.onload(Object.create(null))};e.prototype.get=function(f,l,n){h(0===f%256);h(0===l%256);h(l);var m=this.get_from_cache(f,l);m?n(m):(m=new FileReader,m.onload=function(q){q=new Uint8Array(q.target.result);this.handle_read(f,l,q);n(q)}.bind(this),m.readAsArrayBuffer(this.file.slice(f,f+l)))};e.prototype.get_from_cache=b.prototype.get_from_cache;e.prototype.set=b.prototype.set;e.prototype.handle_read=b.prototype.handle_read;e.prototype.get_state=b.prototype.get_state;e.prototype.set_state=
84
- b.prototype.set_state;e.prototype.get_buffer=function(f){f()};e.prototype.get_as_file=function(f){for(var l=[],n=Array.from(this.block_cache.keys()).sort(function(v,y){return v-y}),m=0,q=0;q<n.length;q++){var r=n[q],t=this.block_cache.get(r);r*=256;h(r>=m);r!==m&&(l.push(this.file.slice(m,r)),m=r);l.push(t);m+=t.length}m!==this.file.size&&l.push(this.file.slice(m));f=new File(l,f);h(f.size===this.file.size);return f};var g="undefined"===typeof XMLHttpRequest?function(f,l){require("fs").stat(f,(n,
85
- m)=>{n?l(n):l(null,m.size)})}:function(f,l){k.load_file(f,{done:(n,m)=>{n=m.getResponseHeader("Content-Range")||"";(m=n.match(/\/(\d+)\s*$/))?l(null,+m[1]):l("`Range: bytes=...` header not supported (Got `"+n+"`)")},headers:{Range:"bytes=0-0","X-Accept-Encoding":"identity"}})}})();function ya(a,b,c,d,e,g){this.master=new K(this,a,b,d,e,0,g);this.slave=new K(this,a,c,!1,e,1,g);this.current_interface=this.master;this.cpu=a;0===e?(this.ata_port=496,this.irq=14,this.pci_id=240):1===e?(this.ata_port=368,
86
- this.irq=15,this.pci_id=248):h(!1,"IDE device with nr "+e+" ignored",32768);this.ata_port_high=this.ata_port|516;this.master_port=46080;this.pci_space=[134,128,16,112,5,0,160,2,0,128,1,1,0,0,0,0,this.ata_port&255|1,this.ata_port>>8,0,0,this.ata_port_high&255|1,this.ata_port_high>>8,0,0,0,0,0,0,0,0,0,0,this.master_port&255|1,this.master_port>>8,0,0,0,0,0,0,0,0,0,0,67,16,212,130,0,0,0,0,0,0,0,0,0,0,0,0,this.irq,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
87
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.pci_bars=[{size:8},{size:4},void 0,void 0,{size:16}];this.name="ide"+e;this.device_control=2;a.io.register_read(this.ata_port|7,this,function(){E("lower irq",32768);this.cpu.device_lower_irq(this.irq);return this.read_status()});a.io.register_read(this.ata_port_high|2,this,this.read_status);a.io.register_write(this.ata_port_high|2,this,this.write_control);a.io.register_read(this.ata_port|
88
- 0,this,function(){return this.current_interface.read_data(1)},function(){return this.current_interface.read_data(2)},function(){return this.current_interface.read_data(4)});a.io.register_read(this.ata_port|1,this,function(){E("Read error: "+B(this.current_interface.error&255)+" slave="+(this.current_interface===this.slave),32768);return this.current_interface.error&255});a.io.register_read(this.ata_port|2,this,function(){E("Read bytecount: "+B(this.current_interface.bytecount&255),32768);return this.current_interface.bytecount&
89
- 255});a.io.register_read(this.ata_port|3,this,function(){E("Read sector: "+B(this.current_interface.sector&255),32768);return this.current_interface.sector&255});a.io.register_read(this.ata_port|4,this,function(){E("Read 1F4: "+B(this.current_interface.cylinder_low&255),32768);return this.current_interface.cylinder_low&255});a.io.register_read(this.ata_port|5,this,function(){E("Read 1F5: "+B(this.current_interface.cylinder_high&255),32768);return this.current_interface.cylinder_high&255});a.io.register_read(this.ata_port|
90
- 6,this,function(){E("Read 1F6",32768);return this.current_interface.drive_head&255});a.io.register_write(this.ata_port|0,this,function(f){this.current_interface.write_data_port8(f)},function(f){this.current_interface.write_data_port16(f)},function(f){this.current_interface.write_data_port32(f)});a.io.register_write(this.ata_port|1,this,function(f){E("1F1/lba_count: "+B(f),32768);this.master.lba_count=(this.master.lba_count<<8|f)&65535;this.slave.lba_count=(this.slave.lba_count<<8|f)&65535});a.io.register_write(this.ata_port|
91
- 2,this,function(f){E("1F2/bytecount: "+B(f),32768);this.master.bytecount=(this.master.bytecount<<8|f)&65535;this.slave.bytecount=(this.slave.bytecount<<8|f)&65535});a.io.register_write(this.ata_port|3,this,function(f){E("1F3/sector: "+B(f),32768);this.master.sector=(this.master.sector<<8|f)&65535;this.slave.sector=(this.slave.sector<<8|f)&65535});a.io.register_write(this.ata_port|4,this,function(f){E("1F4/sector low: "+B(f),32768);this.master.cylinder_low=(this.master.cylinder_low<<8|f)&65535;this.slave.cylinder_low=
92
- (this.slave.cylinder_low<<8|f)&65535});a.io.register_write(this.ata_port|5,this,function(f){E("1F5/sector high: "+B(f),32768);this.master.cylinder_high=(this.master.cylinder_high<<8|f)&65535;this.slave.cylinder_high=(this.slave.cylinder_high<<8|f)&65535});a.io.register_write(this.ata_port|6,this,function(f){var l=f&16;E("1F6/drive: "+B(f,2),32768);l?(E("Slave",32768),this.current_interface=this.slave):this.current_interface=this.master;this.master.drive_head=f;this.slave.drive_head=f;this.master.is_lba=
93
- this.slave.is_lba=f>>6&1;this.master.head=this.slave.head=f&15});this.dma_command=this.dma_status=this.prdt_addr=0;a.io.register_write(this.ata_port|7,this,function(f){E("lower irq",32768);this.cpu.device_lower_irq(this.irq);this.current_interface.ata_command(f)});a.io.register_read(this.master_port|4,this,void 0,void 0,this.dma_read_addr);a.io.register_write(this.master_port|4,this,void 0,void 0,this.dma_set_addr);a.io.register_read(this.master_port,this,this.dma_read_command8,void 0,this.dma_read_command);
94
- a.io.register_write(this.master_port,this,this.dma_write_command8,void 0,this.dma_write_command);a.io.register_read(this.master_port|2,this,this.dma_read_status);a.io.register_write(this.master_port|2,this,this.dma_write_status);a.io.register_read(this.master_port|8,this,function(){E("DMA read 0x8",32768);return 0});a.io.register_read(this.master_port|10,this,function(){E("DMA read 0xA",32768);return 0});a.devices.pci.register_device(this);Object.seal(this)}ya.prototype.read_status=function(){if(this.current_interface.buffer){var a=
95
- this.current_interface.status;E("ATA read status: "+B(a,2),32768);return a}return 0};ya.prototype.write_control=function(a){E("set device control: "+B(a,2)+" interrupts "+(a&2?"disabled":"enabled"),32768);a&4&&(E("Reset via control port",32768),this.cpu.device_lower_irq(this.irq),this.master.device_reset(),this.slave.device_reset());this.device_control=a};ya.prototype.dma_read_addr=function(){E("dma get address: "+B(this.prdt_addr,8),32768);return this.prdt_addr};ya.prototype.dma_set_addr=function(a){E("dma set address: "+
96
- B(a,8),32768);this.prdt_addr=a};ya.prototype.dma_read_status=function(){E("DMA read status: "+B(this.dma_status),32768);return this.dma_status};ya.prototype.dma_write_status=function(a){E("DMA set status: "+B(a),32768);this.dma_status&=~(a&6)};ya.prototype.dma_read_command=function(){return this.dma_read_command8()|this.dma_read_status()<<16};ya.prototype.dma_read_command8=function(){E("DMA read command: "+B(this.dma_command),32768);return this.dma_command};ya.prototype.dma_write_command=function(a){E("DMA write command: "+
97
- B(a),32768);this.dma_write_command8(a&255);this.dma_write_status(a>>16&255)};ya.prototype.dma_write_command8=function(a){E("DMA write command8: "+B(a),32768);const b=this.dma_command;this.dma_command=a&9;if((b&1)!==(a&1))if(0===(a&1))this.dma_status&=-2;else switch(this.dma_status|=1,this.current_interface.current_command){case 37:case 200:this.current_interface.do_ata_read_sectors_dma();break;case 202:case 53:this.current_interface.do_ata_write_sectors_dma();break;case 160:this.current_interface.do_atapi_dma();
98
- break;default:E("Spurious dma command write, current command: "+B(this.current_interface.current_command),32768),h(!1)}};ya.prototype.push_irq=function(){0===(this.device_control&2)&&(E("push irq",32768),this.dma_status|=4,this.cpu.device_raise_irq(this.irq))};ya.prototype.get_state=function(){var a=[];a[0]=this.master;a[1]=this.slave;a[2]=this.ata_port;a[3]=this.irq;a[4]=this.pci_id;a[5]=this.ata_port_high;a[6]=this.master_port;a[7]=this.name;a[8]=this.device_control;a[9]=this.prdt_addr;a[10]=this.dma_status;
99
- a[11]=this.current_interface===this.master;a[12]=this.dma_command;return a};ya.prototype.set_state=function(a){this.master.set_state(a[0]);this.slave.set_state(a[1]);this.ata_port=a[2];this.irq=a[3];this.pci_id=a[4];this.ata_port_high=a[5];this.master_port=a[6];this.name=a[7];this.device_control=a[8];this.prdt_addr=a[9];this.dma_status=a[10];this.current_interface=a[11]?this.master:this.slave;this.dma_command=a[12]};function K(a,b,c,d,e,g,f){this.device=a;this.bus=f;this.nr=e;this.cpu=b;this.buffer=
100
- c;this.sector_size=d?2048:512;this.is_atapi=d;this.cylinder_count=this.sectors_per_track=this.head_count=this.sector_count=0;this.buffer&&(this.sector_count=this.buffer.byteLength/this.sector_size,this.sector_count!==(this.sector_count|0)&&(E("Warning: Disk size not aligned with sector size",32768),this.sector_count=Math.ceil(this.sector_count)),d?(this.head_count=1,this.sectors_per_track=0):(this.head_count=16,this.sectors_per_track=63),this.cylinder_count=this.sector_count/this.head_count/this.sectors_per_track,
101
- this.cylinder_count!==(this.cylinder_count|0)&&(E("Warning: Rounding up cylinder count. Choose different head number",32768),this.cylinder_count=Math.floor(this.cylinder_count)),a=b.devices.rtc,a.cmos_write(57,a.cmos_read(57)|1<<4*this.nr),a.cmos_write(18,a.cmos_read(18)&15|240),a.cmos_write(27,this.cylinder_count&255),a.cmos_write(28,this.cylinder_count>>8&255),a.cmos_write(29,this.head_count&255),a.cmos_write(30,255),a.cmos_write(31,255),a.cmos_write(32,200),a.cmos_write(33,this.cylinder_count&
1
+ ;let module = {exports:{}}; var g=g||{};g.exportSymbol=function(a,b){"undefined"!==typeof module&&"undefined"!==typeof module.exports?module.exports[a]=b:"undefined"!==typeof window?window[a]=b:"function"===typeof importScripts&&(self[a]=b)};g.exportProperty=function(){};const ba=[[1,""],[2,"CPU"],[32768,"DISK"],[4,"FPU"],[8,"MEM"],[16,"DMA"],[32,"IO"],[64,"PS2"],[128,"PIC"],[256,"VGA"],[512,"PIT"],[1024,"MOUS"],[2048,"PCI"],[4096,"BIOS"],[8192,"FLOP"],[16384,"SERI"],[65536,"RTC"],[262144,"ACPI"],[524288,"APIC"],[1048576,"NET"],
2
+ [2097152,"VIO"],[4194304,"9P"],[8388608,"SB16"],[16777216,"FETC"]];var ca=-15786961;function da(a,b){return(a||0===a?a+"":"").padEnd(b," ")}function ea(a,b){return(a||0===a?a+"":"").padStart(b,"0")}function k(a,b,c,d){m(0<=c);return new Proxy({},{get:function(e,f){e=new a(b.buffer,c,d);const h=e[f];if("function"===typeof h)return h.bind(e);m(/^\d+$/.test(f)||"buffer"===f||"length"===f||"BYTES_PER_ELEMENT"===f||"byteOffset"===f);return h},set:function(e,f,h){m(/^\d+$/.test(f));(new a(b.buffer,c,d))[f]=
3
+ h;return!0}})}function z(a,b){a=a?a.toString(16):"";return"0x"+ea(a.toUpperCase(),b||1)}var fa;if("undefined"!==typeof crypto&&crypto.getRandomValues){const a=new Int32Array(1);fa=function(){crypto.getRandomValues(a);return a[0]}}else if("undefined"!==typeof require){const a=require("crypto");fa=function(){return a.randomBytes(4).readInt32LE(0)}}else"undefined"!==typeof process?import("node:crypto").then(a=>{fa=function(){return a.randomBytes(4).readInt32LE(0)}}):m(!1,"Unsupported platform: No cryptographic random values");
4
+ var ha;if("function"===typeof Math.clz32)ha=function(a){m(0<a);return 31-Math.clz32(a)};else{for(var ia=new Int8Array(256),ka=0,ma=-2;256>ka;ka++)ka&ka-1||ma++,ia[ka]=ma;ha=function(a){a>>>=0;m(0<a);var b=a>>>16;if(b){var c=b>>>8;return c?24+ia[c]:16+ia[b]}return(c=a>>>8)?8+ia[c]:ia[a]}}function na(a){m(0<=a);return 1>=a?1:1<<1+ha(a-1)}m(0===ha(1));m(1===ha(2));m(2===ha(7));m(3===ha(8));m(26===ha(123456789));m(1===na(0));m(1===na(1));m(2===na(2));m(8===na(7));m(8===na(8));m(134217728===na(123456789));
5
+ function oa(a){var b=new Uint8Array(a),c,d;m(0===(a&a-1));this.length=0;this.push=function(e){this.length!==a&&this.length++;b[d]=e;d=d+1&a-1};this.shift=function(){if(this.length){var e=b[c];c=c+1&a-1;this.length--;return e}return-1};this.peek=function(){return this.length?b[c]:-1};this.clear=function(){this.length=d=c=0};this.clear()}function ra(a){this.size=a;this.data=new Float32Array(a);this.length=this.end=this.start=0;m(0===(a&a-1))}ra.prototype.push=function(a){this.length===this.size?this.start=
6
+ this.start+1&this.size-1:this.length++;this.data[this.end]=a;this.end=this.end+1&this.size-1};ra.prototype.shift=function(){if(this.length){var a=this.data[this.start];this.start=this.start+1&this.size-1;this.length--;return a}};ra.prototype.shift_block=function(a){var b=new Float32Array(a);a>this.length&&(a=this.length);var c=this.start+a,d=this.data.subarray(this.start,c);b.set(d);c>=this.size&&(c-=this.size,b.set(this.data.subarray(0,c),d.length));this.start=c;this.length-=a;return b};ra.prototype.peek=
7
+ function(){if(this.length)return this.data[this.start]};ra.prototype.clear=function(){this.length=this.end=this.start=0};function sa(a,b){Array.isArray(a)||(a=[a]);var c=new Blob(a);a=document.createElement("a");a.download=b;a.href=window.URL.createObjectURL(c);a.dataset.downloadurl=["application/octet-stream",a.download,a.href].join(":");document.createEvent?(b=document.createEvent("MouseEvent"),b.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),a.dispatchEvent(b)):a.click();window.URL.revokeObjectURL(a.href)}
8
+ function ua(a){"number"===typeof a?this.view=new Uint8Array(a+7>>3):a instanceof ArrayBuffer?this.view=new Uint8Array(a):m(!1,"Bitmap: Invalid argument")}ua.prototype.set=function(a,b){const c=a>>3;a=1<<(a&7);this.view[c]=b?this.view[c]|a:this.view[c]&~a};ua.prototype.get=function(a){return this.view[a>>3]>>(a&7)&1};ua.prototype.get_buffer=function(){return this.view.buffer};var va;va="undefined"===typeof XMLHttpRequest?wa:xa;function xa(a,b,c){function d(){const n=c||0;setTimeout(()=>{va(a,b,n+1)},
9
+ 1E3*([1,1,2,3,5,8,13,21][n]||34))}var e=new XMLHttpRequest;e.open(b.method||"get",a,!0);e.responseType=b.as_json?"json":"arraybuffer";if(b.headers)for(var f=Object.keys(b.headers),h=0;h<f.length;h++){var l=f[h];e.setRequestHeader(l,b.headers[l])}b.range&&(f=b.range.start,e.setRequestHeader("Range","bytes="+f+"-"+(f+b.range.length-1)),e.setRequestHeader("X-Accept-Encoding","identity"),e.onreadystatechange=function(){200===e.status&&(console.error("Server sent full file in response to ranged request, aborting",
10
+ {filename:a}),e.abort())});e.onload=function(){if(4===e.readyState)if(200!==e.status&&206!==e.status)console.error("Loading the image "+a+" failed (status %d)",e.status),500<=e.status&&600>e.status&&d();else if(e.response){if(b.range){const n=e.getResponseHeader("Content-Encoding");n&&"identity"!==n&&console.error("Server sent Content-Encoding in response to ranged request",{filename:a,enc:n})}b.done&&b.done(e.response,e)}};e.onerror=function(n){console.error("Loading the image "+a+" failed",n);d()};
11
+ b.progress&&(e.onprogress=function(n){b.progress(n)});e.send(null)}function wa(a,b){if(b.range)m(!b.as_json),import("node:fs").then(d=>d.open(a,"r",(e,f)=>{if(e)throw e;const h=b.range.length;var l=Buffer.allocUnsafe(h);d.read(f,l,0,h,b.range.start,(n,p)=>{if(n)throw n;m(p===h);b.done&&b.done(new Uint8Array(l));d.close(f,q=>{if(q)throw q;})})}));else{var c={encoding:b.as_json?"utf-8":null};import("node:fs").then(d=>d.readFile(a,c,function(e,f){e?console.log("Could not read file:",a,e):(e=f,e=b.as_json?
12
+ JSON.parse(e):(new Uint8Array(e)).buffer,b.done(e))}))}}var D=function(){var a=ba.reduce(function(d,e){d[e[0]]=e[1];return d},{}),b="",c=0;return function(d,e){e=e||1;if(e&ca){d="["+da(a[e]||"",4)+"] "+d;if(d===b&&(c++,2048>c))return;e=new Date;e=ea(e.getHours(),2)+":"+ea(e.getMinutes(),2)+":"+ea(e.getSeconds(),2)+"+"+ea(e.getMilliseconds(),3)+" ";c&&(1===c?console.log(e+b):console.log("Previous message repeated "+c+" times"),c=0);console.log(e+d);b=d}}}();function m(a,b){if(!a){debugger;console.trace();
13
+ if(b)throw"Assert failed: "+b;throw"Assert failed";}}function za(a,b){function c(A){A=A.toString(16);return"#"+"0".repeat(6-A.length)+A}function d(A){var x=256*pa,H=8*U,M=Xa?Xa.canvas:null;M&&M.width===x&&M.height===H||(M?(M.width=x,M.height=H):(M=new OffscreenCanvas(x,H),Xa=M.getContext("2d")),Eb=Xa.createImageData(x,H));const T=Eb.data;let S=0,V;H=Fb?function(aa){V=V||aa;T[S+3]=aa;T[S+7]=aa;S+=8}:function(aa){V=V||aa;T[S+3]=aa;S+=4};M=32-U;const la=x*(U-1)*4;x=4*(pa-x*U);const ja=1020*pa;for(let aa=
14
+ 0,ta=0;2048>aa;++aa,ta+=M,S+=x){const Ha=aa%256;aa&&!Ha&&(S+=la);V=!1;for(let Oa=0;Oa<U;++Oa,++ta,S+=ja){const Pa=A[ta];for(let ya=128;0<ya;ya>>=1)H(Pa&ya?255:0);Gb&&H(Hb&&192<=Ha&&223>=Ha&&Pa&1?255:0)}$b[aa]=V?1:0}Xa.putImageData(Eb,0,0)}function e(A,x,H,M){if(x&&H){A.style.width="";A.style.height="";M&&(A.style.transform="");var T=A.getBoundingClientRect();M?A.style.transform=(1===x?"":" scaleX("+x+")")+(1===H?"":" scaleY("+H+")"):(0===x%1&&0===H%1?(h.style.imageRendering="crisp-edges",h.style.imageRendering=
15
+ "pixelated",h.style["-ms-interpolation-mode"]="nearest-neighbor"):(h.style.imageRendering="",h.style["-ms-interpolation-mode"]=""),M=window.devicePixelRatio||1,0!==M%1&&(x/=M,H/=M));1!==x&&(A.style.width=T.width*x+"px");1!==H&&(A.style.height=T.height*H+"px")}}const f=a.container;this.screen_fill_buffer=b;console.assert(f,"options.container must be provided");this.FLAG_BLINKING=1;this.FLAG_FONT_PAGE_B=2;var h=f.getElementsByTagName("canvas")[0],l=h.getContext("2d",{alpha:!1}),n=f.getElementsByTagName("div")[0],
16
+ p=document.createElement("div"),q,r,t=void 0!==a.scale?a.scale:1,v=void 0!==a.scale?a.scale:1,y=1,C,u,B,w,G,L,qa,Xa,Eb,$b=new Int8Array(2048),U,pa,Gb,Fb,Hb,Ib=0,Jb=0,tb,ac=0,ub,Kb,vb,Lb=[],kb=Lb,wb=0,Mb=!1;this.init=function(){const A=new Uint16Array([32,9786,9787,9829,9830,9827,9824,8226,9688,9675,9689,9794,9792,9834,9835,9788,9658,9668,8597,8252,182,167,9644,8616,8593,8595,8594,8592,8735,8596,9650,9660]),x=new Uint16Array([8962,199,252,233,226,228,224,229,231,234,235,232,239,238,236,196,197,201,
17
+ 230,198,244,246,242,251,249,255,214,220,162,163,165,8359,402,225,237,243,250,241,209,170,186,191,8976,172,189,188,161,171,187,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,945,223,915,960,931,963,181,964,934,920,937,948,8734,966,949,8745,8801,177,8805,8804,8992,8993,247,8776,176,8729,183,8730,8319,178,9632,
18
+ 160]);for(var H=0,M;256>H;H++)M=126<H?x[H-127]:32>H?A[H]:H,Lb.push(String.fromCharCode(M));p.classList.add("cursor");p.style.position="absolute";p.style.backgroundColor="#ccc";p.style.width="7px";p.style.display="inline-block";this.set_mode(!1);this.set_size_text(80,25);2===u&&this.set_size_graphical(720,400,720,400);this.set_scale(t,v);this.timer()};this.make_screenshot=function(){const A=new Image;if(1===u||2===u)A.src=h.toDataURL("image/png");else{const x=[9,16],H=document.createElement("canvas");
19
+ H.width=w*x[0];H.height=G*x[1];const M=H.getContext("2d");M.imageSmoothingEnabled=!1;M.font=window.getComputedStyle(n).font;M.textBaseline="top";for(let T=0;T<G;T++)for(let S=0;S<w;S++){const V=4*(T*w+S),la=B[V+0],ja=B[V+3];M.fillStyle=c(B[V+2]);M.fillRect(S*x[0],T*x[1],x[0],x[1]);M.fillStyle=c(ja);M.fillText(kb[la],S*x[0],T*x[1])}"none"!==p.style.display&&q<G&&r<w&&(M.fillStyle=p.style.backgroundColor,M.fillRect(r*x[0],q*x[1]+parseInt(p.style.marginTop,10),parseInt(p.style.width,10),parseInt(p.style.height,
20
+ 10)));A.src=H.toDataURL("image/png")}return A};this.put_char=function(A,x,H,M,T,S){m(0<=A&&A<G);m(0<=x&&x<w);m(0<=H&&256>H);x=4*(A*w+x);B[x+0]=H;B[x+1]=M;B[x+2]=T;B[x+3]=S;C[A]=1};this.timer=function(){wb=requestAnimationFrame(()=>this.update_screen())};this.update_screen=function(){Mb||(0===u?this.update_text():1===u?this.update_graphical():this.update_graphical_text());this.timer()};this.update_text=function(){for(var A=0;A<G;A++)C[A]&&(this.text_update_row(A),C[A]=0)};this.update_graphical=function(){this.screen_fill_buffer()};
21
+ this.update_graphical_text=function(){if(L){var A=performance.now();if(266<A-ac){tb=!tb;vb&&(C[q]=1);var x=4*w;for(let la=0,ja=0;la<G;++la)if(C[la])ja+=x;else for(var H=0;H<w;++H,ja+=4)if(B[ja+1]&1){C[la]=1;ja+=x-4*H;break}ac=A}A=Xa.canvas;x=qa.canvas;H=4*w;const T=w*pa,S=U;let V=0;for(let la=0,ja=0,aa=0;la<G;++la,ja+=U){if(!C[la]){aa+=H;continue}++V;qa.clearRect(0,S,T,U);let ta,Ha,Oa,Pa;for(let ya=0;ya<T;ya+=pa,aa+=4){const bc=B[aa+0];var M=B[aa+1];const cc=B[aa+2],dc=B[aa+3],ec=M&2?Jb:Ib;M=(!(M&
22
+ 1)||tb)&&$b[(ec<<8)+bc];Oa!==cc&&(void 0!==Oa&&(L.fillStyle=c(Oa),L.fillRect(Pa,ja,ya-Pa,U)),Oa=cc,Pa=ya);ta!==dc&&(void 0!==ta&&(qa.fillStyle=c(ta),qa.fillRect(Ha,0,ya-Ha,U)),ta=dc,Ha=ya);M&&qa.drawImage(A,bc*pa,ec*U,pa,U,ya,S,pa,U)}qa.fillStyle=c(ta);qa.fillRect(Ha,0,T-Ha,U);qa.globalCompositeOperation="destination-in";qa.drawImage(x,0,S,T,U,0,0,T,U);qa.globalCompositeOperation="source-over";L.fillStyle=c(Oa);L.fillRect(Pa,ja,T-Pa,U);L.drawImage(x,0,0,T,U,0,ja,T,U)}V&&(tb&&vb&&C[q]&&(L.fillStyle=
23
+ c(B[4*(q*w+r)+3]),L.fillRect(r*pa,q*U+ub,pa,Kb-ub+1)),C.fill(0));V&&l.drawImage(L.canvas,0,0)}};this.destroy=function(){wb&&(cancelAnimationFrame(wb),wb=0)};this.pause=function(){Mb=!0;p.classList.remove("blinking-cursor")};this.continue=function(){Mb=!1;p.classList.add("blinking-cursor")};this.set_mode=function(A){u=A?1:a.use_graphical_text?2:0;0===u?(n.style.display="block",h.style.display="none"):(n.style.display="none",h.style.display="block",2===u&&C&&C.fill(1))};this.set_font_bitmap=function(A,
24
+ x,H,M,T,S){const V=H?16:x?9:8;if(U!==A||pa!==V||Gb!==x||Fb!==H||Hb!==M||S)S=pa!==V||U!==A,U=A,pa=V,Gb=x,Fb=H,Hb=M,2===u&&(d(T),C.fill(1),S&&this.set_size_graphical_text())};this.set_font_page=function(A,x){if(Ib!==A||Jb!==x)Ib=A,Jb=x,C.fill(1)};this.clear_screen=function(){l.fillStyle="#000";l.fillRect(0,0,h.width,h.height)};this.set_size_graphical_text=function(){if(Xa){var A=pa*w,x=U*G,H=2*U;L&&L.canvas.width===A&&L.canvas.height===x&&qa.canvas.height===H||(L?(L.canvas.width=A,L.canvas.height=x,
25
+ qa.canvas.width=A,qa.canvas.height=H):(L=(new OffscreenCanvas(A,x)).getContext("2d",{alpha:!1}),qa=(new OffscreenCanvas(A,H)).getContext("2d")),this.set_size_graphical(A,x,A,x),C.fill(1))}};this.set_size_text=function(A,x){if(A!==w||x!==G)if(C=new Int8Array(x),B=new Int32Array(A*x*4),w=A,G=x,0===u){for(;n.childNodes.length>x;)n.removeChild(n.firstChild);for(;n.childNodes.length<x;)n.appendChild(document.createElement("div"));for(A=0;A<x;A++)this.text_update_row(A);e(n,t,v,!0)}else 2===u&&this.set_size_graphical_text()};
26
+ this.set_size_graphical=function(A,x){h.style.display="block";h.width=A;h.height=x;l.imageSmoothingEnabled=!1;y=640>=A&&2*A<window.innerWidth*window.devicePixelRatio&&2*x<window.innerHeight*window.devicePixelRatio?2:1;e(h,t*y,v*y,!1)};this.set_charmap=function(A){kb=A||Lb};this.set_scale=function(A,x){t=A;v=x;e(n,t,v,!0);e(h,t*y,v*y,!1)};this.update_cursor_scanline=function(A,x,H){if(A!==ub||x!==Kb||H!==vb)0===u?H?(p.style.display="inline",p.style.height=x-A+"px",p.style.marginTop=A+"px"):p.style.display=
27
+ "none":2===u&&q<G&&(C[q]=1),ub=A,Kb=x,vb=H};this.update_cursor=function(A,x){if(A!==q||x!==r)A<G&&(C[A]=1),q<G&&(C[q]=1),q=A,r=x};this.text_update_row=function(A){var x=4*A*w,H;var M=n.childNodes[A];var T=document.createElement("div");for(var S=0;S<w;){var V=document.createElement("span");var la=B[x+1]&1;var ja=B[x+2];var aa=B[x+3];la&&V.classList.add("blink");V.style.backgroundColor=c(ja);V.style.color=c(aa);for(H="";S<w&&(B[x+1]&1)===la&&B[x+2]===ja&&B[x+3]===aa;){var ta=B[x+0];H+=kb[ta];m(kb[ta]);
28
+ S++;x+=4;if(A===q)if(S===r)break;else if(S===r+1){p.style.backgroundColor=V.style.color;T.appendChild(p);break}}V.textContent=H;T.appendChild(V)}M.parentNode.replaceChild(T,M)};this.update_buffer=function(A){for(const x of A)l.putImageData(x.image_data,x.screen_x-x.buffer_x,x.screen_y-x.buffer_y,x.buffer_x,x.buffer_y,x.buffer_width,x.buffer_height)};this.get_text_screen=function(){for(var A=[],x=0;x<G;x++)A.push(this.get_text_row(x));return A};this.get_text_row=function(A){let x="";for(let H=0;H<
29
+ w;H++)x+=kb[B[4*(A*w+H)]];return x};this.init()}function Aa(a){m(a instanceof ArrayBuffer);this.buffer=a;this.byteLength=a.byteLength;this.onprogress=this.onload=void 0}Aa.prototype.load=function(){this.onload&&this.onload({buffer:this.buffer})};Aa.prototype.get=function(a,b,c){m(a+b<=this.byteLength);c(new Uint8Array(this.buffer,a,b))};Aa.prototype.set=function(a,b,c){m(a+b.byteLength<=this.byteLength);(new Uint8Array(this.buffer,a,b.byteLength)).set(b);c()};Aa.prototype.get_buffer=function(a){a(this.buffer)};
30
+ Aa.prototype.get_state=function(){const a=[];a[0]=this.byteLength;a[1]=new Uint8Array(this.buffer);return a};Aa.prototype.set_state=function(a){this.byteLength=a[0];this.buffer=a[1].slice().buffer};function Ba(a,b,c){this.filename=a;this.byteLength=b;this.block_cache=new Map;this.block_cache_is_write=new Set;this.fixed_chunk_size=c;this.cache_reads=!!c;this.onprogress=this.onload=void 0}Ba.prototype.load=function(){void 0!==this.byteLength?this.onload&&this.onload(Object.create(null)):Ca(this.filename,
31
+ (a,b)=>{if(a)throw Error("Cannot use: "+this.filename+". "+a);m(0<=b);this.byteLength=b;this.onload&&this.onload(Object.create(null))})};Ba.prototype.get_from_cache=function(a,b){var c=b/256;a/=256;for(var d=0;d<c;d++)if(!this.block_cache.get(a+d))return;if(1===c)return this.block_cache.get(a);b=new Uint8Array(b);for(d=0;d<c;d++)b.set(this.block_cache.get(a+d),256*d);return b};Ba.prototype.get=function(a,b,c){m(a+b<=this.byteLength);m(0===a%256);m(0===b%256);m(b);var d=this.get_from_cache(a,b);if(d)c(d);
32
+ else{var e=a,f=b;this.fixed_chunk_size&&(e=a-a%this.fixed_chunk_size,f=Math.ceil((a-e+b)/this.fixed_chunk_size)*this.fixed_chunk_size);va(this.filename,{done:function(h){h=new Uint8Array(h);this.handle_read(e,f,h);e===a&&f===b?c(h):c(h.subarray(a-e,a-e+b))}.bind(this),range:{start:e,length:f}})}};Ba.prototype.set=function(a,b,c){var d=b.length;m(a+b.byteLength<=this.byteLength);m(0===a%256);m(0===d%256);m(d);a/=256;d/=256;for(var e=0;e<d;e++){var f=this.block_cache.get(a+e);if(void 0===f)f=b.slice(256*
33
+ e,256*(e+1)),this.block_cache.set(a+e,f);else{const h=b.subarray(256*e,256*(e+1));m(f.byteLength===h.length);f.set(h)}this.block_cache_is_write.add(a+e)}c()};Ba.prototype.handle_read=function(a,b,c){a/=256;b/=256;for(var d=0;d<b;d++){const e=this.block_cache.get(a+d);e?c.set(e,256*d):this.cache_reads&&this.block_cache.set(a+d,c.slice(256*d,256*(d+1)))}};Ba.prototype.get_buffer=function(a){a()};Ba.prototype.get_state=function(){const a=[],b=[];for(const [c,d]of this.block_cache)m(isFinite(c)),this.block_cache_is_write.has(c)&&
34
+ b.push([c,d]);a[0]=b;return a};Ba.prototype.set_state=function(a){a=a[0];this.block_cache.clear();this.block_cache_is_write.clear();for(const [b,c]of a)m(isFinite(b)),this.block_cache.set(b,c),this.block_cache_is_write.add(b)};function Da(a,b,c,d,e){const f=a.match(/\.[^\.]+(\.zst)?$/);this.extension=f?f[0]:"";this.basename=a.substring(0,a.length-this.extension.length);this.is_zstd=this.extension.endsWith(".zst");this.basename.endsWith("/")||(this.basename+="-");this.block_cache=new Map;this.block_cache_is_write=
35
+ new Set;this.byteLength=b;this.fixed_chunk_size=c;this.partfile_alt_format=!!d;this.zstd_decompress=e;this.cache_reads=!!c;this.onprogress=this.onload=void 0}Da.prototype.load=function(){void 0===this.byteLength&&m(!1);this.onload&&this.onload(Object.create(null))};Da.prototype.get=function(a,b,c){m(a+b<=this.byteLength);m(0===a%256);m(0===b%256);m(b);var d=this.get_from_cache(a,b);if(d)c(d);else if(this.fixed_chunk_size){const f=Math.floor(a/this.fixed_chunk_size),h=a-f*this.fixed_chunk_size;m(0<=
36
+ h);const l=Math.ceil((h+b)/this.fixed_chunk_size),n=new Uint8Array(l*this.fixed_chunk_size);let p=0;for(let q=0;q<l;q++){var e=(f+q)*this.fixed_chunk_size;d=this.partfile_alt_format?this.basename+(f+q+"").padStart(8,"0")+this.extension:this.basename+e+"-"+(e+this.fixed_chunk_size)+this.extension;(e=this.get_from_cache(e,this.fixed_chunk_size))?(n.set(e,q*this.fixed_chunk_size),p++,p===l&&c(n.subarray(h,h+b))):va(d,{done:async function(r){r=new Uint8Array(r);this.is_zstd&&(r=await this.zstd_decompress(this.fixed_chunk_size,
37
+ r),r=new Uint8Array(r));n.set(r,q*this.fixed_chunk_size);this.handle_read((f+q)*this.fixed_chunk_size,this.fixed_chunk_size|0,r);p++;p===l&&c(n.subarray(h,h+b))}.bind(this)})}}else va(this.basename+a+"-"+(a+b)+this.extension,{done:function(f){m(f.byteLength===b);f=new Uint8Array(f);this.handle_read(a,b,f);c(f)}.bind(this)})};Da.prototype.get_from_cache=Ba.prototype.get_from_cache;Da.prototype.set=Ba.prototype.set;Da.prototype.handle_read=Ba.prototype.handle_read;Da.prototype.get_state=Ba.prototype.get_state;
38
+ Da.prototype.set_state=Ba.prototype.set_state;function Ea(a){this.file=a;this.byteLength=a.size;1073741824<a.size&&console.warn("SyncFileBuffer: Allocating buffer of "+(a.size>>20)+" MB ...");this.buffer=new ArrayBuffer(a.size);this.onprogress=this.onload=void 0}Ea.prototype.load=function(){this.load_next(0)};Ea.prototype.load_next=function(a){var b=new FileReader;b.onload=function(d){d=new Uint8Array(d.target.result);(new Uint8Array(this.buffer,a)).set(d);this.load_next(a+4194304)}.bind(this);if(this.onprogress)this.onprogress({loaded:a,
39
+ total:this.byteLength,lengthComputable:!0});if(a<this.byteLength){var c=this.file.slice(a,Math.min(a+4194304,this.byteLength));b.readAsArrayBuffer(c)}else this.file=void 0,this.onload&&this.onload({buffer:this.buffer})};Ea.prototype.get=Aa.prototype.get;Ea.prototype.set=Aa.prototype.set;Ea.prototype.get_buffer=Aa.prototype.get_buffer;Ea.prototype.get_state=Aa.prototype.get_state;Ea.prototype.set_state=Aa.prototype.set_state;function Fa(a){this.file=a;this.byteLength=a.size;this.block_cache=new Map;
40
+ this.block_cache_is_write=new Set;this.onprogress=this.onload=void 0}Fa.prototype.load=function(){this.onload&&this.onload(Object.create(null))};Fa.prototype.get=function(a,b,c){m(0===a%256);m(0===b%256);m(b);var d=this.get_from_cache(a,b);d?c(d):(d=new FileReader,d.onload=function(e){e=new Uint8Array(e.target.result);this.handle_read(a,b,e);c(e)}.bind(this),d.readAsArrayBuffer(this.file.slice(a,a+b)))};Fa.prototype.get_from_cache=Ba.prototype.get_from_cache;Fa.prototype.set=Ba.prototype.set;Fa.prototype.handle_read=
41
+ Ba.prototype.handle_read;Fa.prototype.get_state=Ba.prototype.get_state;Fa.prototype.set_state=Ba.prototype.set_state;Fa.prototype.get_buffer=function(a){a()};Fa.prototype.get_as_file=function(a){for(var b=[],c=Array.from(this.block_cache.keys()).sort(function(l,n){return l-n}),d=0,e=0;e<c.length;e++){var f=c[e],h=this.block_cache.get(f);f*=256;m(f>=d);f!==d&&(b.push(this.file.slice(d,f)),d=f);b.push(h);d+=h.length}d!==this.file.size&&b.push(this.file.slice(d));a=new File(b,a);m(a.size===this.file.size);
42
+ return a};var Ca;Ca="undefined"===typeof XMLHttpRequest?function(a,b){import("node:fs").then(c=>c.stat(a,(d,e)=>{d?b(d):b(null,e.size)}))}:function(a,b){va(a,{done:(c,d)=>{c=d.getResponseHeader("Content-Range")||"";(d=c.match(/\/(\d+)\s*$/))?b(null,+d[1]):b("`Range: bytes=...` header not supported (Got `"+c+"`)")},headers:{Range:"bytes=0-0","X-Accept-Encoding":"identity"}})};function Ga(a,b){if(a.buffer instanceof ArrayBuffer)return new Aa(a.buffer);if("undefined"!==typeof File&&a.buffer instanceof
43
+ File)return b=a.async,void 0===b&&(b=268435456<=a.buffer.size),b?new Fa(a.buffer):new Ea(a.buffer);if(a.url)return a.use_parts?new Da(a.url,a.size,a.fixed_chunk_size,!1,b):new Ba(a.url,a.size,a.fixed_chunk_size);D("Ignored file: url="+a.url+" buffer="+a.buffer)}function E(a){this.cpu=a;this.channel_page=new Uint8Array(8);this.channel_pagehi=new Uint8Array(8);this.channel_addr=new Uint16Array(8);this.channel_addr_init=new Uint16Array(8);this.channel_count=new Uint16Array(8);this.channel_count_init=
44
+ new Uint16Array(8);this.channel_mask=new Uint8Array(8);this.channel_mode=new Uint8Array(8);this.unmask_listeners=[];this.lsb_msb_flipflop=0;a=a.io;a.register_write(0,this,this.port_addr_write.bind(this,0));a.register_write(2,this,this.port_addr_write.bind(this,1));a.register_write(4,this,this.port_addr_write.bind(this,2));a.register_write(6,this,this.port_addr_write.bind(this,3));a.register_write(1,this,this.port_count_write.bind(this,0));a.register_write(3,this,this.port_count_write.bind(this,1));
45
+ a.register_write(5,this,this.port_count_write.bind(this,2));a.register_write(7,this,this.port_count_write.bind(this,3));a.register_read(0,this,this.port_addr_read.bind(this,0));a.register_read(2,this,this.port_addr_read.bind(this,1));a.register_read(4,this,this.port_addr_read.bind(this,2));a.register_read(6,this,this.port_addr_read.bind(this,3));a.register_read(1,this,this.port_count_read.bind(this,0));a.register_read(3,this,this.port_count_read.bind(this,1));a.register_read(5,this,this.port_count_read.bind(this,
46
+ 2));a.register_read(7,this,this.port_count_read.bind(this,3));a.register_write(192,this,this.port_addr_write.bind(this,4));a.register_write(196,this,this.port_addr_write.bind(this,5));a.register_write(200,this,this.port_addr_write.bind(this,6));a.register_write(204,this,this.port_addr_write.bind(this,7));a.register_write(194,this,this.port_count_write.bind(this,4));a.register_write(198,this,this.port_count_write.bind(this,5));a.register_write(202,this,this.port_count_write.bind(this,6));a.register_write(206,
47
+ this,this.port_count_write.bind(this,7));a.register_read(192,this,this.port_addr_read.bind(this,4));a.register_read(196,this,this.port_addr_read.bind(this,5));a.register_read(200,this,this.port_addr_read.bind(this,6));a.register_read(204,this,this.port_addr_read.bind(this,7));a.register_read(194,this,this.port_count_read.bind(this,4));a.register_read(198,this,this.port_count_read.bind(this,5));a.register_read(202,this,this.port_count_read.bind(this,6));a.register_read(206,this,this.port_count_read.bind(this,
48
+ 7));a.register_write(135,this,this.port_page_write.bind(this,0));a.register_write(131,this,this.port_page_write.bind(this,1));a.register_write(129,this,this.port_page_write.bind(this,2));a.register_write(130,this,this.port_page_write.bind(this,3));a.register_write(143,this,this.port_page_write.bind(this,4));a.register_write(139,this,this.port_page_write.bind(this,5));a.register_write(137,this,this.port_page_write.bind(this,6));a.register_write(138,this,this.port_page_write.bind(this,7));a.register_read(135,
49
+ this,this.port_page_read.bind(this,0));a.register_read(131,this,this.port_page_read.bind(this,1));a.register_read(129,this,this.port_page_read.bind(this,2));a.register_read(130,this,this.port_page_read.bind(this,3));a.register_read(143,this,this.port_page_read.bind(this,4));a.register_read(139,this,this.port_page_read.bind(this,5));a.register_read(137,this,this.port_page_read.bind(this,6));a.register_read(138,this,this.port_page_read.bind(this,7));a.register_write(1159,this,this.port_pagehi_write.bind(this,
50
+ 0));a.register_write(1155,this,this.port_pagehi_write.bind(this,1));a.register_write(1153,this,this.port_pagehi_write.bind(this,2));a.register_write(1154,this,this.port_pagehi_write.bind(this,3));a.register_write(1163,this,this.port_pagehi_write.bind(this,5));a.register_write(1161,this,this.port_pagehi_write.bind(this,6));a.register_write(1162,this,this.port_pagehi_write.bind(this,7));a.register_read(1159,this,this.port_pagehi_read.bind(this,0));a.register_read(1155,this,this.port_pagehi_read.bind(this,
51
+ 1));a.register_read(1153,this,this.port_pagehi_read.bind(this,2));a.register_read(1154,this,this.port_pagehi_read.bind(this,3));a.register_read(1163,this,this.port_pagehi_read.bind(this,5));a.register_read(1161,this,this.port_pagehi_read.bind(this,6));a.register_read(1162,this,this.port_pagehi_read.bind(this,7));a.register_write(10,this,this.port_singlemask_write.bind(this,0));a.register_write(212,this,this.port_singlemask_write.bind(this,4));a.register_write(15,this,this.port_multimask_write.bind(this,
52
+ 0));a.register_write(222,this,this.port_multimask_write.bind(this,4));a.register_read(15,this,this.port_multimask_read.bind(this,0));a.register_read(222,this,this.port_multimask_read.bind(this,4));a.register_write(11,this,this.port_mode_write.bind(this,0));a.register_write(214,this,this.port_mode_write.bind(this,4));a.register_write(12,this,this.portC_write);a.register_write(216,this,this.portC_write)}E.prototype.get_state=function(){return[this.channel_page,this.channel_pagehi,this.channel_addr,
53
+ this.channel_addr_init,this.channel_count,this.channel_count_init,this.channel_mask,this.channel_mode,this.lsb_msb_flipflop]};E.prototype.set_state=function(a){this.channel_page=a[0];this.channel_pagehi=a[1];this.channel_addr=a[2];this.channel_addr_init=a[3];this.channel_count=a[4];this.channel_count_init=a[5];this.channel_mask=a[6];this.channel_mode=a[7];this.lsb_msb_flipflop=a[8]};E.prototype.port_count_write=function(a,b){D("count write ["+a+"] = "+z(b),16);this.channel_count[a]=this.flipflop_get(this.channel_count[a],
54
+ b,!1);this.channel_count_init[a]=this.flipflop_get(this.channel_count_init[a],b,!0)};E.prototype.port_count_read=function(a){D("count read ["+a+"] -> "+z(this.channel_count[a]),16);return this.flipflop_read(this.channel_count[a])};E.prototype.port_addr_write=function(a,b){D("addr write ["+a+"] = "+z(b),16);this.channel_addr[a]=this.flipflop_get(this.channel_addr[a],b,!1);this.channel_addr_init[a]=this.flipflop_get(this.channel_addr_init[a],b,!0)};E.prototype.port_addr_read=function(a){D("addr read ["+
55
+ a+"] -> "+z(this.channel_addr[a]),16);return this.flipflop_read(this.channel_addr[a])};E.prototype.port_pagehi_write=function(a,b){D("pagehi write ["+a+"] = "+z(b),16);this.channel_pagehi[a]=b};E.prototype.port_pagehi_read=function(a){D("pagehi read ["+a+"]",16);return this.channel_pagehi[a]};E.prototype.port_page_write=function(a,b){D("page write ["+a+"] = "+z(b),16);this.channel_page[a]=b};E.prototype.port_page_read=function(a){D("page read ["+a+"]",16);return this.channel_page[a]};E.prototype.port_singlemask_write=
56
+ function(a,b){a=(b&3)+a;b=b&4?1:0;D("singlechannel mask write ["+a+"] = "+b,16);this.update_mask(a,b)};E.prototype.port_multimask_write=function(a,b){D("multichannel mask write: "+z(b),16);for(var c=0;4>c;c++)this.update_mask(a+c,b&1<<c)};E.prototype.port_multimask_read=function(a){var b=0|this.channel_mask[a+0];b|=this.channel_mask[a+1]<<1;b|=this.channel_mask[a+2]<<2;b|=this.channel_mask[a+3]<<3;D("multichannel mask read: "+z(b),16);return b};E.prototype.port_mode_write=function(a,b){a=(b&3)+a;
57
+ D("mode write ["+a+"] = "+z(b),16);this.channel_mode[a]=b};E.prototype.portC_write=function(){D("flipflop reset",16);this.lsb_msb_flipflop=0};E.prototype.on_unmask=function(a,b){this.unmask_listeners.push({fn:a,this_value:b})};E.prototype.update_mask=function(a,b){if(this.channel_mask[a]!==b&&(this.channel_mask[a]=b,!b))for(D("firing on_unmask("+a+")",16),b=0;b<this.unmask_listeners.length;b++)this.unmask_listeners[b].fn.call(this.unmask_listeners[b].this_value,a)};E.prototype.do_read=function(a,
58
+ b,c,d,e){var f=this.count_get_8bit(d),h=this.address_get_8bit(d);D("DMA write channel "+d,16);D("to "+z(h)+" len "+z(f),16);c<f&&D("DMA should read more than provided: "+z(c)+" "+z(f),16);if(b+f>a.byteLength)D("DMA read outside of buffer",16),e(!0);else{var l=this.cpu;this.channel_addr[d]+=f;a.get(b,f,function(n){l.write_blob(n,h);e(!1)})}};E.prototype.do_write=function(a,b,c,d,e){var f=this.channel_count[d]+1&65535,h=5<=d?2:1,l=f*h,n=this.address_get_8bit(d),p=!1,q=!1,r=this.channel_mode[d]&16;D("DMA write channel "+
59
+ d,16);D("to "+z(n)+" len "+z(l),16);c<l?(D("DMA should read more than provided",16),f=Math.floor(c/h),l=f*h,p=!0):c>l&&(D("DMA attempted to read more than provided",16),q=!0);b+l>a.byteLength?(D("DMA write outside of buffer",16),e(!0)):(this.channel_addr[d]+=f,this.channel_count[d]-=f,!p&&r&&(D("DMA autoinit",16),this.channel_addr[d]=this.channel_addr_init[d],this.channel_count[d]=this.channel_count_init[d]),a.set(b,this.cpu.mem8.subarray(n,n+l),()=>{q&&r?(D("DMA continuing from start",16),this.do_write(a,
60
+ b+l,c-l,d,e)):e(!1)}))};E.prototype.address_get_8bit=function(a){var b=this.channel_addr[a];5<=a&&(b<<=1);b=b&65535|this.channel_page[a]<<16;return b|=this.channel_pagehi[a]<<24};E.prototype.count_get_8bit=function(a){var b=this.channel_count[a]+1;5<=a&&(b*=2);return b};E.prototype.flipflop_get=function(a,b,c){c||(this.lsb_msb_flipflop^=1);return this.lsb_msb_flipflop?a&-256|b:a&-65281|b<<8};E.prototype.flipflop_read=function(a){return(this.lsb_msb_flipflop^=1)?a&255:a>>8&255};function Ia(a){this.ports=
61
+ [];this.cpu=a;for(var b=0;65536>b;b++)this.ports[b]=this.create_empty_entry();var c=a.memory_size[0];for(b=0;b<<17<c;b++)a.memory_map_read8[b]=a.memory_map_write8[b]=void 0,a.memory_map_read32[b]=a.memory_map_write32[b]=void 0;this.mmap_register(c,4294967296-c,function(d){D("Read from unmapped memory space, addr="+z(d>>>0,8),32);return 255},function(d,e){D("Write to unmapped memory space, addr="+z(d>>>0,8)+" value="+z(e,2),32)},function(d){D("Read from unmapped memory space, addr="+z(d>>>0,8),32);
62
+ return-1},function(d,e){D("Write to unmapped memory space, addr="+z(d>>>0,8)+" value="+z(e>>>0,8),32)})}Ia.prototype.create_empty_entry=function(){return{read8:this.empty_port_read8,read16:this.empty_port_read16,read32:this.empty_port_read32,write8:this.empty_port_write,write16:this.empty_port_write,write32:this.empty_port_write,device:void 0}};Ia.prototype.empty_port_read8=function(){return 255};Ia.prototype.empty_port_read16=function(){return 65535};Ia.prototype.empty_port_read32=function(){return-1};
63
+ Ia.prototype.empty_port_write=function(){};Ia.prototype.register_read=function(a,b,c,d,e){function f(h){m(!1,"Overlapped read"+h+" "+z(a,4)+" ("+b.name+")");return-1>>>32-h|0}m("number"===typeof a);m("object"===typeof b);m(!c||"function"===typeof c);m(!d||"function"===typeof d);m(!e||"function"===typeof e);m(c||d||e);c||(c=f.bind(this,8));d||(d=f.bind(this,16));e||(e=f.bind(this,32));c&&(this.ports[a].read8=c);d&&(this.ports[a].read16=d);e&&(this.ports[a].read32=e);this.ports[a].device=b};Ia.prototype.register_write=
64
+ function(a,b,c,d,e){function f(h){m(!1,"Overlapped write"+h+" "+z(a)+" ("+b.name+")")}m("number"===typeof a);m("object"===typeof b);m(!c||"function"===typeof c);m(!d||"function"===typeof d);m(!e||"function"===typeof e);m(c||d||e);c||(c=f.bind(this,8));d||(d=f.bind(this,16));e||(e=f.bind(this,32));c&&(this.ports[a].write8=c);d&&(this.ports[a].write16=d);e&&(this.ports[a].write32=e);this.ports[a].device=b};Ia.prototype.register_read_consecutive=function(a,b,c,d,e,f){function h(){return c.call(this)|
65
+ d.call(this)<<8}function l(){return e.call(this)|f.call(this)<<8}function n(){return c.call(this)|d.call(this)<<8|e.call(this)<<16|f.call(this)<<24}m(4===arguments.length||6===arguments.length);e&&f?(this.register_read(a,b,c,h,n),this.register_read(a+1,b,d),this.register_read(a+2,b,e,l),this.register_read(a+3,b,f)):(this.register_read(a,b,c,h),this.register_read(a+1,b,d))};Ia.prototype.register_write_consecutive=function(a,b,c,d,e,f){function h(p){c.call(this,p&255);d.call(this,p>>8&255)}function l(p){e.call(this,
66
+ p&255);f.call(this,p>>8&255)}function n(p){c.call(this,p&255);d.call(this,p>>8&255);e.call(this,p>>16&255);f.call(this,p>>>24)}m(4===arguments.length||6===arguments.length);e&&f?(this.register_write(a,b,c,h,n),this.register_write(a+1,b,d),this.register_write(a+2,b,e,l),this.register_write(a+3,b,f)):(this.register_write(a,b,c,h),this.register_write(a+1,b,d))};Ia.prototype.mmap_read32_shim=function(a){var b=this.cpu.memory_map_read8[a>>>17];return b(a)|b(a+1)<<8|b(a+2)<<16|b(a+3)<<24};Ia.prototype.mmap_write32_shim=
67
+ function(a,b){var c=this.cpu.memory_map_write8[a>>>17];c(a,b&255);c(a+1,b>>8&255);c(a+2,b>>16&255);c(a+3,b>>>24)};Ia.prototype.mmap_register=function(a,b,c,d,e,f){D("mmap_register addr="+z(a>>>0,8)+" size="+z(b,8),32);m(0===(a&131071));m(b&&0===(b&131071));e||(e=this.mmap_read32_shim.bind(this));f||(f=this.mmap_write32_shim.bind(this));for(a>>>=17;0<b;a++)this.cpu.memory_map_read8[a]=c,this.cpu.memory_map_write8[a]=d,this.cpu.memory_map_read32[a]=e,this.cpu.memory_map_write32[a]=f,b-=131072};Ia.prototype.port_write8=
68
+ function(a,b){var c=this.ports[a];c.write8===this.empty_port_write&&D("write8 port #"+z(a,4)+" <- "+z(b,2)+this.get_port_description(a),32);return c.write8.call(c.device,b)};Ia.prototype.port_write16=function(a,b){var c=this.ports[a];c.write16===this.empty_port_write&&D("write16 port #"+z(a,4)+" <- "+z(b,4)+this.get_port_description(a),32);return c.write16.call(c.device,b)};Ia.prototype.port_write32=function(a,b){var c=this.ports[a];c.write32===this.empty_port_write&&D("write32 port #"+z(a,4)+" <- "+
69
+ z(b>>>0,8)+this.get_port_description(a),32);return c.write32.call(c.device,b)};Ia.prototype.port_read8=function(a){var b=this.ports[a];b.read8===this.empty_port_read8&&D("read8 port #"+z(a,4)+this.get_port_description(a),32);b=b.read8.call(b.device,a);m("number"===typeof b);m(256>b&&0<=b,"8 bit port returned large value: "+z(a));return b};Ia.prototype.port_read16=function(a){var b=this.ports[a];b.read16===this.empty_port_read16&&D("read16 port #"+z(a,4)+this.get_port_description(a),32);b=b.read16.call(b.device,
70
+ a);m("number"===typeof b);m(65536>b&&0<=b,"16 bit port returned large value: "+z(a));return b};Ia.prototype.port_read32=function(a){var b=this.ports[a];b.read32===this.empty_port_read32&&D("read32 port #"+z(a,4)+this.get_port_description(a),32);a=b.read32.call(b.device,a);m((a|0)===a);return a};var Ja={4:"PORT_DMA_ADDR_2",5:"PORT_DMA_CNT_2",10:"PORT_DMA1_MASK_REG",11:"PORT_DMA1_MODE_REG",12:"PORT_DMA1_CLEAR_FF_REG",13:"PORT_DMA1_MASTER_CLEAR",32:"PORT_PIC1_CMD",33:"PORT_PIC1_DATA",64:"PORT_PIT_COUNTER0",
71
+ 65:"PORT_PIT_COUNTER1",66:"PORT_PIT_COUNTER2",67:"PORT_PIT_MODE",96:"PORT_PS2_DATA",97:"PORT_PS2_CTRLB",100:"PORT_PS2_STATUS",112:"PORT_CMOS_INDEX",113:"PORT_CMOS_DATA",128:"PORT_DIAG",129:"PORT_DMA_PAGE_2",146:"PORT_A20",160:"PORT_PIC2_CMD",161:"PORT_PIC2_DATA",178:"PORT_SMI_CMD",179:"PORT_SMI_STATUS",212:"PORT_DMA2_MASK_REG",214:"PORT_DMA2_MODE_REG",218:"PORT_DMA2_MASTER_CLEAR",240:"PORT_MATH_CLEAR",368:"PORT_ATA2_CMD_BASE",496:"PORT_ATA1_CMD_BASE",632:"PORT_LPT2",744:"PORT_SERIAL4",760:"PORT_SERIAL2",
72
+ 884:"PORT_ATA2_CTRL_BASE",888:"PORT_LPT1",1E3:"PORT_SERIAL3",1008:"PORT_FD_BASE",1010:"PORT_FD_DOR",1012:"PORT_FD_STATUS",1013:"PORT_FD_DATA",1014:"PORT_HD_DATA",1015:"PORT_FD_DIR",1016:"PORT_SERIAL1",3320:"PORT_PCI_CMD",3321:"PORT_PCI_REBOOT",3324:"PORT_PCI_DATA",1026:"PORT_BIOS_DEBUG",1296:"PORT_QEMU_CFG_CTL",1297:"PORT_QEMU_CFG_DATA",45056:"PORT_ACPI_PM_BASE",45312:"PORT_SMB_BASE",35072:"PORT_BIOS_APM"};Ia.prototype.get_port_description=function(a){return Ja[a]?" ("+Ja[a]+")":""};var Ka={};function La(){this.listeners=
73
+ {};this.pair=void 0}La.prototype.register=function(a,b,c){var d=this.listeners[a];void 0===d&&(d=this.listeners[a]=[]);d.push({fn:b,this_value:c})};La.prototype.unregister=function(a,b){var c=this.listeners[a];void 0!==c&&(this.listeners[a]=c.filter(function(d){return d.fn!==b}))};La.prototype.send=function(a,b){if(this.pair&&(a=this.pair.listeners[a],void 0!==a))for(var c=0;c<a.length;c++){var d=a[c];d.fn.call(d.this_value,b)}};La.prototype.send_async=function(a,b){m(1===arguments.length||2===arguments.length);
74
+ setTimeout(this.send.bind(this,a,b),0)};Ka.create=function(){var a=new La,b=new La;a.pair=b;b.pair=a;return[a,b]};var Ma=new Uint8Array(256),Na=[],Qa=[],Ra=[],Sa=new Uint8Array(256),Ta=[];function F(a,b){this.cpu=a;this.bus=b;this.write_buffer=new oa(64);this.read_buffer=new oa(64);this.mixer_current_address=this.command_size=this.command=this.read_buffer_lastvalue=0;this.mixer_registers=new Uint8Array(256);this.mixer_reset();this.dummy_speaker_enabled=!1;this.test_register=0;this.dsp_signed=this.dsp_16bit=
75
+ this.dsp_stereo=this.dsp_highspeed=!1;this.dac_buffers=[new ra(65536),new ra(65536)];this.dma=a.devices.dma;this.dma_channel=this.dma_irq=this.dma_bytes_block=this.dma_bytes_left=this.dma_bytes_count=this.dma_sample_count=0;this.dma_channel_8bit=1;this.dma_channel_16bit=5;this.dma_autoinit=!1;this.dma_buffer=new ArrayBuffer(65536);this.dma_buffer_int8=new Int8Array(this.dma_buffer);this.dma_buffer_uint8=new Uint8Array(this.dma_buffer);this.dma_buffer_int16=new Int16Array(this.dma_buffer);this.dma_buffer_uint16=
76
+ new Uint16Array(this.dma_buffer);this.dma_syncbuffer=new Aa(this.dma_buffer);this.dma_paused=this.dma_waiting_transfer=!1;this.sampling_rate=22050;b.send("dac-tell-sampling-rate",this.sampling_rate);this.bytes_per_sample=1;this.e2_value=170;this.e2_count=0;this.asp_registers=new Uint8Array(256);this.mpu_read_buffer=new oa(64);this.fm_current_address1=this.fm_current_address0=this.mpu_read_buffer_lastvalue=0;this.fm_waveform_select_enable=!1;this.irq=5;this.irq_triggered=new Uint8Array(16);a.io.register_read_consecutive(544,
77
+ this,this.port2x0_read,this.port2x1_read,this.port2x2_read,this.port2x3_read);a.io.register_read_consecutive(904,this,this.port2x0_read,this.port2x1_read);a.io.register_read_consecutive(548,this,this.port2x4_read,this.port2x5_read);a.io.register_read(550,this,this.port2x6_read);a.io.register_read(551,this,this.port2x7_read);a.io.register_read(552,this,this.port2x8_read);a.io.register_read(553,this,this.port2x9_read);a.io.register_read(554,this,this.port2xA_read);a.io.register_read(555,this,this.port2xB_read);
78
+ a.io.register_read(556,this,this.port2xC_read);a.io.register_read(557,this,this.port2xD_read);a.io.register_read_consecutive(558,this,this.port2xE_read,this.port2xF_read);a.io.register_write_consecutive(544,this,this.port2x0_write,this.port2x1_write,this.port2x2_write,this.port2x3_write);a.io.register_write_consecutive(904,this,this.port2x0_write,this.port2x1_write);a.io.register_write_consecutive(548,this,this.port2x4_write,this.port2x5_write);a.io.register_write(550,this,this.port2x6_write);a.io.register_write(551,
79
+ this,this.port2x7_write);a.io.register_write_consecutive(552,this,this.port2x8_write,this.port2x9_write);a.io.register_write(554,this,this.port2xA_write);a.io.register_write(555,this,this.port2xB_write);a.io.register_write(556,this,this.port2xC_write);a.io.register_write(557,this,this.port2xD_write);a.io.register_write(558,this,this.port2xE_write);a.io.register_write(559,this,this.port2xF_write);a.io.register_read_consecutive(816,this,this.port3x0_read,this.port3x1_read);a.io.register_write_consecutive(816,
80
+ this,this.port3x0_write,this.port3x1_write);this.dma.on_unmask(this.dma_on_unmask,this);b.register("dac-request-data",function(){this.dac_handle_request()},this);b.register("speaker-has-initialized",function(){this.mixer_reset()},this);b.send("speaker-confirm-initialized");this.dsp_reset()}F.prototype.dsp_reset=function(){this.write_buffer.clear();this.read_buffer.clear();this.command_size=this.command=0;this.dummy_speaker_enabled=!1;this.test_register=0;this.dsp_signed=this.dsp_16bit=this.dsp_stereo=
81
+ this.dsp_highspeed=!1;this.dac_buffers[0].clear();this.dac_buffers[1].clear();this.dma_channel=this.dma_irq=this.dma_bytes_block=this.dma_bytes_left=this.dma_bytes_count=this.dma_sample_count=0;this.dma_autoinit=!1;this.dma_buffer_uint8.fill(0);this.dma_paused=this.dma_waiting_transfer=!1;this.e2_value=170;this.e2_count=0;this.sampling_rate=22050;this.bytes_per_sample=1;this.lower_irq(1);this.irq_triggered.fill(0);this.asp_registers.fill(0);this.asp_registers[5]=1;this.asp_registers[9]=248};F.prototype.get_state=
82
+ function(){var a=[];a[2]=this.read_buffer_lastvalue;a[3]=this.command;a[4]=this.command_size;a[5]=this.mixer_current_address;a[6]=this.mixer_registers;a[7]=this.dummy_speaker_enabled;a[8]=this.test_register;a[9]=this.dsp_highspeed;a[10]=this.dsp_stereo;a[11]=this.dsp_16bit;a[12]=this.dsp_signed;a[15]=this.dma_sample_count;a[16]=this.dma_bytes_count;a[17]=this.dma_bytes_left;a[18]=this.dma_bytes_block;a[19]=this.dma_irq;a[20]=this.dma_channel;a[21]=this.dma_channel_8bit;a[22]=this.dma_channel_16bit;
83
+ a[23]=this.dma_autoinit;a[24]=this.dma_buffer_uint8;a[25]=this.dma_waiting_transfer;a[26]=this.dma_paused;a[27]=this.sampling_rate;a[28]=this.bytes_per_sample;a[29]=this.e2_value;a[30]=this.e2_count;a[31]=this.asp_registers;a[33]=this.mpu_read_buffer_last_value;a[34]=this.irq;a[35]=this.irq_triggered;return a};F.prototype.set_state=function(a){this.read_buffer_lastvalue=a[2];this.command=a[3];this.command_size=a[4];this.mixer_current_address=a[5];this.mixer_registers=a[6];this.mixer_full_update();
84
+ this.dummy_speaker_enabled=a[7];this.test_register=a[8];this.dsp_highspeed=a[9];this.dsp_stereo=a[10];this.dsp_16bit=a[11];this.dsp_signed=a[12];this.dma_sample_count=a[15];this.dma_bytes_count=a[16];this.dma_bytes_left=a[17];this.dma_bytes_block=a[18];this.dma_irq=a[19];this.dma_channel=a[20];this.dma_channel_8bit=a[21];this.dma_channel_16bit=a[22];this.dma_autoinit=a[23];this.dma_buffer_uint8=a[24];this.dma_waiting_transfer=a[25];this.dma_paused=a[26];this.sampling_rate=a[27];this.bytes_per_sample=
85
+ a[28];this.e2_value=a[29];this.e2_count=a[30];this.asp_registers=a[31];this.mpu_read_buffer_last_value=a[33];this.irq=a[34];this.irq_triggered=a[35];this.dma_buffer=this.dma_buffer_uint8.buffer;this.dma_buffer_int8=new Int8Array(this.dma_buffer);this.dma_buffer_int16=new Int16Array(this.dma_buffer);this.dma_buffer_uint16=new Uint16Array(this.dma_buffer);this.dma_syncbuffer=new Aa(this.dma_buffer);this.dma_paused?this.bus.send("dac-disable"):this.bus.send("dac-enable")};F.prototype.port2x0_read=function(){D("220 read: fm music status port (unimplemented)",
86
+ 8388608);return 255};F.prototype.port2x1_read=function(){D("221 read: fm music data port (write only)",8388608);return 255};F.prototype.port2x2_read=function(){D("222 read: advanced fm music status port (unimplemented)",8388608);return 255};F.prototype.port2x3_read=function(){D("223 read: advanced music data port (write only)",8388608);return 255};F.prototype.port2x4_read=function(){D("224 read: mixer address port",8388608);return this.mixer_current_address};F.prototype.port2x5_read=function(){D("225 read: mixer data port",
87
+ 8388608);return this.mixer_read(this.mixer_current_address)};F.prototype.port2x6_read=function(){D("226 read: (write only)",8388608);return 255};F.prototype.port2x7_read=function(){D("227 read: undocumented",8388608);return 255};F.prototype.port2x8_read=function(){D("228 read: fm music status port (unimplemented)",8388608);return 255};F.prototype.port2x9_read=function(){D("229 read: fm music data port (write only)",8388608);return 255};F.prototype.port2xA_read=function(){D("22A read: read data",8388608);
88
+ this.read_buffer.length&&(this.read_buffer_lastvalue=this.read_buffer.shift());D(" <- "+this.read_buffer_lastvalue+" "+z(this.read_buffer_lastvalue)+" '"+String.fromCharCode(this.read_buffer_lastvalue)+"'",8388608);return this.read_buffer_lastvalue};F.prototype.port2xB_read=function(){D("22B read: undocumented",8388608);return 255};F.prototype.port2xC_read=function(){D("22C read: write-buffer status",8388608);return 127};F.prototype.port2xD_read=function(){D("22D read: undocumented",8388608);return 255};
89
+ F.prototype.port2xE_read=function(){D("22E read: read-buffer status / irq 8bit ack.",8388608);this.irq_triggered[1]&&this.lower_irq(1);return(this.read_buffer.length&&!this.dsp_highspeed)<<7|127};F.prototype.port2xF_read=function(){D("22F read: irq 16bit ack",8388608);this.lower_irq(2);return 0};F.prototype.port2x0_write=function(a){D("220 write: (unimplemented) fm register 0 address = "+z(a),8388608);this.fm_current_address0=0};F.prototype.port2x1_write=function(a){D("221 write: (unimplemented) fm register 0 data = "+
90
+ z(a),8388608);var b=Ta[this.fm_current_address0];b||(b=this.fm_default_write);b.call(this,a,0,this.fm_current_address0)};F.prototype.port2x2_write=function(a){D("222 write: (unimplemented) fm register 1 address = "+z(a),8388608);this.fm_current_address1=0};F.prototype.port2x3_write=function(a){D("223 write: (unimplemented) fm register 1 data ="+z(a),8388608);var b=Ta[this.fm_current_address1];b||(b=this.fm_default_write);b.call(this,a,1,this.fm_current_address1)};F.prototype.port2x4_write=function(a){D("224 write: mixer address = "+
91
+ z(a),8388608);this.mixer_current_address=a};F.prototype.port2x5_write=function(a){D("225 write: mixer data = "+z(a),8388608);this.mixer_write(this.mixer_current_address,a)};F.prototype.port2x6_write=function(a){D("226 write: reset = "+z(a),8388608);this.dsp_highspeed?(D(" -> exit highspeed",8388608),this.dsp_highspeed=!1):a&&(D(" -> reset",8388608),this.dsp_reset());this.read_buffer.clear();this.read_buffer.push(170)};F.prototype.port2x7_write=function(){D("227 write: undocumented",8388608)};F.prototype.port2x8_write=
92
+ function(){D("228 write: fm music register port (unimplemented)",8388608)};F.prototype.port2x9_write=function(){D("229 write: fm music data port (unimplemented)",8388608)};F.prototype.port2xA_write=function(){D("22A write: dsp read data port (read only)",8388608)};F.prototype.port2xB_write=function(){D("22B write: undocumented",8388608)};F.prototype.port2xC_write=function(a){D("22C write: write command/data",8388608);0===this.command?(D("22C write: command = "+z(a),8388608),this.command=a,this.write_buffer.clear(),
93
+ this.command_size=Ma[a]):(D("22C write: data: "+z(a),8388608),this.write_buffer.push(a));this.write_buffer.length>=this.command_size&&this.command_do()};F.prototype.port2xD_write=function(){D("22D write: undocumented",8388608)};F.prototype.port2xE_write=function(){D("22E write: dsp read buffer status (read only)",8388608)};F.prototype.port2xF_write=function(){D("22F write: undocumented",8388608)};F.prototype.port3x0_read=function(){D("330 read: mpu data",8388608);this.mpu_read_buffer.length&&(this.mpu_read_buffer_lastvalue=
94
+ this.mpu_read_buffer.shift());D(" <- "+z(this.mpu_read_buffer_lastvalue),8388608);return this.mpu_read_buffer_lastvalue};F.prototype.port3x0_write=function(a){D("330 write: mpu data (unimplemented) : "+z(a),8388608)};F.prototype.port3x1_read=function(){D("331 read: mpu status",8388608);return 0|128*!this.mpu_read_buffer.length};F.prototype.port3x1_write=function(a){D("331 write: mpu command: "+z(a),8388608);255===a&&(this.mpu_read_buffer.clear(),this.mpu_read_buffer.push(254))};F.prototype.command_do=
95
+ function(){var a=Na[this.command];a||(a=this.dsp_default_handler);a.call(this);this.command_size=this.command=0;this.write_buffer.clear()};F.prototype.dsp_default_handler=function(){D("Unhandled command: "+z(this.command),8388608)};function I(a,b,c){c||(c=F.prototype.dsp_default_handler);for(var d=0;d<a.length;d++)Ma[a[d]]=b,Na[a[d]]=c}function Ua(a){for(var b=[],c=0;16>c;c++)b.push(a+c);return b}I([14],2,function(){this.asp_registers[this.write_buffer.shift()]=this.write_buffer.shift()});I([15],
96
+ 1,function(){this.read_buffer.clear();this.read_buffer.push(this.asp_registers[this.write_buffer.shift()])});I([16],1,function(){var a=this.write_buffer.shift();a=Va(a/127.5+-1,-1,1);this.dac_buffers[0].push(a);this.dac_buffers[1].push(a);this.bus.send("dac-enable")});I([20,21],2,function(){this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dsp_highspeed=this.dsp_16bit=this.dsp_signed=this.dma_autoinit=!1;this.dma_transfer_size_set();this.dma_transfer_start()});I([22],2);I([23],2);I([28],
97
+ 0,function(){this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dma_autoinit=!0;this.dsp_highspeed=this.dsp_16bit=this.dsp_signed=!1;this.dma_transfer_start()});I([31],0);I([32],0,function(){this.read_buffer.clear();this.read_buffer.push(127)});I([36],2);I([44],0);I([48],0);I([49],0);I([52],0);I([53],0);I([54],0);I([55],0);I([56],0);I([64],1,function(){this.sampling_rate_change(1E6/(256-this.write_buffer.shift())/this.get_channel_count())});I([65,66],2,function(){this.sampling_rate_change(this.write_buffer.shift()<<
98
+ 8|this.write_buffer.shift())});I([72],2,function(){this.dma_transfer_size_set()});I([116],2);I([117],2);I([118],2);I([119],2);I([125],0);I([127],0);I([128],2);I([144],0,function(){this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dma_autoinit=!0;this.dsp_signed=!1;this.dsp_highspeed=!0;this.dsp_16bit=!1;this.dma_transfer_start()});I([145],0);I([152],0);I([153],0);I([160],0);I([168],0);I(Ua(176),3,function(){if(this.command&8)this.dsp_default_handler();else{var a=this.write_buffer.shift();
99
+ this.dma_irq=2;this.dma_channel=this.dma_channel_16bit;this.dma_autoinit=!!(this.command&4);this.dsp_signed=!!(a&16);this.dsp_stereo=!!(a&32);this.dsp_16bit=!0;this.dma_transfer_size_set();this.dma_transfer_start()}});I(Ua(192),3,function(){if(this.command&8)this.dsp_default_handler();else{var a=this.write_buffer.shift();this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dma_autoinit=!!(this.command&4);this.dsp_signed=!!(a&16);this.dsp_stereo=!!(a&32);this.dsp_16bit=!1;this.dma_transfer_size_set();
100
+ this.dma_transfer_start()}});I([208],0,function(){this.dma_paused=!0;this.bus.send("dac-disable")});I([209],0,function(){this.dummy_speaker_enabled=!0});I([211],0,function(){this.dummy_speaker_enabled=!1});I([212],0,function(){this.dma_paused=!1;this.bus.send("dac-enable")});I([213],0,function(){this.dma_paused=!0;this.bus.send("dac-disable")});I([214],0,function(){this.dma_paused=!1;this.bus.send("dac-enable")});I([216],0,function(){this.read_buffer.clear();this.read_buffer.push(255*this.dummy_speaker_enabled)});
101
+ I([217,218],0,function(){this.dma_autoinit=!1});I([224],1,function(){this.read_buffer.clear();this.read_buffer.push(~this.write_buffer.shift())});I([225],0,function(){this.read_buffer.clear();this.read_buffer.push(4);this.read_buffer.push(5)});I([226],1);I([227],0,function(){this.read_buffer.clear();for(var a=0;44>a;a++)this.read_buffer.push("COPYRIGHT (C) CREATIVE TECHNOLOGY LTD, 1992.".charCodeAt(a));this.read_buffer.push(0)});I([228],1,function(){this.test_register=this.write_buffer.shift()});
102
+ I([232],0,function(){this.read_buffer.clear();this.read_buffer.push(this.test_register)});I([242,243],0,function(){this.raise_irq()});var Wa=new Uint8Array(256);Wa[14]=255;Wa[15]=7;Wa[55]=56;I([249],1,function(){var a=this.write_buffer.shift();D("dsp 0xf9: unknown function. input: "+a,8388608);this.read_buffer.clear();this.read_buffer.push(Wa[a])});F.prototype.mixer_read=function(a){var b=Qa[a];b?b=b.call(this):(b=this.mixer_registers[a],D("unhandled mixer register read. addr:"+z(a)+" data:"+z(b),
103
+ 8388608));return b};F.prototype.mixer_write=function(a,b){var c=Ra[a];c?c.call(this,b):D("unhandled mixer register write. addr:"+z(a)+" data:"+z(b),8388608)};F.prototype.mixer_default_read=function(){D("mixer register read. addr:"+z(this.mixer_current_address),8388608);return this.mixer_registers[this.mixer_current_address]};F.prototype.mixer_default_write=function(a){D("mixer register write. addr:"+z(this.mixer_current_address)+" data:"+z(a),8388608);this.mixer_registers[this.mixer_current_address]=
104
+ a};F.prototype.mixer_reset=function(){this.mixer_registers[4]=204;this.mixer_registers[34]=204;this.mixer_registers[38]=204;this.mixer_registers[40]=0;this.mixer_registers[46]=0;this.mixer_registers[10]=0;this.mixer_registers[48]=192;this.mixer_registers[49]=192;this.mixer_registers[50]=192;this.mixer_registers[51]=192;this.mixer_registers[52]=192;this.mixer_registers[53]=192;this.mixer_registers[54]=0;this.mixer_registers[55]=0;this.mixer_registers[56]=0;this.mixer_registers[57]=0;this.mixer_registers[59]=
105
+ 0;this.mixer_registers[60]=31;this.mixer_registers[61]=21;this.mixer_registers[62]=11;this.mixer_registers[63]=0;this.mixer_registers[64]=0;this.mixer_registers[65]=0;this.mixer_registers[66]=0;this.mixer_registers[67]=0;this.mixer_registers[68]=128;this.mixer_registers[69]=128;this.mixer_registers[70]=128;this.mixer_registers[71]=128;this.mixer_full_update()};F.prototype.mixer_full_update=function(){for(var a=1;a<this.mixer_registers.length;a++)Sa[a]||this.mixer_write(a,this.mixer_registers[a])};
106
+ function Ya(a,b){b||(b=F.prototype.mixer_default_read);Qa[a]=b}function Za(a,b){b||(b=F.prototype.mixer_default_write);Ra[a]=b}function $a(a,b,c){Sa[a]=1;Qa[a]=function(){return this.mixer_registers[b]&240|this.mixer_registers[c]>>>4};Ra[a]=function(d){this.mixer_registers[a]=d;var e=d<<4&240|this.mixer_registers[c]&15;this.mixer_write(b,d&240|this.mixer_registers[b]&15);this.mixer_write(c,e)}}function ab(a,b,c){Qa[a]=F.prototype.mixer_default_read;Ra[a]=function(d){this.mixer_registers[a]=d;this.bus.send("mixer-volume",
107
+ [b,c,(d>>>2)-62])}}Ya(0,function(){this.mixer_reset();return 0});Za(0);$a(4,50,51);$a(34,48,49);$a(38,52,53);$a(40,54,55);$a(46,56,57);ab(48,0,0);ab(49,0,1);ab(50,2,0);ab(51,2,1);Ya(59);Za(59,function(a){this.mixer_registers[59]=a;this.bus.send("mixer-volume",[1,2,6*(a>>>6)-18])});Ya(65);Za(65,function(a){this.mixer_registers[65]=a;this.bus.send("mixer-gain-left",6*(a>>>6))});Ya(66);Za(66,function(a){this.mixer_registers[66]=a;this.bus.send("mixer-gain-right",6*(a>>>6))});Ya(68);Za(68,function(a){this.mixer_registers[68]=
108
+ a;a>>>=3;this.bus.send("mixer-treble-left",a-(16>a?14:16))});Ya(69);Za(69,function(a){this.mixer_registers[69]=a;a>>>=3;this.bus.send("mixer-treble-right",a-(16>a?14:16))});Ya(70);Za(70,function(a){this.mixer_registers[70]=a;a>>>=3;this.bus.send("mixer-bass-right",a-(16>a?14:16))});Ya(71);Za(71,function(a){this.mixer_registers[71]=a;a>>>=3;this.bus.send("mixer-bass-right",a-(16>a?14:16))});Ya(128,function(){switch(this.irq){case 2:return 1;case 5:return 2;case 7:return 4;case 10:return 8;default:return 0}});
109
+ Za(128,function(a){a&1&&(this.irq=2);a&2&&(this.irq=5);a&4&&(this.irq=7);a&8&&(this.irq=10)});Ya(129,function(){var a=0;switch(this.dma_channel_8bit){case 0:a|=1;break;case 1:a|=2;break;case 3:a|=8}switch(this.dma_channel_16bit){case 5:a|=32;break;case 6:a|=64;break;case 7:a|=128}return a});Za(129,function(a){a&1&&(this.dma_channel_8bit=0);a&2&&(this.dma_channel_8bit=1);a&8&&(this.dma_channel_8bit=3);a&32&&(this.dma_channel_16bit=5);a&64&&(this.dma_channel_16bit=6);a&128&&(this.dma_channel_16bit=
110
+ 7)});Ya(130,function(){for(var a=32,b=0;16>b;b++)a|=b*this.irq_triggered[b];return a});F.prototype.fm_default_write=function(a,b,c){D("unhandled fm register write. addr:"+b+"|"+z(c)+" data:"+z(a),8388608)};function bb(a,b){b||(b=F.prototype.fm_default_write);for(var c=0;c<a.length;c++)Ta[a[c]]=b}function cb(a,b){for(var c=[];a<=b;a++)c.push(a);return c}var db=new Uint8Array(32);db[0]=0;db[1]=1;db[2]=2;db[3]=3;db[4]=4;db[5]=5;db[8]=6;db[9]=7;db[10]=8;db[11]=9;db[12]=10;db[13]=11;db[16]=12;db[17]=13;
111
+ db[18]=14;db[19]=15;db[20]=16;db[21]=17;bb([1],function(a,b){this.fm_waveform_select_enable[b]=a&1;this.fm_update_waveforms()});bb([2]);bb([3]);bb([4],function(){});bb([5],function(a,b,c){0===b&&this.fm_default_write(a,b,c)});bb([8],function(){});bb(cb(32,53),function(){});bb(cb(64,85),function(){});bb(cb(96,117),function(){});bb(cb(128,149),function(){});bb(cb(160,168),function(){});bb(cb(176,184),function(){});bb([189],function(){});bb(cb(192,200),function(){});bb(cb(224,245),function(){});F.prototype.fm_update_waveforms=
112
+ function(){};F.prototype.sampling_rate_change=function(a){this.sampling_rate=a;this.bus.send("dac-tell-sampling-rate",a)};F.prototype.get_channel_count=function(){return this.dsp_stereo?2:1};F.prototype.dma_transfer_size_set=function(){this.dma_sample_count=1+(this.write_buffer.shift()<<0)+(this.write_buffer.shift()<<8)};F.prototype.dma_transfer_start=function(){D("begin dma transfer",8388608);this.bytes_per_sample=1;this.dsp_16bit&&(this.bytes_per_sample*=2);this.dma_bytes_count=this.dma_sample_count*
113
+ this.bytes_per_sample;this.dma_bytes_block=1024*this.bytes_per_sample;this.dma_bytes_block=Math.min(Math.max(this.dma_bytes_count>>2&-4,32),this.dma_bytes_block);this.dma_waiting_transfer=!0;this.dma.channel_mask[this.dma_channel]||this.dma_on_unmask(this.dma_channel)};F.prototype.dma_on_unmask=function(a){a===this.dma_channel&&this.dma_waiting_transfer&&(this.dma_waiting_transfer=!1,this.dma_bytes_left=this.dma_bytes_count,this.dma_paused=!1,this.bus.send("dac-enable"))};F.prototype.dma_transfer_next=
114
+ function(){D("dma transfering next block",8388608);var a=Math.min(this.dma_bytes_left,this.dma_bytes_block),b=Math.floor(a/this.bytes_per_sample);this.dma.do_write(this.dma_syncbuffer,0,a,this.dma_channel,c=>{D("dma block transfer "+(c?"unsuccessful":"successful"),8388608);c||(this.dma_to_dac(b),this.dma_bytes_left-=a,this.dma_bytes_left||(this.raise_irq(this.dma_irq),this.dma_autoinit&&(this.dma_bytes_left=this.dma_bytes_count)))})};F.prototype.dma_to_dac=function(a){var b=this.dsp_16bit?32767.5:
115
+ 127.5,c=this.dsp_signed?0:-1,d=this.dsp_stereo?1:2;var e=this.dsp_16bit?this.dsp_signed?this.dma_buffer_int16:this.dma_buffer_uint16:this.dsp_signed?this.dma_buffer_int8:this.dma_buffer_uint8;for(var f=0,h=0;h<a;h++)for(var l=Va(e[h]/b+c,-1,1),n=0;n<d;n++)this.dac_buffers[f].push(l),f^=1;this.dac_send()};F.prototype.dac_handle_request=function(){!this.dma_bytes_left||this.dma_paused?this.dac_send():this.dma_transfer_next()};F.prototype.dac_send=function(){if(this.dac_buffers[0].length){var a=this.dac_buffers[0].shift_block(this.dac_buffers[0].length),
116
+ b=this.dac_buffers[1].shift_block(this.dac_buffers[1].length);this.bus.send("dac-send-data",[a,b],[a.buffer,b.buffer])}};F.prototype.raise_irq=function(a){D("raise irq",8388608);this.irq_triggered[a]=1;this.cpu.device_raise_irq(this.irq)};F.prototype.lower_irq=function(a){D("lower irq",8388608);this.irq_triggered[a]=0;this.cpu.device_lower_irq(this.irq)};function Va(a,b,c){return(a<b)*b+(a>c)*c+(b<=a&&a<=c)*a}function J(a,b){this.stopping=this.running=!1;this.idle=!0;this.tick_counter=0;this.worker=
117
+ null;this.cpu=new K(a,b,()=>{this.idle&&this.next_tick(0)});this.bus=a;this.register_yield()}J.prototype.run=function(){this.stopping=!1;this.running||(this.running=!0,this.bus.send("emulator-started"));this.next_tick(0)};J.prototype.do_tick=function(){if(this.stopping||!this.running)this.stopping=this.running=!1,this.bus.send("emulator-stopped");else{this.idle=!1;var a=this.cpu.main_loop();this.next_tick(a)}};J.prototype.next_tick=function(a){const b=++this.tick_counter;this.idle=!0;this.yield(a,
118
+ b)};J.prototype.yield_callback=function(a){a===this.tick_counter&&this.do_tick()};J.prototype.stop=function(){this.running&&(this.stopping=!0)};J.prototype.destroy=function(){this.unregister_yield()};J.prototype.restart=function(){this.cpu.reset_cpu();this.cpu.load_bios()};J.prototype.init=function(a){this.cpu.init(a,this.bus);this.bus.send("emulator-ready")};if("undefined"!==typeof process)J.prototype.yield=function(a,b){1>a?global.setImmediate(c=>this.yield_callback(c),b):setTimeout(c=>this.yield_callback(c),
119
+ a,b)},J.prototype.register_yield=function(){},J.prototype.unregister_yield=function(){};else if("undefined"!==typeof Worker){function a(){let b;globalThis.onmessage=function(c){const d=c.data.t;b=b&&clearTimeout(b);1>d?postMessage(c.data.tick):b=setTimeout(()=>postMessage(c.data.tick),d)}}J.prototype.register_yield=function(){const b=URL.createObjectURL(new Blob(["("+a.toString()+")()"],{type:"text/javascript"}));this.worker=new Worker(b);this.worker.onmessage=c=>this.yield_callback(c.data);URL.revokeObjectURL(b)};
120
+ J.prototype.yield=function(b,c){this.worker.postMessage({t:b,tick:c})};J.prototype.unregister_yield=function(){this.worker&&this.worker.terminate();this.worker=null}}else J.prototype.yield=function(a){setTimeout(()=>{this.do_tick()},a)},J.prototype.register_yield=function(){},J.prototype.unregister_yield=function(){};J.prototype.save_state=function(){return this.cpu.save_state()};J.prototype.restore_state=function(a){return this.cpu.restore_state(a)};if("object"===typeof performance&&performance.now)J.microtick=
121
+ performance.now.bind(performance);else if("function"===typeof require){const {performance:a}=require("perf_hooks");J.microtick=a.now.bind(a)}else J.microtick="object"===typeof process&&process.hrtime?function(){var a=process.hrtime();return 1E3*a[0]+a[1]/1E6}:Date.now;const eb="Fixed (0);Lowest Prio (1);SMI (2);Reserved (3);NMI (4);INIT (5);Reserved (6);ExtINT (7)".split(";"),fb=["physical","logical"];function gb(a){this.cpu=a;this.timer_divider=this.apic_id=0;this.timer_divider_shift=1;this.timer_current_count=
122
+ this.timer_initial_count=0;this.next_tick=J.microtick();this.lvt_error=this.lvt_int1=this.lvt_int0=this.lvt_perf_counter=this.lvt_thermal_sensor=this.lvt_timer=65536;this.icr1=this.icr0=this.tpr=0;this.irr=new Int32Array(8);this.isr=new Int32Array(8);this.tmr=new Int32Array(8);this.spurious_vector=254;this.destination_format=-1;this.read_error=this.error=this.local_destination=0;a.io.mmap_register(4276092928,1048576,b=>{D("Unsupported read8 from apic: "+z(b>>>0),524288);var c=b&3;return this.read32(b&
123
+ -4)>>8*c&255},(b,c)=>{D("Unsupported write8 from apic: "+z(b)+" <- "+z(c),524288);D(Error().stack,void 0);m(!1)},b=>this.read32(b),(b,c)=>this.write32(b,c))}gb.prototype.read32=function(a){a=a-4276092928|0;switch(a){case 32:return D("APIC read id",524288),this.apic_id;case 48:return D("APIC read version",524288),327700;case 128:return this.tpr;case 208:return D("Read local destination",524288),this.local_destination;case 224:return D("Read destination format",524288),this.destination_format;case 240:return this.spurious_vector;
124
+ case 256:case 272:case 288:case 304:case 320:case 336:case 352:case 368:return a=a-256>>4,D("Read isr "+a+": "+z(this.isr[a]>>>0,8),524288),this.isr[a];case 384:case 400:case 416:case 432:case 448:case 464:case 480:case 496:return a=a-384>>4,D("Read tmr "+a+": "+z(this.tmr[a]>>>0,8),524288),this.tmr[a];case 512:case 528:case 544:case 560:case 576:case 592:case 608:case 624:return a=a-512>>4,D("Read irr "+a+": "+z(this.irr[a]>>>0,8),524288),this.irr[a];case 640:return D("Read error: "+z(this.read_error>>>
125
+ 0,8),524288),this.read_error;case 768:return this.icr0;case 784:return D("APIC read icr1",524288),this.icr1;case 800:return D("read timer lvt",524288),this.lvt_timer;case 816:return D("read lvt thermal sensor",524288),this.lvt_thermal_sensor;case 832:return D("read lvt perf counter",524288),this.lvt_perf_counter;case 848:return D("read lvt int0",524288),this.lvt_int0;case 864:return D("read lvt int1",524288),this.lvt_int1;case 880:return D("read lvt error",524288),this.lvt_error;case 992:return D("read timer divider",
126
+ 524288),this.timer_divider;case 896:return D("read timer initial count",524288),this.timer_initial_count;case 912:return D("read timer current count: "+z(this.timer_current_count>>>0,8),524288),this.timer_current_count;default:return D("APIC read "+z(a),524288),m(!1),0}};gb.prototype.write32=function(a,b){a=a-4276092928|0;switch(a){case 32:D("APIC write id: "+z(b>>>8,8),524288);this.apic_id=b;break;case 48:D("APIC write version: "+z(b>>>0,8)+", ignored",524288);break;case 128:this.tpr=b&255;this.check_vector();
127
+ break;case 176:b=this.highest_isr();-1!==b?(this.register_clear_bit(this.isr,b),this.register_get_bit(this.tmr,b)&&this.cpu.devices.ioapic.remote_eoi(b),this.check_vector()):D("Bad eoi: No isr set",524288);break;case 208:D("Set local destination: "+z(b>>>0,8),524288);this.local_destination=b&4278190080;break;case 224:D("Set destination format: "+z(b>>>0,8),524288);this.destination_format=b|16777215;break;case 240:D("Set spurious vector: "+z(b>>>0,8),524288);this.spurious_vector=b;break;case 640:D("Write error: "+
128
+ z(b>>>0,8),524288);this.read_error=this.error;this.error=0;break;case 768:a=b&255;var c=b>>8&7,d=b>>11&1,e=b>>15&1,f=b>>18&3,h=this.icr1>>>24;D("APIC write icr0: "+z(b,8)+" vector="+z(a,2)+" destination_mode="+fb[d]+" delivery_mode="+eb[c]+" destination_shorthand="+["no","self","all with self","all without self"][f],524288);this.icr0=b&-4097;0===f?this.route(a,c,e,h,d):1===f?this.deliver(a,0,e):2===f?this.deliver(a,c,e):3!==f&&m(!1);break;case 784:D("APIC write icr1: "+z(b>>>0,8),524288);this.icr1=
129
+ b;break;case 800:D("timer lvt: "+z(b>>>0,8),524288);this.lvt_timer=b;break;case 816:D("lvt thermal sensor: "+z(b>>>0,8),524288);this.lvt_thermal_sensor=b;break;case 832:D("lvt perf counter: "+z(b>>>0,8),524288);this.lvt_perf_counter=b;break;case 848:D("lvt int0: "+z(b>>>0,8),524288);this.lvt_int0=b;break;case 864:D("lvt int1: "+z(b>>>0,8),524288);this.lvt_int1=b;break;case 880:D("lvt error: "+z(b>>>0,8),524288);this.lvt_error=b;break;case 992:D("timer divider: "+z(b>>>0,8),524288);this.timer_divider=
130
+ b;b=b&3|(b&8)>>1;this.timer_divider_shift=7===b?0:b+1;break;case 896:D("timer initial: "+z(b>>>0,8),524288);this.timer_initial_count=b>>>0;this.timer_current_count=b>>>0;this.next_tick=J.microtick();this.timer_active=!0;break;case 912:D("timer current: "+z(b>>>0,8),524288);m(!1,"read-only register");break;default:D("APIC write32 "+z(a)+" <- "+z(b>>>0,8),524288),m(!1)}};gb.prototype.timer=function(a){if(0===this.timer_current_count)return 100;const b=1E6/(1<<this.timer_divider_shift);a=(a-this.next_tick)*
131
+ b>>>0;this.next_tick+=a/b;this.timer_current_count-=a;0>=this.timer_current_count&&(a=this.lvt_timer&393216,131072===a?(this.timer_current_count%=this.timer_initial_count,0>=this.timer_current_count&&(this.timer_current_count+=this.timer_initial_count),m(0!==this.timer_current_count),0===(this.lvt_timer&65536)&&this.deliver(this.lvt_timer&255,0,!1)):0===a&&(this.timer_current_count=0,D("APIC timer one shot end",524288),0===(this.lvt_timer&65536)&&this.deliver(this.lvt_timer&255,0,!1)));return Math.max(0,
132
+ this.timer_current_count/b)};gb.prototype.route=function(a,b,c){this.deliver(a,b,c)};gb.prototype.deliver=function(a,b,c){5!==b&&4!==b&&((16>a||255===a)&&m(!1,"TODO: Invalid vector"),this.register_get_bit(this.irr,a)?D("Not delivered: irr already set, vector="+z(a,2),524288):(this.register_set_bit(this.irr,a),c?this.register_set_bit(this.tmr,a):this.register_clear_bit(this.tmr,a),this.check_vector()))};gb.prototype.highest_irr=function(){var a=this.register_get_highest_bit(this.irr);m(255!==a);m(16<=
133
+ a||-1===a);return a};gb.prototype.highest_isr=function(){var a=this.register_get_highest_bit(this.isr);m(255!==a);m(16<=a||-1===a);return a};gb.prototype.check_vector=function(){var a=this.highest_irr();-1!==a&&(this.highest_isr()>=a||(a&240)<=(this.tpr&240)||this.cpu.handle_irqs())};gb.prototype.acknowledge_irq=function(){var a=this.highest_irr();if(-1===a||this.highest_isr()>=a||(a&240)<=(this.tpr&240))return-1;this.register_clear_bit(this.irr,a);this.register_set_bit(this.isr,a);this.check_vector();
134
+ return a};gb.prototype.get_state=function(){var a=[];a[0]=this.apic_id;a[1]=this.timer_divider;a[2]=this.timer_divider_shift;a[3]=this.timer_initial_count;a[4]=this.timer_current_count;a[5]=this.next_tick;a[6]=this.lvt_timer;a[7]=this.lvt_perf_counter;a[8]=this.lvt_int0;a[9]=this.lvt_int1;a[10]=this.lvt_error;a[11]=this.tpr;a[12]=this.icr0;a[13]=this.icr1;a[14]=this.irr;a[15]=this.isr;a[16]=this.tmr;a[17]=this.spurious_vector;a[18]=this.destination_format;a[19]=this.local_destination;a[20]=this.error;
135
+ a[21]=this.read_error;a[22]=this.lvt_thermal_sensor;return a};gb.prototype.set_state=function(a){this.apic_id=a[0];this.timer_divider=a[1];this.timer_divider_shift=a[2];this.timer_initial_count=a[3];this.timer_current_count=a[4];this.next_tick=a[5];this.lvt_timer=a[6];this.lvt_perf_counter=a[7];this.lvt_int0=a[8];this.lvt_int1=a[9];this.lvt_error=a[10];this.tpr=a[11];this.icr0=a[12];this.icr1=a[13];this.irr=a[14];this.isr=a[15];this.tmr=a[16];this.spurious_vector=a[17];this.destination_format=a[18];
136
+ this.local_destination=a[19];this.error=a[20];this.read_error=a[21];this.lvt_thermal_sensor=a[22]||65536};gb.prototype.register_get_bit=function(a,b){m(0<=b&&256>b);return a[b>>5]>>(b&31)&1};gb.prototype.register_set_bit=function(a,b){m(0<=b&&256>b);a[b>>5]|=1<<(b&31)};gb.prototype.register_clear_bit=function(a,b){m(0<=b&&256>b);a[b>>5]&=~(1<<(b&31))};gb.prototype.register_get_highest_bit=function(a){for(var b=7;0<=b;b--){var c=a[b];if(c)return ha(c>>>0)|b<<5}return-1};function hb(a){this.cpu=a;this.ioredtbl_config=
137
+ new Int32Array(24);this.ioredtbl_destination=new Int32Array(24);for(var b=0;b<this.ioredtbl_config.length;b++)this.ioredtbl_config[b]=65536;this.irq_value=this.irr=this.ioapic_id=this.ioregsel=0;m(!0);a.io.mmap_register(4273995776,131072,c=>{c=c-4273995776|0;if(16<=c&&20>c)return c-=16,D("ioapic read8 byte "+c+" "+z(this.ioregsel),524288),this.read(this.ioregsel)>>8*c&255;D("Unexpected IOAPIC register read: "+z(c>>>0),524288);m(!1);return 0},c=>{m(!1,"unsupported write8 from ioapic: "+z(c>>>0))},
138
+ c=>{c=c-4273995776|0;if(0===c)return this.ioregsel;if(16===c)return this.read(this.ioregsel);D("Unexpected IOAPIC register read: "+z(c>>>0),524288);m(!1);return 0},(c,d)=>{c=c-4273995776|0;0===c?this.ioregsel=d:16===c?this.write(this.ioregsel,d):(D("Unexpected IOAPIC register write: "+z(c>>>0)+" <- "+z(d>>>0,8),524288),m(!1))})}hb.prototype.remote_eoi=function(a){for(var b=0;24>b;b++){var c=this.ioredtbl_config[b];(c&255)===a&&c&16384&&(D("Clear remote IRR for irq="+z(b),524288),this.ioredtbl_config[b]&=
139
+ -16385,this.check_irq(b))}};hb.prototype.check_irq=function(a){var b=1<<a;if(0!==(this.irr&b)){var c=this.ioredtbl_config[a];if(0===(c&65536)){var d=c>>8&7,e=c>>11&1,f=c&255,h=this.ioredtbl_destination[a]>>>24,l=32768===(c&32768);if(0===(c&32768))this.irr&=~b;else if(this.ioredtbl_config[a]|=16384,c&16384){D("No route: level interrupt and remote IRR still set",524288);return}0===d||1===d?this.cpu.devices.apic.route(f,d,l,h,e):m(!1,"TODO");this.ioredtbl_config[a]&=-4097}}};hb.prototype.set_irq=function(a){if(24<=
140
+ a)m(!1,"Bad irq: "+a,524288);else{var b=1<<a;0===(this.irq_value&b)&&(this.irq_value|=b,65536!==(this.ioredtbl_config[a]&98304)&&(this.irr|=b,this.check_irq(a)))}};hb.prototype.clear_irq=function(a){if(24<=a)m(!1,"Bad irq: "+a,524288);else{var b=1<<a;(this.irq_value&b)===b&&(this.irq_value&=~b,this.ioredtbl_config[a]&32768&&(this.irr&=~b))}};hb.prototype.read=function(a){if(0===a)return D("IOAPIC Read id",524288),this.ioapic_id<<24;if(1===a)return D("IOAPIC Read version",524288),1507345;if(2===a)return D("IOAPIC Read arbitration id",
141
+ 524288),this.ioapic_id<<24;if(16<=a&&64>a){var b=a-16>>1;a&1?(a=this.ioredtbl_destination[b],D("IOAPIC Read destination irq="+z(b)+" -> "+z(a,8),524288)):(a=this.ioredtbl_config[b],D("IOAPIC Read config irq="+z(b)+" -> "+z(a,8),524288));return a}D("IOAPIC register read outside of range "+z(a),524288);m(!1);return 0};hb.prototype.write=function(a,b){if(0===a)this.ioapic_id=b>>>24&15;else if(1===a||2===a)D("Invalid write: "+a,524288);else if(16<=a&&64>a){var c=a-16>>1;if(a&1)this.ioredtbl_destination[c]=
142
+ b&4278190080,D("Write destination "+z(b>>>0,8)+" irq="+z(c)+" dest="+z(b>>>24,2),524288);else{this.ioredtbl_config[c]=b&110591|this.ioredtbl_config[c]&-110592;a=b&255;var d=b>>8&7,e=b>>11&1,f=b>>15&1,h=b>>16&1;D("Write config "+z(b>>>0,8)+" irq="+z(c)+" vector="+z(a,2)+" deliverymode="+eb[d]+" destmode="+fb[e]+" is_level="+f+" disabled="+h,524288);this.check_irq(c)}}else D("IOAPIC register write outside of range "+z(a)+": "+z(b>>>0,8),524288),m(!1)};hb.prototype.get_state=function(){var a=[];a[0]=
143
+ this.ioredtbl_config;a[1]=this.ioredtbl_destination;a[2]=this.ioregsel;a[3]=this.ioapic_id;a[4]=this.irr;a[5]=this.irq_value;return a};hb.prototype.set_state=function(a){this.ioredtbl_config=a[0];this.ioredtbl_destination=a[1];this.ioregsel=a[2];this.ioapic_id=a[3];this.irr=a[4];this.irq_value=a[5]};function ib(a){this.cpu=a;var b=a.io;a.devices.pci.register_device({pci_id:56,pci_space:[134,128,19,113,7,0,128,2,8,0,128,6,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
144
+ 0,0,0,0,0,0,0,0,0,0,0,9,1,0,0],pci_bars:[],name:"acpi"});this.timer_imprecision_offset=this.timer_last_value=0;this.status=1;this.pm1_enable=this.pm1_status=0;this.last_timer=this.get_timer(J.microtick());this.gpe=new Uint8Array(4);b.register_read(45056,this,void 0,function(){D("ACPI pm1_status read",262144);return this.pm1_status});b.register_write(45056,this,void 0,function(c){D("ACPI pm1_status write: "+z(c,4),262144);this.pm1_status&=~c});b.register_read(45058,this,void 0,function(){D("ACPI pm1_enable read",
145
+ 262144);return this.pm1_enable});b.register_write(45058,this,void 0,function(c){D("ACPI pm1_enable write: "+z(c),262144);this.pm1_enable=c});b.register_read(45060,this,void 0,function(){D("ACPI status read",262144);return this.status});b.register_write(45060,this,void 0,function(c){D("ACPI status write: "+z(c),262144);this.status=c});b.register_read(45064,this,void 0,void 0,function(){return this.get_timer(J.microtick())&16777215});b.register_read(45024,this,function(){D("Read gpe#0",262144);return this.gpe[0]});
146
+ b.register_read(45025,this,function(){D("Read gpe#1",262144);return this.gpe[1]});b.register_read(45026,this,function(){D("Read gpe#2",262144);return this.gpe[2]});b.register_read(45027,this,function(){D("Read gpe#3",262144);return this.gpe[3]});b.register_write(45024,this,function(c){D("Write gpe#0: "+z(c),262144);this.gpe[0]=c});b.register_write(45025,this,function(c){D("Write gpe#1: "+z(c),262144);this.gpe[1]=c});b.register_write(45026,this,function(c){D("Write gpe#2: "+z(c),262144);this.gpe[2]=
147
+ c});b.register_write(45027,this,function(c){D("Write gpe#3: "+z(c),262144);this.gpe[3]=c})}ib.prototype.timer=function(a){a=this.get_timer(a);var b=0!==((a^this.last_timer)&8388608);this.pm1_enable&1&&b?(D("ACPI raise irq",262144),this.pm1_status|=1,this.cpu.device_raise_irq(9)):this.cpu.device_lower_irq(9);this.last_timer=a;return 100};ib.prototype.get_timer=function(a){a=Math.round(3579.545*a);a===this.timer_last_value?3579.545>this.timer_imprecision_offset&&this.timer_imprecision_offset++:(m(a>
148
+ this.timer_last_value),this.timer_last_value+this.timer_imprecision_offset<=a?(this.timer_imprecision_offset=0,this.timer_last_value=a):D("Warning: Overshot pmtimer, waiting; current="+a+" last="+this.timer_last_value+" offset="+this.timer_imprecision_offset,262144));return this.timer_last_value+this.timer_imprecision_offset};ib.prototype.get_state=function(){var a=[];a[0]=this.status;a[1]=this.pm1_status;a[2]=this.pm1_enable;a[3]=this.gpe;return a};ib.prototype.set_state=function(a){this.status=
149
+ a[0];this.pm1_status=a[1];this.pm1_enable=a[2];this.gpe=a[3]};function jb(a,b){this.cpu=a;this.bus=b;this.counter_start_time=new Float64Array(3);this.counter_start_value=new Uint16Array(3);this.counter_next_low=new Uint8Array(4);this.counter_enabled=new Uint8Array(4);this.counter_mode=new Uint8Array(4);this.counter_read_mode=new Uint8Array(4);this.counter_latch=new Uint8Array(4);this.counter_latch_value=new Uint16Array(3);this.counter_reload=new Uint16Array(3);a.io.register_read(97,this,function(){var c=
150
+ J.microtick(),d=66.66666666666667*c&1;c=this.did_rollover(2,c);return d<<4|c<<5});a.io.register_write(97,this,function(c){c&1?this.bus.send("pcspeaker-enable"):this.bus.send("pcspeaker-disable")});a.io.register_read(64,this,function(){return this.counter_read(0)});a.io.register_read(65,this,function(){return this.counter_read(1)});a.io.register_read(66,this,function(){return this.counter_read(2)});a.io.register_write(64,this,function(c){this.counter_write(0,c)});a.io.register_write(65,this,function(c){this.counter_write(1,
151
+ c)});a.io.register_write(66,this,function(c){this.counter_write(2,c);this.bus.send("pcspeaker-update",[this.counter_mode[2],this.counter_reload[2]])});a.io.register_write(67,this,this.port43_write)}jb.prototype.get_state=function(){var a=[];a[0]=this.counter_next_low;a[1]=this.counter_enabled;a[2]=this.counter_mode;a[3]=this.counter_read_mode;a[4]=this.counter_latch;a[5]=this.counter_latch_value;a[6]=this.counter_reload;a[7]=this.counter_start_time;a[8]=this.counter_start_value;return a};jb.prototype.set_state=
152
+ function(a){this.counter_next_low=a[0];this.counter_enabled=a[1];this.counter_mode=a[2];this.counter_read_mode=a[3];this.counter_latch=a[4];this.counter_latch_value=a[5];this.counter_reload=a[6];this.counter_start_time=a[7];this.counter_start_value=a[8]};jb.prototype.timer=function(a,b){var c=100;b||(this.counter_enabled[0]&&this.did_rollover(0,a)?(this.counter_start_value[0]=this.get_counter_value(0,a),this.counter_start_time[0]=a,D("pit interrupt. new value: "+this.counter_start_value[0],512),this.cpu.device_lower_irq(0),
153
+ this.cpu.device_raise_irq(0),0===this.counter_mode[0]&&(this.counter_enabled[0]=0)):this.cpu.device_lower_irq(0),this.counter_enabled[0]&&(c=(this.counter_start_value[0]-Math.floor(1193.1816666*(a-this.counter_start_time[0])))/1193.1816666));return c};jb.prototype.get_counter_value=function(a,b){if(!this.counter_enabled[a])return 0;var c=b-this.counter_start_time[a],d=Math.floor(1193.1816666*c);b=this.counter_start_value[a]-d;D("diff="+c+" dticks="+d+" value="+b+" reload="+this.counter_reload[a],
154
+ 512);c=this.counter_reload[a];b>=c?(D("Warning: Counter"+a+" value "+b+" is larger than reload "+c,512),b%=c):0>b&&(b=b%c+c);return b};jb.prototype.did_rollover=function(a,b){b-=this.counter_start_time[a];return 0>b?(D("Warning: PIT timer difference is negative, resetting (timer "+a+")"),!0):this.counter_start_value[a]<Math.floor(1193.1816666*b)};jb.prototype.counter_read=function(a){var b=this.counter_latch[a];if(b)return this.counter_latch[a]--,2===b?this.counter_latch_value[a]&255:this.counter_latch_value[a]>>
155
+ 8;b=this.counter_next_low[a];3===this.counter_mode[a]&&(this.counter_next_low[a]^=1);a=this.get_counter_value(a,J.microtick());return b?a&255:a>>8};jb.prototype.counter_write=function(a,b){this.counter_reload[a]=this.counter_next_low[a]?this.counter_reload[a]&-256|b:this.counter_reload[a]&255|b<<8;3===this.counter_read_mode[a]&&this.counter_next_low[a]||(this.counter_reload[a]||(this.counter_reload[a]=65535),this.counter_start_value[a]=this.counter_reload[a],this.counter_enabled[a]=!0,this.counter_start_time[a]=
156
+ J.microtick(),D("counter"+a+" reload="+z(this.counter_reload[a])+" tick="+(this.counter_reload[a]||65536)/1193.1816666+"ms",512));3===this.counter_read_mode[a]&&(this.counter_next_low[a]^=1)};jb.prototype.port43_write=function(a){var b=a>>1&7,c=a&1,d=a>>6&3;a=a>>4&3;1===d&&D("Unimplemented timer1",512);3===d?D("Unimplemented read back",512):0===a?(this.counter_latch[d]=2,b=this.get_counter_value(d,J.microtick()),D("latch: "+b,512),this.counter_latch_value[d]=b?b-1:0):(6<=b&&(b&=-5),D("Control: mode="+
157
+ b+" ctr="+d+" read_mode="+a+" bcd="+c,512),this.counter_next_low[d]=1===a?0:1,0===d&&this.cpu.device_lower_irq(0),0!==b&&3!==b&&2!==b&&D("Unimplemented counter mode: "+z(b),512),this.counter_mode[d]=b,this.counter_read_mode[d]=a,2===d&&this.bus.send("pcspeaker-update",[this.counter_mode[2],this.counter_reload[2]]))};jb.prototype.dump=function(){const a=this.counter_reload[0];D("counter0 ticks every "+(a||65536)/1193.1816666+"ms (reload="+a+")")};function lb(a,b,c){this.bus=c;this.cpu=a;this.ints=
158
+ 4;this.line_control=this.baud_rate=0;this.lsr=96;this.ier=this.fifo_control=0;this.iir=1;this.irq=this.scratch_register=this.modem_status=this.modem_control=0;this.input=[];this.current_line="";switch(b){case 1016:this.com=0;this.irq=4;break;case 760:this.com=1;this.irq=3;break;case 1E3:this.com=2;this.irq=4;break;case 744:this.irq=this.com=3;break;default:D("Invalid serial port: "+z(b),16384),this.com=0,this.irq=4}this.bus.register("serial"+this.com+"-input",function(d){this.data_received(d)},this);
159
+ this.bus.register("serial"+this.com+"-modem-status-input",function(d){this.set_modem_status(d)},this);this.bus.register("serial"+this.com+"-carrier-detect-input",function(d){this.set_modem_status(d?this.modem_status|136:this.modem_status&-137)},this);this.bus.register("serial"+this.com+"-ring-indicator-input",function(d){this.set_modem_status(d?this.modem_status|68:this.modem_status&-69)},this);this.bus.register("serial"+this.com+"-data-set-ready-input",function(d){this.set_modem_status(d?this.modem_status|
160
+ 34:this.modem_status&-35)},this);this.bus.register("serial"+this.com+"-clear-to-send-input",function(d){this.set_modem_status(d?this.modem_status|17:this.modem_status&-18)},this);a=a.io;a.register_write(b,this,function(d){this.write_data(d)},function(d){this.write_data(d&255);this.write_data(d>>8)});a.register_write(b|1,this,function(d){this.line_control&128?(this.baud_rate=this.baud_rate&255|d<<8,D("baud rate: "+z(this.baud_rate),16384)):(0===(this.ier&2)&&d&2&&this.ThrowInterrupt(2),this.ier=d&
161
+ 15,D("interrupt enable: "+z(d),16384),this.CheckInterrupt())});a.register_read(b,this,function(){if(this.line_control&128)return this.baud_rate&255;let d=0;0===this.input.length?D("Read input empty",16384):(d=this.input.shift(),D("Read input: "+z(d),16384));0===this.input.length&&(this.lsr&=-2,this.ClearInterrupt(12),this.ClearInterrupt(4));return d});a.register_read(b|1,this,function(){return this.line_control&128?this.baud_rate>>8:this.ier&15});a.register_read(b|2,this,function(){var d=this.iir&
162
+ 15;D("read interrupt identification: "+z(this.iir),16384);2===this.iir&&this.ClearInterrupt(2);this.fifo_control&1&&(d|=192);return d});a.register_write(b|2,this,function(d){D("fifo control: "+z(d),16384);this.fifo_control=d});a.register_read(b|3,this,function(){D("read line control: "+z(this.line_control),16384);return this.line_control});a.register_write(b|3,this,function(d){D("line control: "+z(d),16384);this.line_control=d});a.register_read(b|4,this,function(){return this.modem_control});a.register_write(b|
163
+ 4,this,function(d){D("modem control: "+z(d),16384);this.modem_control=d});a.register_read(b|5,this,function(){D("read line status: "+z(this.lsr),16384);return this.lsr});a.register_write(b|5,this,function(){D("Factory test write",16384)});a.register_read(b|6,this,function(){D("read modem status: "+z(this.modem_status),16384);return this.modem_status&=240});a.register_write(b|6,this,function(d){D("write modem status: "+z(d),16384);this.set_modem_status(d)});a.register_read(b|7,this,function(){return this.scratch_register});
164
+ a.register_write(b|7,this,function(d){this.scratch_register=d})}lb.prototype.get_state=function(){var a=[];a[0]=this.ints;a[1]=this.baud_rate;a[2]=this.line_control;a[3]=this.lsr;a[4]=this.fifo_control;a[5]=this.ier;a[6]=this.iir;a[7]=this.modem_control;a[8]=this.modem_status;a[9]=this.scratch_register;a[10]=this.irq;return a};lb.prototype.set_state=function(a){this.ints=a[0];this.baud_rate=a[1];this.line_control=a[2];this.lsr=a[3];this.fifo_control=a[4];this.ier=a[5];this.iir=a[6];this.modem_control=
165
+ a[7];this.modem_status=a[8];this.scratch_register=a[9];this.irq=a[10]};lb.prototype.CheckInterrupt=function(){this.ints&4096&&this.ier&1?(this.iir=12,this.cpu.device_raise_irq(this.irq)):this.ints&16&&this.ier&1?(this.iir=4,this.cpu.device_raise_irq(this.irq)):this.ints&4&&this.ier&2?(this.iir=2,this.cpu.device_raise_irq(this.irq)):this.ints&1&&this.ier&8?(this.iir=0,this.cpu.device_raise_irq(this.irq)):(this.iir=1,this.cpu.device_lower_irq(this.irq))};lb.prototype.ThrowInterrupt=function(a){this.ints|=
166
+ 1<<a;this.CheckInterrupt()};lb.prototype.ClearInterrupt=function(a){this.ints&=~(1<<a);this.CheckInterrupt()};lb.prototype.data_received=function(a){D("input: "+z(a),16384);this.input.push(a);this.lsr|=1;this.fifo_control&1?this.ThrowInterrupt(12):this.ThrowInterrupt(4)};lb.prototype.write_data=function(a){this.line_control&128?this.baud_rate=this.baud_rate&-256|a:(D("data: "+z(a),16384),this.ThrowInterrupt(2),this.bus.send("serial"+this.com+"-output-byte",a),a=String.fromCharCode(a),this.current_line+=
167
+ a,"\n"===a&&(a=this.current_line.trimRight().replace(/[\x00-\x08\x0b-\x1f\x7f\x80-\xff]/g,""),D("SERIAL: "+a),this.current_line=""))};lb.prototype.set_modem_status=function(a){D("modem status: "+z(a),16384);const b=this.modem_status&15;let c=(this.modem_status^a)>>4;this.modem_status=a;this.modem_status=this.modem_status|c|b};function mb(a){this.pci_addr=new Uint8Array(4);this.pci_value=new Uint8Array(4);this.pci_response=new Uint8Array(4);this.pci_status=new Uint8Array(4);this.pci_addr32=new Int32Array(this.pci_addr.buffer);
168
+ this.pci_value32=new Int32Array(this.pci_value.buffer);this.pci_response32=new Int32Array(this.pci_response.buffer);this.pci_status32=new Int32Array(this.pci_status.buffer);this.device_spaces=[];this.devices=[];this.cpu=a;for(var b=0;256>b;b++)this.device_spaces[b]=void 0,this.devices[b]=void 0;this.io=a.io;a.io.register_write(3324,this,function(c){this.pci_write8(this.pci_addr32[0],c)},function(c){this.pci_write16(this.pci_addr32[0],c)},function(c){this.pci_write32(this.pci_addr32[0],c)});a.io.register_write(3325,
169
+ this,function(c){this.pci_write8(this.pci_addr32[0]+1|0,c)});a.io.register_write(3326,this,function(c){this.pci_write8(this.pci_addr32[0]+2|0,c)},function(c){this.pci_write16(this.pci_addr32[0]+2|0,c)});a.io.register_write(3327,this,function(c){this.pci_write8(this.pci_addr32[0]+3|0,c)});a.io.register_read_consecutive(3324,this,function(){return this.pci_response[0]},function(){return this.pci_response[1]},function(){return this.pci_response[2]},function(){return this.pci_response[3]});a.io.register_read_consecutive(3320,
170
+ this,function(){return this.pci_status[0]},function(){return this.pci_status[1]},function(){return this.pci_status[2]},function(){return this.pci_status[3]});a.io.register_write_consecutive(3320,this,function(c){this.pci_addr[0]=c&252},function(c){2===(this.pci_addr[1]&6)&&6===(c&6)?(D("CPU reboot via PCI"),a.reboot_internal()):this.pci_addr[1]=c},function(c){this.pci_addr[2]=c},function(c){this.pci_addr[3]=c;this.pci_query()});this.register_device({pci_id:0,pci_space:[134,128,55,18,0,0,0,0,2,0,0,
171
+ 6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0],pci_bars:[],name:"82441FX PMC"});this.isa_bridge={pci_id:8,pci_space:[134,128,0,112,7,0,0,2,0,0,1,6,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],pci_bars:[],name:"82371SB PIIX3 ISA"};this.isa_bridge_space=this.register_device(this.isa_bridge);this.isa_bridge_space8=new Uint8Array(this.isa_bridge_space.buffer)}
172
+ mb.prototype.get_state=function(){for(var a=[],b=0;256>b;b++)a[b]=this.device_spaces[b];a[256]=this.pci_addr;a[257]=this.pci_value;a[258]=this.pci_response;a[259]=this.pci_status;return a};mb.prototype.set_state=function(a){for(var b=0;256>b;b++){var c=this.devices[b],d=a[b];if(c&&d){for(var e=0;e<c.pci_bars.length;e++){var f=d[4+e];if(f&1){var h=c.pci_bars[e];this.set_io_bars(h,h.original_bar&65534,f&65534)}}this.device_spaces[b].set(d)}else c&&D("Warning: While restoring PCI device: Device exists in current configuration but not in snapshot ("+
173
+ c.name+")"),d&&D("Warning: While restoring PCI device: Device doesn't exist in current configuration but does in snapshot (device "+z(b,2)+")")}this.pci_addr.set(a[256]);this.pci_value.set(a[257]);this.pci_response.set(a[258]);this.pci_status.set(a[259])};mb.prototype.pci_query=function(){var a=this.pci_addr[2]<<8|this.pci_addr[1],b=this.pci_addr[0]&252,c=a>>3&31;var d="query enabled="+(this.pci_addr[3]>>7)+(" bdf="+z(a,4));d+=" dev="+z(c,2);d+=" addr="+z(b,2);c=this.device_spaces[a];void 0!==c?(this.pci_status32[0]=
174
+ -2147483648,this.pci_response32[0]=b<c.byteLength?c[b>>2]:0,d+=" "+z(this.pci_addr32[0]>>>0,8)+" -> "+z(this.pci_response32[0]>>>0,8),b>=c.byteLength&&(d+=" (undef)"),d+=" ("+this.devices[a].name+")",D(d,2048)):(this.pci_response32[0]=-1,this.pci_status32[0]=0)};mb.prototype.pci_write8=function(a,b){var c=a>>8&65535;a&=255;var d=new Uint8Array(this.device_spaces[c].buffer),e=this.devices[c];d&&(m(!(16<=a&&44>a||48<=a&&52>a),"PCI: Expected 32-bit write, got 8-bit (addr: "+z(a)+")"),D("PCI write8 dev="+
175
+ z(c>>3,2)+" ("+e.name+") addr="+z(a,4)+" value="+z(b,2),2048),d[a]=b)};mb.prototype.pci_write16=function(a,b){m(0===(a&1));var c=a>>8&65535;a&=255;var d=new Uint16Array(this.device_spaces[c].buffer),e=this.devices[c];d&&(16<=a&&44>a?D("Warning: PCI: Expected 32-bit write, got 16-bit (addr: "+z(a)+")"):(m(!(48<=a&&52>a),"PCI: Expected 32-bit write, got 16-bit (addr: "+z(a)+")"),D("PCI writ16 dev="+z(c>>3,2)+" ("+e.name+") addr="+z(a,4)+" value="+z(b,4),2048),d[a>>>1]=b))};mb.prototype.pci_write32=
176
+ function(a,b){m(0===(a&3));var c=a>>8&65535;a&=255;var d=this.device_spaces[c],e=this.devices[c];if(d)if(16<=a&&40>a){var f=a-16>>2,h=e.pci_bars[f];D("BAR"+f+" exists="+(h?"y":"n")+" changed to "+z(b>>>0)+" dev="+z(c>>3,2)+" ("+e.name+") ",2048);h?(m(!(h.size&h.size-1),"bar size should be power of 2"),c=a>>2,e=d[c]&1,-1===(b|3|h.size-1)?(b=~(h.size-1)|e,0===e&&(d[c]=b)):0===e&&(f=h.original_bar,(b&-16)!==(f&-16)&&D("Warning: Changing memory bar not supported, ignored",2048),d[c]=f),1===e&&(m(1===
177
+ e),e=d[c]&65534,f=b&65534,D("io bar changed from "+z(e>>>0,8)+" to "+z(f>>>0,8)+" size="+h.size,2048),this.set_io_bars(h,e,f),d[c]=b|1)):d[a>>2]=0;D("BAR effective value: "+z(d[a>>2]>>>0),2048)}else 48===a?(D("PCI write rom address dev="+z(c>>3,2)+" ("+e.name+") value="+z(b>>>0,8),2048),d[a>>2]=e.pci_rom_size?-1===(b|2047)?-e.pci_rom_size|0:e.pci_rom_address|0:0):4===a?D("PCI write dev="+z(c>>3,2)+" ("+e.name+") addr="+z(a,4)+" value="+z(b>>>0,8),2048):(D("PCI write dev="+z(c>>3,2)+" ("+e.name+") addr="+
178
+ z(a,4)+" value="+z(b>>>0,8),2048),d[a>>>2]=b)};mb.prototype.register_device=function(a){m(void 0!==a.pci_id);m(void 0!==a.pci_space);m(void 0!==a.pci_bars);var b=a.pci_id;D("PCI register bdf="+z(b)+" ("+a.name+")",2048);m(!this.devices[b]);m(64<=a.pci_space.length);m(b<this.devices.length);var c=new Int32Array(64);c.set(new Int32Array((new Uint8Array(a.pci_space)).buffer));this.device_spaces[b]=c;this.devices[b]=a;b=c.slice(4,10);for(var d=0;d<a.pci_bars.length;d++){var e=a.pci_bars[d];if(e){var f=
179
+ b[d],h=f&1;e.original_bar=f;e.entries=[];if(0!==h)for(m(1===h),f&=-2,h=0;h<e.size;h++)e.entries[h]=this.io.ports[f+h]}}return c};mb.prototype.set_io_bars=function(a,b,c){var d=a.size;D("Move io bars: from="+z(b)+" to="+z(c)+" count="+d,2048);for(var e=this.io.ports,f=0;f<d;f++){var h=e[b+f];4096<=b+f&&(e[b+f]=this.io.create_empty_entry());h.read8===this.io.empty_port_read8&&h.read16===this.io.empty_port_read16&&h.read32===this.io.empty_port_read32&&h.write8===this.io.empty_port_write&&h.write16===
180
+ this.io.empty_port_write&&h.write32===this.io.empty_port_write&&D("Warning: Bad IO bar: Source not mapped, port="+z(b+f,4),2048);h=a.entries[f];var l=e[c+f];m(h&&l);4096<=c+f&&(e[c+f]=h);l.read8!==this.io.empty_port_read8&&l.read16!==this.io.empty_port_read16&&l.read32!==this.io.empty_port_read32&&l.write8!==this.io.empty_port_write&&l.write16!==this.io.empty_port_write&&l.write32!==this.io.empty_port_write||D("Warning: Bad IO bar: Target already mapped, port="+z(c+f,4),2048)}};mb.prototype.raise_irq=
181
+ function(a){var b=this.device_spaces[a];m(b);this.cpu.device_raise_irq(this.isa_bridge_space8[96+((b[15]>>8&255)-1+((a>>3)-1&255)&3)])};mb.prototype.lower_irq=function(a){var b=this.device_spaces[a];m(b);this.cpu.device_lower_irq(this.isa_bridge_space8[96+((b[15]>>8&255)+(a>>3&255)-2&3)])};function nb(a,b,c){a[0]===b[0]&&a[1]===b[1]&&a[2]===b[2]&&a[3]===b[3]&&a[4]===b[4]&&a[5]===b[5]&&(D("Replace mac in eth destination field",1048576),a[0]=c[0],a[1]=c[1],a[2]=c[2],a[3]=c[3],a[4]=c[4],a[5]=c[5]);a[6]===
182
+ b[0]&&a[7]===b[1]&&a[8]===b[2]&&a[9]===b[3]&&a[10]===b[4]&&a[11]===b[5]&&(D("Replace mac in eth source field",1048576),a[6]=c[0],a[7]=c[1],a[8]=c[2],a[9]=c[3],a[10]=c[4],a[11]=c[5]);var d=a[12]<<8|a[13];if(2048===d)if(a=a.subarray(14),d=a[0]>>4,4!==d)D("Expected ipv4.version==4 but got: "+d,1048576);else{if(m(5===(a[0]&15),"TODO: ihl!=5"),17===a[9]){a=a.subarray(20);d=a[0]<<8|a[1];var e=a[2]<<8|a[3];D("udp srcport="+d+" dstport="+e+" checksum="+z(a[6]<<8|a[7],4),1048576);if(67===d||67===e)if(d=a.subarray(8),
183
+ e=d[236]<<24|d[237]<<16|d[238]<<8|d[239],1669485411!==e)D("dhcp packet didn't match magic: "+z(e,8));else for(d[28]===b[0]&&d[29]===b[1]&&d[30]===b[2]&&d[31]===b[3]&&d[32]===b[4]&&d[33]===b[5]&&(D("Replace mac in dhcp.chaddr",1048576),d[28]=c[0],d[29]=c[1],d[30]=c[2],d[31]=c[3],d[32]=c[4],d[33]=c[5],a[6]=a[7]=0),e=240;e<d.length;){const f=d[e++];if(255===f)break;const h=d[e++];61===f&&1===d[e+0]&&d[e+1]===b[0]&&d[e+2]===b[1]&&d[e+3]===b[2]&&d[e+4]===b[3]&&d[e+5]===b[4]&&d[e+6]===b[5]&&(D("Replace mac in dhcp.clientidentifier",
184
+ 1048576),d[e+1]=c[0],d[e+2]=c[1],d[e+3]=c[2],d[e+4]=c[3],d[e+5]=c[4],d[e+6]=c[5],a[6]=a[7]=0);e+=h}}}else 2054===d&&(a=a.subarray(14),D("arp oper="+a[7]+" "+ob(a.subarray(8,14))+" "+ob(a.subarray(18,24)),1048576),a[8]===b[0]&&a[9]===b[1]&&a[10]===b[2]&&a[11]===b[3]&&a[12]===b[4]&&a[13]===b[5]&&(D("Replace mac in arp.sha",1048576),a[8]=c[0],a[9]=c[1],a[10]=c[2],a[11]=c[3],a[12]=c[4],a[13]=c[5]))}function ob(a){return[a[0].toString(16).padStart(2,"0"),a[1].toString(16).padStart(2,"0"),a[2].toString(16).padStart(2,
185
+ "0"),a[3].toString(16).padStart(2,"0"),a[4].toString(16).padStart(2,"0"),a[5].toString(16).padStart(2,"0")].join(":")}function pb(a,b,c,d,e){this.cpu=a;this.pci=a.devices.pci;this.id=e||0;this.preserve_mac_from_state_image=c;this.mac_address_translation=d;this.bus=b;this.bus.register("net"+this.id+"-receive",function(f){this.receive(f)},this);this.port=768+256*this.id;this.name="ne2k";this.pci_space=[236,16,41,128,3,1,0,0,0,0,0,2,0,0,0,0,this.port&255|1,this.port>>8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
186
+ 0,0,0,0,0,0,0,0,0,0,0,244,26,0,17,0,0,184,254,0,0,0,0,0,0,0,0,0,1,0,0];this.pci_id=(0===this.id?5:7+this.id)<<3;this.pci_bars=[{size:32}];this.imr=this.isr=0;this.cr=1;this.tpsr=this.tcnt=this.rcnt=this.dcfg=0;this.memory=new Uint8Array(32768);this.txcr=this.rxcr=0;this.tsr=1;this.mac=new Uint8Array([0,34,21,255*Math.random()|0,255*Math.random()|0,255*Math.random()|0]);this.bus.send("net"+this.id+"-mac",ob(this.mac));this.mar=Uint8Array.of(255,255,255,255,255,255,255,255);this.mac_address_in_state=
187
+ null;for(b=0;6>b;b++)this.memory[b<<1]=this.memory[b<<1|1]=this.mac[b];this.memory[28]=this.memory[29]=87;this.memory[30]=this.memory[31]=87;D("Mac: "+ob(this.mac),1048576);this.rsar=0;this.pstart=64;this.pstop=128;this.boundary=this.curpg=76;b=a.io;b.register_read(this.port|0,this,function(){D("Read cmd",1048576);return this.cr});b.register_write(this.port|0,this,function(f){this.cr=f;D("Write command: "+z(f,2)+" newpg="+(this.cr>>6)+" txcr="+z(this.txcr,2),1048576);this.cr&1||(f&24&&0===this.rcnt&&
188
+ this.do_interrupt(64),f&4&&(f=this.tpsr<<8,f=this.memory.subarray(f,f+this.tcnt),this.mac_address_in_state&&(f=new Uint8Array(f),nb(f,this.mac_address_in_state,this.mac)),this.bus.send("net"+this.id+"-send",f),this.bus.send("eth-transmit-end",[f.length]),this.cr&=-5,this.do_interrupt(2),D("Command: Transfer. length="+z(f.byteLength),1048576)))});b.register_read(this.port|13,this,function(){var f=this.get_page();if(1===f)return D("Read mar5",1048576),this.mar[5];D("Read counter0 pg="+f,1048576);return 0});
189
+ b.register_read(this.port|14,this,function(){var f=this.get_page();if(1===f)return D("Read mar6",1048576),this.mar[6];D("Read8 counter1 pg="+f,1048576);return 0},function(){D("Read16 counter1 pg="+this.get_page(),1048576);return 0});b.register_read(this.port|15,this,function(){var f=this.get_page();if(1===f)return D("Read mar7",1048576),this.mar[7];D("Read counter2 pg="+f,1048576);return 0});b.register_read(this.port|31,this,function(){this.get_page();D("Read reset",1048576);this.do_interrupt(128);
190
+ return 0});b.register_write(this.port|31,this,function(f){this.get_page();D("Write reset: "+z(f,2),1048576)});b.register_read(this.port|1,this,function(){var f=this.get_page();if(0===f)return this.pstart;if(1===f)return D("Read pg1/01 (mac[0])",1048576),this.mac[0];if(2===f)return this.pstart;D("Read pg"+f+"/01");m(!1);return 0});b.register_write(this.port|1,this,function(f){var h=this.get_page();0===h?(D("start page: "+z(f,2),1048576),this.pstart=f):1===h?(D("mac[0] = "+z(f),1048576),this.mac[0]=
191
+ f):3===h?D("Unimplemented: Write pg3/01 (9346CR): "+z(f),1048576):(D("Write pg"+h+"/01: "+z(f),1048576),m(!1))});b.register_read(this.port|2,this,function(){var f=this.get_page();if(0===f)return this.pstop;if(1===f)return D("Read pg1/02 (mac[1])",1048576),this.mac[1];if(2===f)return this.pstop;D("Read pg"+f+"/02",1048576);m(!1);return 0});b.register_write(this.port|2,this,function(f){var h=this.get_page();0===h?(D("stop page: "+z(f,2),1048576),f>this.memory.length>>8&&(f=this.memory.length>>8,D("XXX: Adjusting stop page to "+
192
+ z(f),1048576)),this.pstop=f):1===h?(D("mac[1] = "+z(f),1048576),this.mac[1]=f):(D("Write pg"+h+"/02: "+z(f),1048576),m(!1))});b.register_read(this.port|7,this,function(){var f=this.get_page();if(0===f)return D("Read isr: "+z(this.isr,2),1048576),this.isr;if(1===f)return D("Read curpg: "+z(this.curpg,2),1048576),this.curpg;m(!1);return 0});b.register_write(this.port|7,this,function(f){var h=this.get_page();0===h?(D("Write isr: "+z(f,2),1048576),this.isr&=~f,this.update_irq()):1===h?(D("Write curpg: "+
193
+ z(f,2),1048576),this.curpg=f):m(!1)});b.register_write(this.port|13,this,function(f){var h=this.get_page();0===h?(this.txcr=f,D("Write tx config: "+z(f,2),1048576)):D("Unimplemented: Write pg"+h+"/0d "+z(f,2),1048576)});b.register_write(this.port|14,this,function(f){var h=this.get_page();0===h?(D("Write data configuration: "+z(f,2),1048576),this.dcfg=f):D("Unimplemented: Write pg"+h+"/0e "+z(f,2),1048576)});b.register_read(this.port|10,this,function(){var f=this.get_page();if(0===f)return D("Read pg0/0a",
194
+ 1048576),80;if(1===f)return D("Read mar2",1048576),this.mar[2];m(!1,"TODO");return 0});b.register_write(this.port|10,this,function(f){var h=this.get_page();0===h?(D("Write remote byte count low: "+z(f,2),1048576),this.rcnt=this.rcnt&65280|f&255):D("Unimplemented: Write pg"+h+"/0a "+z(f,2),1048576)});b.register_read(this.port|11,this,function(){var f=this.get_page();if(0===f)return D("Read pg0/0b",1048576),67;if(1===f)return D("Read mar3",1048576),this.mar[3];m(!1,"TODO");return 0});b.register_write(this.port|
195
+ 11,this,function(f){var h=this.get_page();0===h?(D("Write remote byte count high: "+z(f,2),1048576),this.rcnt=this.rcnt&255|f<<8&65280):D("Unimplemented: Write pg"+h+"/0b "+z(f,2),1048576)});b.register_read(this.port|8,this,function(){var f=this.get_page();if(0===f)return D("Read remote start address low",1048576),this.rsar&255;if(1===f)return D("Read mar0",1048576),this.mar[0];D("Unimplemented: Read pg"+f+"/08",1048576);m(!1);return 0});b.register_write(this.port|8,this,function(f){var h=this.get_page();
196
+ 0===h?(D("Write remote start address low: "+z(f,2),1048576),this.rsar=this.rsar&65280|f&255):D("Unimplemented: Write pg"+h+"/08 "+z(f,2),1048576)});b.register_read(this.port|9,this,function(){var f=this.get_page();if(0===f)return D("Read remote start address high",1048576),this.rsar>>8&255;if(1===f)return D("Read mar1",1048576),this.mar[1];D("Unimplemented: Read pg"+f+"/09",1048576);m(!1);return 0});b.register_write(this.port|9,this,function(f){var h=this.get_page();0===h?(D("Write remote start address low: "+
197
+ z(f,2),1048576),this.rsar=this.rsar&255|f<<8&65280):D("Unimplemented: Write pg"+h+"/09 "+z(f,2),1048576)});b.register_write(this.port|15,this,function(f){var h=this.get_page();0===h?(D("Write interrupt mask register: "+z(f,2)+" isr="+z(this.isr,2),1048576),this.imr=f,this.update_irq()):D("Unimplemented: Write pg"+h+"/0f "+z(f,2),1048576)});b.register_read(this.port|3,this,function(){var f=this.get_page();if(0===f)return D("Read boundary: "+z(this.boundary,2),1048576),this.boundary;if(1===f)return D("Read pg1/03 (mac[2])",
198
+ 1048576),this.mac[2];3===f?D("Unimplemented: Read pg3/03 (CONFIG0)",1048576):(D("Read pg"+f+"/03",1048576),m(!1));return 0});b.register_write(this.port|3,this,function(f){var h=this.get_page();0===h?(D("Write boundary: "+z(f,2),1048576),this.boundary=f):1===h?(D("mac[2] = "+z(f),1048576),this.mac[2]=f):(D("Write pg"+h+"/03: "+z(f),1048576),m(!1))});b.register_read(this.port|4,this,function(){var f=this.get_page();if(0===f)return this.tsr;if(1===f)return D("Read pg1/04 (mac[3])",1048576),this.mac[3];
199
+ D("Read pg"+f+"/04",1048576);m(!1);return 0});b.register_write(this.port|4,this,function(f){var h=this.get_page();0===h?(D("Write tpsr: "+z(f,2),1048576),this.tpsr=f):1===h?(D("mac[3] = "+z(f),1048576),this.mac[3]=f):(D("Write pg"+h+"/04: "+z(f),1048576),m(!1))});b.register_read(this.port|5,this,function(){var f=this.get_page();if(0===f)return D("Unimplemented: Read pg0/05 (NCR: Number of Collisions Register)",1048576),0;if(1===f)return D("Read pg1/05 (mac[4])",1048576),this.mac[4];3===f?D("Unimplemented: Read pg3/05 (CONFIG2)",
200
+ 1048576):(D("Read pg"+f+"/05",1048576),m(!1));return 0});b.register_write(this.port|5,this,function(f){var h=this.get_page();0===h?(D("Write tcnt low: "+z(f,2),1048576),this.tcnt=this.tcnt&-256|f):1===h?(D("mac[4] = "+z(f),1048576),this.mac[4]=f):3===h?D("Unimplemented: Write pg3/05 (CONFIG2): "+z(f),1048576):(D("Write pg"+h+"/05: "+z(f),1048576),m(!1))});b.register_read(this.port|6,this,function(){var f=this.get_page();if(0===f)return m(!1,"TODO"),0;if(1===f)return D("Read pg1/06 (mac[5])",1048576),
201
+ this.mac[5];3===f?D("Unimplemented: Read pg3/06 (CONFIG3)",1048576):(D("Read pg"+f+"/06",1048576),m(!1));return 0});b.register_write(this.port|6,this,function(f){var h=this.get_page();0===h?(D("Write tcnt high: "+z(f,2),1048576),this.tcnt=this.tcnt&255|f<<8):1===h?(D("mac[5] = "+z(f),1048576),this.mac[5]=f):3===h?D("Unimplemented: Write pg3/06 (CONFIG3): "+z(f),1048576):(D("Write pg"+h+"/06: "+z(f),1048576),m(!1))});b.register_read(this.port|12,this,function(){var f=this.get_page();if(0===f)return 9;
202
+ if(1===f)return D("Read mar4",1048576),this.mar[4];D("Unimplemented: Read pg"+f+"/0c",1048576);m(!1);return 0});b.register_write(this.port|12,this,function(f){var h=this.get_page();0===h?(D("RX configuration reg write: "+z(f,2),1048576),this.rxcr=f):D("Unimplemented: Write pg"+h+"/0c: "+z(f),1048576)});b.register_read(this.port|16,this,this.data_port_read8,this.data_port_read16,this.data_port_read32);b.register_write(this.port|16,this,this.data_port_write16,this.data_port_write16,this.data_port_write32);
203
+ a.devices.pci.register_device(this)}pb.prototype.get_state=function(){var a=[];a[0]=this.isr;a[1]=this.imr;a[2]=this.cr;a[3]=this.dcfg;a[4]=this.rcnt;a[5]=this.tcnt;a[6]=this.tpsr;a[7]=this.rsar;a[8]=this.pstart;a[9]=this.curpg;a[10]=this.boundary;a[11]=this.pstop;a[12]=this.rxcr;a[13]=this.txcr;a[14]=this.tsr;a[15]=this.mac;a[16]=this.memory;return a};pb.prototype.set_state=function(a){this.isr=a[0];this.imr=a[1];this.cr=a[2];this.dcfg=a[3];this.rcnt=a[4];this.tcnt=a[5];this.tpsr=a[6];this.rsar=
204
+ a[7];this.pstart=a[8];this.curpg=a[9];this.boundary=a[10];this.pstop=a[11];this.rxcr=a[12];this.txcr=a[13];this.tsr=a[14];this.preserve_mac_from_state_image?(this.mac=a[15],this.memory=a[16]):this.mac_address_translation&&(this.mac_address_in_state=a[15],this.memory=a[16],D("Using mac address translation guest_os_mac="+ob(this.mac_address_in_state)+" real_mac="+ob(this.mac),1048576));this.bus.send("net"+this.id+"-mac",ob(this.mac))};pb.prototype.do_interrupt=function(a){D("Do interrupt "+z(a,2),1048576);
205
+ this.isr|=a;this.update_irq()};pb.prototype.update_irq=function(){this.imr&this.isr?this.pci.raise_irq(this.pci_id):this.pci.lower_irq(this.pci_id)};pb.prototype.data_port_write=function(a){if(16>=this.rsar||16384<=this.rsar&&32768>this.rsar)this.memory[this.rsar]=a;this.rsar++;this.rcnt--;this.rsar>=this.pstop<<8&&(this.rsar+=this.pstart-this.pstop<<8);0===this.rcnt&&this.do_interrupt(64)};pb.prototype.data_port_write16=function(a){this.data_port_write(a);this.dcfg&1&&this.data_port_write(a>>8)};
206
+ pb.prototype.data_port_write32=function(a){this.data_port_write(a);this.data_port_write(a>>8);this.data_port_write(a>>16);this.data_port_write(a>>24)};pb.prototype.data_port_read=function(){let a=0;32768>this.rsar&&(a=this.memory[this.rsar]);this.rsar++;this.rcnt--;this.rsar>=this.pstop<<8&&(this.rsar+=this.pstart-this.pstop<<8);0===this.rcnt&&this.do_interrupt(64);return a};pb.prototype.data_port_read8=function(){return this.data_port_read16()&255};pb.prototype.data_port_read16=function(){return this.dcfg&
207
+ 1?this.data_port_read()|this.data_port_read()<<8:this.data_port_read()};pb.prototype.data_port_read32=function(){return this.data_port_read()|this.data_port_read()<<8|this.data_port_read()<<16|this.data_port_read()<<24};pb.prototype.receive=function(a){if(!(this.cr&1)&&(this.bus.send("eth-receive-end",[a.length]),this.rxcr&16||this.rxcr&4&&255===a[0]&&255===a[1]&&255===a[2]&&255===a[3]&&255===a[4]&&255===a[5]||!(this.rxcr&8&&1===(a[0]&1)||a[0]!==this.mac[0]||a[1]!==this.mac[1]||a[2]!==this.mac[2]||
208
+ a[3]!==this.mac[3]||a[4]!==this.mac[4]||a[5]!==this.mac[5]))){this.mac_address_in_state&&(a=new Uint8Array(a),nb(a,this.mac,this.mac_address_in_state));var b=this.curpg<<8,c=Math.max(60,a.length)+4,d=b+4,e=this.curpg+1+(c>>8),f=b+c,h=1+(c>>8),l=this.boundary>this.curpg?this.boundary-this.curpg:this.pstop-this.curpg+this.boundary-this.pstart;l<h&&0!==this.boundary?D("Buffer full, dropping packet pstart="+z(this.pstart)+" pstop="+z(this.pstop)+" curpg="+z(this.curpg)+" needed="+z(h)+" boundary="+z(this.boundary)+
209
+ " available="+z(l),1048576):(f>this.pstop<<8?(m(60<=a.length),f=(this.pstop<<8)-d,m(0<=f),this.memory.set(a.subarray(0,f),d),this.memory.set(a.subarray(f),this.pstart<<8),D("rcv cut="+z(f),1048576)):(this.memory.set(a,d),60>a.length&&this.memory.fill(0,d+a.length,d+60)),e>=this.pstop&&(e+=this.pstart-this.pstop),this.memory[b]=1,this.memory[b+1]=e,this.memory[b+2]=c,this.memory[b+3]=c>>8,this.curpg=e,D("rcv offset="+z(b)+" len="+z(c)+" next="+z(e),1048576),this.do_interrupt(1))}};pb.prototype.get_page=
210
+ function(){return this.cr>>6&3};var N={Debug:function(a){D([].slice.apply(arguments).join(" "),4194304)},Abort:function(){throw Error("message.Abort()");}};var O={};const qb=new TextDecoder,rb=new TextEncoder;O.Marshall=function(a,b,c,d){for(var e,f=0,h=0;h<a.length;h++)switch(e=b[h],a[h]){case "w":c[d++]=e&255;c[d++]=e>>8&255;c[d++]=e>>16&255;c[d++]=e>>24&255;f+=4;break;case "d":c[d++]=e&255;c[d++]=e>>8&255;c[d++]=e>>16&255;c[d++]=e>>24&255;c[d++]=0;c[d++]=0;c[d++]=0;c[d++]=0;f+=8;break;case "h":c[d++]=
211
+ e&255;c[d++]=e>>8;f+=2;break;case "b":c[d++]=e;f+=1;break;case "s":var l=d,n=0;c[d++]=0;c[d++]=0;f+=2;e=rb.encode(e);f+=e.byteLength;n+=e.byteLength;c.set(e,d);d+=e.byteLength;c[l+0]=n&255;c[l+1]=n>>8&255;break;case "Q":O.Marshall(["b","w","d"],[e.type,e.version,e.path],c,d);d+=13;f+=13;break;default:N.Debug("Marshall: Unknown type="+a[h])}return f};O.Unmarshall=function(a,b,c){let d=c.offset;for(var e=[],f=0;f<a.length;f++)switch(a[f]){case "w":var h=b[d++];h+=b[d++]<<8;h+=b[d++]<<16;h+=b[d++]<<
212
+ 24>>>0;e.push(h);break;case "d":h=b[d++];h+=b[d++]<<8;h+=b[d++]<<16;h+=b[d++]<<24>>>0;d+=4;e.push(h);break;case "h":h=b[d++];e.push(h+(b[d++]<<8));break;case "b":e.push(b[d++]);break;case "s":h=b[d++];h+=b[d++]<<8;var l=b.slice(d,d+h);d+=h;e.push(qb.decode(l));break;case "Q":c.offset=d;h=O.Unmarshall(["b","w","d"],b,c);d=c.offset;e.push({type:h[0],version:h[1],path:h[2]});break;default:N.Debug("Error in Unmarshall: Unknown type="+a[f])}c.offset=d;return e};function sb(a,b){this.bus=b;this.rows=25;
213
+ this.cols=80;this.ports=4;b=[{size_supported:16,notify_offset:0},{size_supported:16,notify_offset:1},{size_supported:16,notify_offset:2},{size_supported:16,notify_offset:3}];for(let c=1;c<this.ports;++c)b.push({size_supported:16,notify_offset:0}),b.push({size_supported:8,notify_offset:1});this.virtio=new xb(a,{name:"virtio-console",pci_id:96,device_id:4163,subsystem_device_id:3,common:{initial_port:47104,queues:b,features:[0,1,32],on_driver_ok:()=>{}},notification:{initial_port:47360,single_handler:!1,
214
+ handlers:[()=>{},c=>{const d=this.virtio.queues[c],e=3<c?c-3>>1:0;for(;d.has_request();){const f=d.pop_request(),h=new Uint8Array(f.length_readable);f.get_next_blob(h);this.bus.send("virtio-console"+e+"-output-bytes",h);this.Ack(c,f)}},c=>{if(2!==c)m(!1,"VirtioConsole Notified for wrong queue: "+c+" (expected queue_id of 2)");else for(c=this.virtio.queues[c];c.count_requests()>c.size-2;)c.pop_request()},c=>{if(3!==c)m(!1,"VirtioConsole Notified for wrong queue: "+c+" (expected queue_id of 3)");else for(var d=
215
+ this.virtio.queues[c];d.has_request();){var e=d.pop_request(),f=new Uint8Array(e.length_readable);e.get_next_blob(f);var h=O.Unmarshall(["w","h","h"],f,{offset:0});f=h[0];h=h[1];this.Ack(c,e);switch(h){case 0:for(e=0;e<this.ports;++e)this.SendEvent(e,1,0);break;case 3:this.Ack(c,e);this.SendEvent(f,4,1);this.SendName(f,"virtio-"+f);this.SendEvent(f,6,1);break;case 6:this.Ack(c,e);0===f&&this.SendWindowSize(f);break;default:m(!1," VirtioConsole received unknown event: "+h[1]);return}}}]},isr_status:{initial_port:46848},
216
+ device_specific:{initial_port:46592,struct:[{bytes:2,name:"cols",read:()=>this.cols,write:()=>{}},{bytes:2,name:"rows",read:()=>this.rows,write:()=>{}},{bytes:4,name:"max_nr_ports",read:()=>this.ports,write:()=>{}},{bytes:4,name:"emerg_wr",read:()=>0,write:()=>{m(!1,"Emergency write!")}}]}});for(let c=0;c<this.ports;++c){const d=0===c?0:2*c+2;this.bus.register("virtio-console"+c+"-input-bytes",function(e){var f=this.virtio.queues[d];f.has_request()&&(f=f.pop_request(),this.Send(d,f,new Uint8Array(e)))},
217
+ this);this.bus.register("virtio-console"+c+"-resize",function(e){0===c&&(this.cols=e[0],this.rows=e[1]);this.virtio.queues[2].is_configured()&&this.virtio.queues[2].has_request()&&this.SendWindowSize(c,e[0],e[1])},this)}}sb.prototype.SendWindowSize=function(a,b,c){c=c||this.rows;b=b||this.cols;const d=this.virtio.queues[2].pop_request(),e=new Uint8Array(12);O.Marshall(["w","h","h","h","h"],[a,5,0,c,b],e,0);this.Send(2,d,e)};sb.prototype.SendName=function(a,b){const c=this.virtio.queues[2].pop_request();
218
+ b=(new TextEncoder).encode(b);const d=new Uint8Array(8+b.length+1);O.Marshall(["w","h","h"],[a,7,1],d,0);for(a=0;a<b.length;++a)d[a+8]=b[a];d[8+b.length]=0;this.Send(2,c,d)};sb.prototype.get_state=function(){const a=[];a[0]=this.virtio;a[1]=this.rows;a[2]=this.cols;a[3]=this.ports;return a};sb.prototype.set_state=function(a){this.virtio.set_state(a[0]);this.rows=a[1];this.cols=a[2];this.ports=a[3]};sb.prototype.reset=function(){this.virtio.reset()};sb.prototype.SendEvent=function(a,b,c){const d=this.virtio.queues[2].pop_request(),
219
+ e=new Uint8Array(8);O.Marshall(["w","h","h"],[a,b,c],e,0);this.Send(2,d,e)};sb.prototype.Send=function(a,b,c){b.set_next_blob(c);this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};sb.prototype.Ack=function(a,b){b.set_next_blob(new Uint8Array(0));this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};function yb(a,b){this.cpu=a;this.bus=b;this.use_mouse=this.enable_mouse_stream=!1;this.have_mouse=!0;this.mouse_clicks=this.mouse_delta_y=this.mouse_delta_x=
220
+ 0;this.have_keyboard=!0;this.next_read_resolution=this.next_read_rate=this.next_handle_scan_code_set=this.next_read_led=this.next_read_sample=this.next_is_mouse_command=this.enable_keyboard_stream=!1;this.kbd_buffer=new oa(1024);this.last_port60_byte=0;this.sample_rate=100;this.mouse_id=this.mouse_detect_state=0;this.mouse_reset_workaround=!1;this.wheel_movement=0;this.resolution=4;this.scaling2=!1;this.last_mouse_packet=-1;this.mouse_buffer=new oa(1024);this.next_byte_is_aux=this.next_byte_is_ready=
221
+ !1;this.bus.register("keyboard-code",function(c){this.kbd_send_code(c)},this);this.bus.register("mouse-click",function(c){this.mouse_send_click(c[0],c[1],c[2])},this);this.bus.register("mouse-delta",function(c){this.mouse_send_delta(c[0],c[1])},this);this.bus.register("mouse-wheel",function(c){this.wheel_movement-=c[0];this.wheel_movement-=2*c[1];this.wheel_movement=Math.min(7,Math.max(-8,this.wheel_movement));this.send_mouse_packet(0,0)},this);this.command_register=5;this.controller_output_port=
222
+ 0;this.read_controller_output_port=this.read_command_register=this.read_output_register=!1;a.io.register_read(96,this,this.port60_read);a.io.register_read(100,this,this.port64_read);a.io.register_write(96,this,this.port60_write);a.io.register_write(100,this,this.port64_write)}yb.prototype.get_state=function(){var a=[];a[0]=this.enable_mouse_stream;a[1]=this.use_mouse;a[2]=this.have_mouse;a[3]=this.mouse_delta_x;a[4]=this.mouse_delta_y;a[5]=this.mouse_clicks;a[6]=this.have_keyboard;a[7]=this.enable_keyboard_stream;
223
+ a[8]=this.next_is_mouse_command;a[9]=this.next_read_sample;a[10]=this.next_read_led;a[11]=this.next_handle_scan_code_set;a[12]=this.next_read_rate;a[13]=this.next_read_resolution;a[15]=this.last_port60_byte;a[16]=this.sample_rate;a[17]=this.resolution;a[18]=this.scaling2;a[20]=this.command_register;a[21]=this.read_output_register;a[22]=this.read_command_register;a[23]=this.controller_output_port;a[24]=this.read_controller_output_port;a[25]=this.mouse_id;a[26]=this.mouse_detect_state;a[27]=this.mouse_reset_workaround;
224
+ return a};yb.prototype.set_state=function(a){this.enable_mouse_stream=a[0];this.use_mouse=a[1];this.have_mouse=a[2];this.mouse_delta_x=a[3];this.mouse_delta_y=a[4];this.mouse_clicks=a[5];this.have_keyboard=a[6];this.enable_keyboard_stream=a[7];this.next_is_mouse_command=a[8];this.next_read_sample=a[9];this.next_read_led=a[10];this.next_handle_scan_code_set=a[11];this.next_read_rate=a[12];this.next_read_resolution=a[13];this.last_port60_byte=a[15];this.sample_rate=a[16];this.resolution=a[17];this.scaling2=
225
+ a[18];this.command_register=a[20];this.read_output_register=a[21];this.read_command_register=a[22];this.controller_output_port=a[23];this.read_controller_output_port=a[24];this.mouse_id=a[25]||0;this.mouse_detect_state=a[26]||0;this.mouse_reset_workaround=a[27]||!1;this.next_byte_is_aux=this.next_byte_is_ready=!1;this.kbd_buffer.clear();this.mouse_buffer.clear();this.bus.send("mouse-enable",this.use_mouse)};yb.prototype.raise_irq=function(){this.next_byte_is_ready||(this.kbd_buffer.length?this.kbd_irq():
226
+ this.mouse_buffer.length&&this.mouse_irq())};yb.prototype.mouse_irq=function(){this.next_byte_is_aux=this.next_byte_is_ready=!0;this.command_register&2&&(D("Mouse irq",64),this.cpu.device_lower_irq(12),this.cpu.device_raise_irq(12))};yb.prototype.kbd_irq=function(){this.next_byte_is_ready=!0;this.next_byte_is_aux=!1;this.command_register&1&&(D("Keyboard irq",64),this.cpu.device_lower_irq(1),this.cpu.device_raise_irq(1))};yb.prototype.kbd_send_code=function(a){this.enable_keyboard_stream&&(D("adding kbd code: "+
227
+ z(a),64),this.kbd_buffer.push(a),this.raise_irq())};yb.prototype.mouse_send_delta=function(a,b){if(this.have_mouse&&this.use_mouse){var c=this.resolution*this.sample_rate/80;this.mouse_delta_x+=a*c;this.mouse_delta_y+=b*c;this.enable_mouse_stream&&(a=this.mouse_delta_x|0,b=this.mouse_delta_y|0,a||b)&&(Date.now(),this.mouse_delta_x-=a,this.mouse_delta_y-=b,this.send_mouse_packet(a,b))}};yb.prototype.mouse_send_click=function(a,b,c){this.have_mouse&&this.use_mouse&&(this.mouse_clicks=a|c<<1|b<<2,this.enable_mouse_stream&&
228
+ this.send_mouse_packet(0,0))};yb.prototype.send_mouse_packet=function(a,b){var c=(0>b)<<5|(0>a)<<4|8|this.mouse_clicks;this.last_mouse_packet=Date.now();this.mouse_buffer.push(c);this.mouse_buffer.push(a);this.mouse_buffer.push(b);4===this.mouse_id?(this.mouse_buffer.push(0|this.wheel_movement&15),this.wheel_movement=0):3===this.mouse_id&&(this.mouse_buffer.push(this.wheel_movement&255),this.wheel_movement=0);this.raise_irq()};yb.prototype.apply_scaling2=function(a){var b=a>>31;switch(Math.abs(a)){case 0:case 1:case 3:return a;
229
+ case 2:return b;case 4:return 6*b;case 5:return 9*b;default:return a<<1}};yb.prototype.port60_read=function(){this.next_byte_is_ready=!1;if(!this.kbd_buffer.length&&!this.mouse_buffer.length)return D("Port 60 read: Empty",64),this.last_port60_byte;this.next_byte_is_aux?(this.cpu.device_lower_irq(12),this.last_port60_byte=this.mouse_buffer.shift(),D("Port 60 read (mouse): "+z(this.last_port60_byte),64)):(this.cpu.device_lower_irq(1),this.last_port60_byte=this.kbd_buffer.shift(),D("Port 60 read (kbd) : "+
230
+ z(this.last_port60_byte),64));(this.kbd_buffer.length||this.mouse_buffer.length)&&this.raise_irq();return this.last_port60_byte};yb.prototype.port64_read=function(){var a=16;this.next_byte_is_ready&&(a|=1);this.next_byte_is_aux&&(a|=32);D("port 64 read: "+z(a),64);return a};yb.prototype.port60_write=function(a){D("port 60 write: "+z(a),64);if(this.read_command_register)this.command_register=a,this.read_command_register=!1,D("Keyboard command register = "+z(this.command_register),64);else if(this.read_output_register)this.read_output_register=
231
+ !1,this.mouse_buffer.clear(),this.mouse_buffer.push(a),this.mouse_irq();else if(this.next_read_sample){this.next_read_sample=!1;this.mouse_buffer.clear();this.mouse_buffer.push(250);this.sample_rate=a;switch(this.mouse_detect_state){case -1:60===a?(this.mouse_reset_workaround=!0,this.mouse_detect_state=0):(this.mouse_reset_workaround=!1,this.mouse_detect_state=200===a?1:0);break;case 0:200===a&&(this.mouse_detect_state=1);break;case 1:this.mouse_detect_state=100===a?2:200===a?3:0;break;case 2:80===
232
+ a&&(this.mouse_id=3);this.mouse_detect_state=-1;break;case 3:80===a&&(this.mouse_id=4),this.mouse_detect_state=-1}D("mouse sample rate: "+z(a)+", mouse id: "+z(this.mouse_id),64);this.sample_rate||(D("invalid sample rate, reset to 100",64),this.sample_rate=100);this.mouse_irq()}else if(this.next_read_resolution)this.next_read_resolution=!1,this.mouse_buffer.clear(),this.mouse_buffer.push(250),3<a?(this.resolution=4,D("invalid resolution, resetting to 4",64)):(this.resolution=1<<a,D("resolution: "+
233
+ this.resolution,64)),this.mouse_irq();else if(this.next_read_led)this.next_read_led=!1,this.kbd_buffer.push(250),this.kbd_irq();else if(this.next_handle_scan_code_set)this.next_handle_scan_code_set=!1,this.kbd_buffer.push(250),this.kbd_irq(),a||this.kbd_buffer.push(1);else if(this.next_read_rate)this.next_read_rate=!1,this.kbd_buffer.push(250),this.kbd_irq();else if(this.next_is_mouse_command){if(this.next_is_mouse_command=!1,D("Port 60 data register write: "+z(a),64),this.have_mouse){this.kbd_buffer.clear();
234
+ this.mouse_buffer.clear();this.mouse_buffer.push(250);switch(a){case 230:D("Scaling 1:1",64);this.scaling2=!1;break;case 231:D("Scaling 2:1",64);this.scaling2=!0;break;case 232:this.next_read_resolution=!0;break;case 233:this.send_mouse_packet(0,0);break;case 235:D("unimplemented request single packet",64);this.send_mouse_packet(0,0);break;case 242:D("required id: "+z(this.mouse_id),64);this.mouse_buffer.push(this.mouse_id);this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;this.raise_irq();
235
+ break;case 243:this.next_read_sample=!0;break;case 244:this.use_mouse=this.enable_mouse_stream=!0;this.bus.send("mouse-enable",!0);this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;break;case 245:this.enable_mouse_stream=!1;break;case 246:this.enable_mouse_stream=!1;this.sample_rate=100;this.scaling2=!1;this.resolution=4;break;case 255:D("Mouse reset",64);this.mouse_buffer.push(170);this.mouse_buffer.push(0);this.use_mouse=!0;this.bus.send("mouse-enable",!0);this.enable_mouse_stream=!1;this.sample_rate=
236
+ 100;this.scaling2=!1;this.resolution=4;this.mouse_reset_workaround||(this.mouse_id=0);this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;break;default:D("Unimplemented mouse command: "+z(a),64)}this.mouse_irq()}}else if(this.read_controller_output_port)this.read_controller_output_port=!1,this.controller_output_port=a;else{D("Port 60 data register write: "+z(a),64);this.mouse_buffer.clear();this.kbd_buffer.clear();this.kbd_buffer.push(250);switch(a){case 237:this.next_read_led=!0;break;case 240:this.next_handle_scan_code_set=
237
+ !0;break;case 242:this.kbd_buffer.push(171);this.kbd_buffer.push(131);break;case 243:this.next_read_rate=!0;break;case 244:D("kbd enable scanning",64);this.enable_keyboard_stream=!0;break;case 245:D("kbd disable scanning",64);this.enable_keyboard_stream=!1;break;case 246:break;case 255:this.kbd_buffer.clear();this.kbd_buffer.push(250);this.kbd_buffer.push(170);this.kbd_buffer.push(0);break;default:D("Unimplemented keyboard command: "+z(a),64)}this.kbd_irq()}};yb.prototype.port64_write=function(a){D("port 64 write: "+
238
+ z(a),64);switch(a){case 32:this.kbd_buffer.clear();this.mouse_buffer.clear();this.kbd_buffer.push(this.command_register);this.kbd_irq();break;case 96:this.read_command_register=!0;break;case 209:this.read_controller_output_port=!0;break;case 211:this.read_output_register=!0;break;case 212:this.next_is_mouse_command=!0;break;case 167:D("Disable second port",64);this.command_register|=32;break;case 168:D("Enable second port",64);this.command_register&=-33;break;case 169:this.kbd_buffer.clear();this.mouse_buffer.clear();
239
+ this.kbd_buffer.push(0);this.kbd_irq();break;case 170:this.kbd_buffer.clear();this.mouse_buffer.clear();this.kbd_buffer.push(85);this.kbd_irq();break;case 171:this.kbd_buffer.clear();this.mouse_buffer.clear();this.kbd_buffer.push(0);this.kbd_irq();break;case 173:D("Disable Keyboard",64);this.command_register|=16;break;case 174:D("Enable Keyboard",64);this.command_register&=-17;break;case 254:D("CPU reboot via PS2");this.cpu.reboot_internal();break;default:D("port 64: Unimplemented command byte: "+
240
+ z(a),64)}};const zb=DataView.prototype,Ab={size:1,get:zb.getUint8,set:zb.setUint8},Bb={size:2,get:zb.getUint16,set:zb.setUint16},P={size:4,get:zb.getUint32,set:zb.setUint32},Db=Cb([{magic:P},{class:Ab},{data:Ab},{version0:Ab},{osabi:Ab},{abiversion:Ab},{pad0:function(a){return{size:a,get:()=>-1}}(7)},{type:Bb},{machine:Bb},{version1:P},{entry:P},{phoff:P},{shoff:P},{flags:P},{ehsize:Bb},{phentsize:Bb},{phnum:Bb},{shentsize:Bb},{shnum:Bb},{shstrndx:Bb}]);console.assert(52===Db.reduce((a,b)=>a+b.size,
241
+ 0));const Nb=Cb([{type:P},{offset:P},{vaddr:P},{paddr:P},{filesz:P},{memsz:P},{flags:P},{align:P}]);console.assert(32===Nb.reduce((a,b)=>a+b.size,0));const Ob=Cb([{name:P},{type:P},{flags:P},{addr:P},{offset:P},{size:P},{link:P},{info:P},{addralign:P},{entsize:P}]);console.assert(40===Ob.reduce((a,b)=>a+b.size,0));function Cb(a){return a.map(function(b){var c=Object.keys(b);console.assert(1===c.length);c=c[0];b=b[c];console.assert(0<b.size);return{name:c,type:b,size:b.size,get:b.get,set:b.set}})}
242
+ function Pb(a,b){const c={};let d=0;for(const e of b)b=e.get.call(a,d,!0),console.assert(void 0===c[e.name]),c[e.name]=b,d+=e.size;return[c,d]}function Qb(a,b,c){const d=[];let e=0;for(var f=0;f<c;f++){const [h,l]=Pb(new DataView(a.buffer,a.byteOffset+e,void 0),b);d.push(h);e+=l}return[d,e]}function Rb(a){this.cpu=a;this.cmos_index=0;this.cmos_data=new Uint8Array(128);this.last_update=this.rtc_time=Date.now();this.next_interrupt_alarm=this.next_interrupt=0;this.periodic_interrupt=!1;this.periodic_interrupt_time=
243
+ .9765625;this.cmos_a=38;this.cmos_b=2;this.nmi_disabled=this.cmos_c=0;a.io.register_write(112,this,function(b){this.cmos_index=b&127;this.nmi_disabled=b>>7});a.io.register_write(113,this,this.cmos_port_write);a.io.register_read(113,this,this.cmos_port_read)}Rb.prototype.get_state=function(){var a=[];a[0]=this.cmos_index;a[1]=this.cmos_data;a[2]=this.rtc_time;a[3]=this.last_update;a[4]=this.next_interrupt;a[5]=this.next_interrupt_alarm;a[6]=this.periodic_interrupt;a[7]=this.periodic_interrupt_time;
244
+ a[8]=this.cmos_a;a[9]=this.cmos_b;a[10]=this.cmos_c;a[11]=this.nmi_disabled;return a};Rb.prototype.set_state=function(a){this.cmos_index=a[0];this.cmos_data=a[1];this.rtc_time=a[2];this.last_update=a[3];this.next_interrupt=a[4];this.next_interrupt_alarm=a[5];this.periodic_interrupt=a[6];this.periodic_interrupt_time=a[7];this.cmos_a=a[8];this.cmos_b=a[9];this.cmos_c=a[10];this.nmi_disabled=a[11]};Rb.prototype.timer=function(a){a=Date.now();this.rtc_time+=a-this.last_update;this.last_update=a;this.periodic_interrupt&&
245
+ this.next_interrupt<a?(this.cpu.device_raise_irq(8),this.cmos_c|=192,this.next_interrupt+=this.periodic_interrupt_time*Math.ceil((a-this.next_interrupt)/this.periodic_interrupt_time)):this.next_interrupt_alarm&&this.next_interrupt_alarm<a&&(this.cpu.device_raise_irq(8),this.cmos_c|=160,this.next_interrupt_alarm=0);let b=100;this.periodic_interrupt&&this.next_interrupt&&(b=Math.min(b,Math.max(0,this.next_interrupt-a)));this.next_interrupt_alarm&&(b=Math.min(b,Math.max(0,this.next_interrupt_alarm-a)));
246
+ return b};Rb.prototype.bcd_pack=function(a){for(var b=0,c=0,d;a;)d=a%10,c|=d<<4*b,b++,a=(a-d)/10;return c};Rb.prototype.bcd_unpack=function(a){const b=a&15,c=a>>4&15;m(256>a);m(10>b);m(10>c);return b+10*c};Rb.prototype.encode_time=function(a){return this.cmos_b&4?a:this.bcd_pack(a)};Rb.prototype.decode_time=function(a){return this.cmos_b&4?a:this.bcd_unpack(a)};Rb.prototype.cmos_port_read=function(){var a=this.cmos_index;switch(a){case 0:return D("read second: "+z(this.encode_time((new Date(this.rtc_time)).getUTCSeconds())),
247
+ 65536),this.encode_time((new Date(this.rtc_time)).getUTCSeconds());case 2:return D("read minute: "+z(this.encode_time((new Date(this.rtc_time)).getUTCMinutes())),65536),this.encode_time((new Date(this.rtc_time)).getUTCMinutes());case 4:return D("read hour: "+z(this.encode_time((new Date(this.rtc_time)).getUTCHours())),65536),this.encode_time((new Date(this.rtc_time)).getUTCHours());case 6:return D("read day: "+z(this.encode_time((new Date(this.rtc_time)).getUTCDay()+1)),65536),this.encode_time((new Date(this.rtc_time)).getUTCDay()+
248
+ 1);case 7:return D("read day of month: "+z(this.encode_time((new Date(this.rtc_time)).getUTCDate())),65536),this.encode_time((new Date(this.rtc_time)).getUTCDate());case 8:return D("read month: "+z(this.encode_time((new Date(this.rtc_time)).getUTCMonth()+1)),65536),this.encode_time((new Date(this.rtc_time)).getUTCMonth()+1);case 9:return D("read year: "+z(this.encode_time((new Date(this.rtc_time)).getUTCFullYear()%100)),65536),this.encode_time((new Date(this.rtc_time)).getUTCFullYear()%100);case 10:return 999<=
249
+ J.microtick()%1E3?this.cmos_a|128:this.cmos_a;case 11:return this.cmos_b;case 12:return this.cpu.device_lower_irq(8),D("cmos reg C read",65536),a=this.cmos_c,this.cmos_c&=-241,a;case 13:return 0;case 50:case 55:return D("read century: "+z(this.encode_time((new Date(this.rtc_time)).getUTCFullYear()/100|0)),65536),this.encode_time((new Date(this.rtc_time)).getUTCFullYear()/100|0);default:return D("cmos read from index "+z(a),65536),this.cmos_data[this.cmos_index]}};Rb.prototype.cmos_port_write=function(a){switch(this.cmos_index){case 10:this.cmos_a=
250
+ a&127;this.periodic_interrupt_time=1E3/(32768>>(this.cmos_a&15)-1);D("Periodic interrupt, a="+z(this.cmos_a,2)+" t="+this.periodic_interrupt_time,65536);break;case 11:this.cmos_b=a;this.cmos_b&64&&(this.next_interrupt=Date.now());if(this.cmos_b&32){a=new Date;const b=this.decode_time(this.cmos_data[1]),c=this.decode_time(this.cmos_data[3]),d=this.decode_time(this.cmos_data[5]),e=new Date(Date.UTC(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),d,c,b));D("RTC alarm scheduled for "+e+" hh:mm:ss="+
251
+ d+":"+c+":"+b+" ms_from_now="+(e-a),65536);this.next_interrupt_alarm=+e}this.cmos_b&16&&D("Unimplemented: updated interrupt",65536);D("cmos b="+z(this.cmos_b,2),65536);break;case 1:case 3:case 5:this.cmos_write(this.cmos_index,a);break;default:D("cmos write index "+z(this.cmos_index)+": "+z(a),65536)}this.periodic_interrupt=64===(this.cmos_b&64)&&0<(this.cmos_a&15)};Rb.prototype.cmos_read=function(a){m(128>a);return this.cmos_data[a]};Rb.prototype.cmos_write=function(a,b){D("cmos "+z(a)+" <- "+z(b),
252
+ 65536);m(128>a);this.cmos_data[a]=b};function Q(a,b,c){this.io=a.io;this.cpu=a;this.dma=a.devices.dma;this.bytes_expecting=0;this.receiving_command=new Uint8Array(10);this.receiving_index=0;this.next_command=null;this.response_data=new Uint8Array(10);this.last_head=this.last_cylinder=this.drive=this.status_reg2=this.status_reg1=this.status_reg0=this.response_length=this.response_index=0;this.last_sector=1;this.dir=this.dor=0;this.fdb_image=this.fda_image=null;b?this.set_fda(b):(this.eject_fda(),this.cpu.devices.rtc.cmos_write(16,
253
+ 64));m(!c,"FDB not supported");this.io.register_read(1008,this,this.port3F0_read);this.io.register_read(1010,this,this.port3F2_read);this.io.register_read(1012,this,this.port3F4_read);this.io.register_read(1013,this,this.port3F5_read);this.io.register_read(1015,this,this.port3F7_read);this.io.register_write(1010,this,this.port3F2_write);this.io.register_write(1012,this,this.port3F4_write);this.io.register_write(1013,this,this.port3F5_write)}Q.prototype.eject_fda=function(){this.fda_image=null;this.number_of_cylinders=
254
+ this.number_of_heads=this.sectors_per_track=0;this.dir=128};Q.prototype.set_fda=function(a){var b={[163840]:{type:1,tracks:40,sectors:8,heads:1},[184320]:{type:1,tracks:40,sectors:9,heads:1},[204800]:{type:1,tracks:40,sectors:10,heads:1},[327680]:{type:1,tracks:40,sectors:8,heads:2},[368640]:{type:1,tracks:40,sectors:9,heads:2},[409600]:{type:1,tracks:40,sectors:10,heads:2},[737280]:{type:3,tracks:80,sectors:9,heads:2},[1228800]:{type:2,tracks:80,sectors:15,heads:2},[1474560]:{type:4,tracks:80,sectors:18,
255
+ heads:2},[1763328]:{type:5,tracks:82,sectors:21,heads:2},[2949120]:{type:5,tracks:80,sectors:36,heads:2},512:{type:1,tracks:1,sectors:1,heads:1}};let c=a.byteLength,d=b[c];d||(c=1474560<a.byteLength?2949120:1474560,d=b[c],m(a.buffer&&a.buffer instanceof ArrayBuffer),b=new Uint8Array(c),b.set(new Uint8Array(a.buffer)),a=new Aa(b.buffer),D("Warning: Unkown floppy size: "+a.byteLength+", assuming "+c));this.sectors_per_track=d.sectors;this.number_of_heads=d.heads;this.number_of_cylinders=d.tracks;this.fda_image=
256
+ a;this.dir=128;this.cpu.devices.rtc.cmos_write(16,d.type<<4)};Q.prototype.get_state=function(){var a=[];a[0]=this.bytes_expecting;a[1]=this.receiving_command;a[2]=this.receiving_index;a[4]=this.response_data;a[5]=this.response_index;a[6]=this.response_length;a[8]=this.status_reg0;a[9]=this.status_reg1;a[10]=this.status_reg2;a[11]=this.drive;a[12]=this.last_cylinder;a[13]=this.last_head;a[14]=this.last_sector;a[15]=this.dor;a[16]=this.sectors_per_track;a[17]=this.number_of_heads;a[18]=this.number_of_cylinders;
257
+ return a};Q.prototype.set_state=function(a){this.bytes_expecting=a[0];this.receiving_command=a[1];this.receiving_index=a[2];this.next_command=a[3];this.response_data=a[4];this.response_index=a[5];this.response_length=a[6];this.status_reg0=a[8];this.status_reg1=a[9];this.status_reg2=a[10];this.drive=a[11];this.last_cylinder=a[12];this.last_head=a[13];this.last_sector=a[14];this.dor=a[15];this.sectors_per_track=a[16];this.number_of_heads=a[17];this.number_of_cylinders=a[18]};Q.prototype.port3F0_read=
258
+ function(){D("3F0 read",8192);return 0};Q.prototype.port3F4_read=function(){D("3F4 read",8192);var a=128;this.response_index<this.response_length&&(a|=80);0===(this.dor&8)&&(a|=32);return a};Q.prototype.port3F7_read=function(){D("3F7 read",8192);return this.dir};Q.prototype.port3F5_read=function(){if(this.response_index<this.response_length)return D("3F5 read: "+this.response_data[this.response_index],8192),this.cpu.device_lower_irq(6),this.response_data[this.response_index++];D("3F5 read, empty",
259
+ 8192);return 255};Q.prototype.port3F4_write=function(a){D("3F4/data rate write: "+z(a),8192);a&128&&(D("dsr reset",8192),this.status_reg0=192,this.cpu.device_raise_irq(6))};Q.prototype.port3F5_write=function(a){D("3F5 write "+z(a),8192);if(0<this.bytes_expecting){if(this.receiving_command[this.receiving_index++]=a,this.bytes_expecting--,0===this.bytes_expecting){a="3F5 command received: ";for(var b=0;b<this.receiving_index;b++)a+=z(this.receiving_command[b])+" ";D(a,8192);this.next_command.call(this,
260
+ this.receiving_command)}}else{switch(a){case 3:this.next_command=this.fix_drive_data;this.bytes_expecting=2;break;case 19:this.next_command=this.configure;this.bytes_expecting=3;break;case 4:this.next_command=this.check_drive_status;this.bytes_expecting=1;break;case 5:case 69:case 197:this.next_command=function(c){this.do_sector(!0,c)};this.bytes_expecting=8;break;case 6:case 70:case 198:case 230:this.next_command=function(c){this.do_sector(!1,c)};this.bytes_expecting=8;break;case 7:this.next_command=
261
+ this.calibrate;this.bytes_expecting=1;break;case 8:this.check_interrupt_status();break;case 74:this.next_command=this.read_sector_id;this.bytes_expecting=1;break;case 15:this.bytes_expecting=2;this.next_command=this.seek;break;case 14:case 16:D(14===a?"dump registers":"determine controller version",8192);this.status_reg0=128;this.response_data[0]=this.status_reg0;this.response_index=0;this.response_length=1;this.bytes_expecting=0;break;default:m(!1,"Unimplemented floppy command call "+z(a))}this.receiving_index=
262
+ 0}};Q.prototype.port3F2_read=function(){D("read 3F2: DOR",8192);return this.dor};Q.prototype.port3F2_write=function(a){4===(a&4)&&0===(this.dor&4)&&(this.status_reg0=192,this.cpu.device_raise_irq(6));D("start motors: "+z(a>>4),8192);D("enable dma/irq: "+!!(a&8),8192);D("reset fdc: "+!!(a&4),8192);D("drive select: "+(a&3),8192);0!==(a&3)&&D("guest: fdb not implemented",8192);D("DOR = "+z(a),8192);this.dor=a};Q.prototype.check_drive_status=function(){D("check drive status",8192);this.status_reg1=this.fda_image?
263
+ 0:5;this.response_index=0;this.response_length=1;this.response_data[0]=0};Q.prototype.seek=function(a){D("seek",8192);if(0!==(a[0]&3))D("seek on fdb",8192);else{var b=a[1];a=a[0]>>2&1;b!==this.last_cylinder&&(this.dir=0);this.status_reg1=this.fda_image?0:5;this.status_reg0=32;this.last_cylinder=b;this.last_head=a}this.raise_irq()};Q.prototype.calibrate=function(a){D("floppy calibrate",8192);this.seek([a[0],0])};Q.prototype.check_interrupt_status=function(){D("floppy check interrupt status",8192);
264
+ this.response_index=0;this.response_length=2;this.response_data[0]=this.status_reg0;this.response_data[1]=this.last_cylinder};Q.prototype.do_sector=function(a,b){var c=b[2],d=b[1],e=b[3],f=128<<b[4],h=b[5]-b[3]+1,l=((c+this.number_of_heads*d)*this.sectors_per_track+e-1)*f;D("Floppy "+(a?"Write":"Read"),8192);D("from "+z(l)+" length "+z(h*f),8192);D(d+" / "+c+" / "+e,8192);b[4]||D("FDC: sector count is zero, use data length instead",8192);this.fda_image?(this.status_reg1=0,a?this.dma.do_write(this.fda_image,
265
+ l,h*f,2,this.done.bind(this,b,d,c,e)):this.dma.do_read(this.fda_image,l,h*f,2,this.done.bind(this,b,d,c,e))):this.status_reg1=5};Q.prototype.done=function(a,b,c,d,e){e?D("XXX: Unhandled floppy error",8192):(d++,d>this.sectors_per_track&&(d=1,c++,c>=this.number_of_heads&&(c=0,b++)),b!==this.last_cylinder&&(this.dir=0),this.status_reg0=32,this.last_cylinder=b,this.last_head=c,this.last_sector=d,this.response_index=0,this.response_length=7,this.response_data[0]=c<<2|32,this.response_data[1]=0,this.response_data[2]=
266
+ 0,this.response_data[3]=b,this.response_data[4]=c,this.response_data[5]=d,this.response_data[6]=a[4],this.raise_irq())};Q.prototype.fix_drive_data=function(a){D("floppy fix drive data "+a.slice(0,this.bytes_expecting),8192)};Q.prototype.configure=function(a){D("floppy configure "+a.slice(0,this.bytes_expecting),8192)};Q.prototype.read_sector_id=function(a){D("floppy read sector id "+a,8192);this.response_index=0;this.response_length=7;this.response_data[0]=0;this.response_data[1]=0;this.response_data[2]=
267
+ 0;this.response_data[3]=0;this.response_data[4]=0;this.response_data[5]=0;this.response_data[6]=0;this.raise_irq()};Q.prototype.raise_irq=function(){this.dor&8&&this.cpu.device_raise_irq(6)};function Sb(a,b,c,d,e,f){this.master=new R(this,a,b,d,e,0,f);this.slave=new R(this,a,c,!1,e,1,f);this.current_interface=this.master;this.cpu=a;0===e?(this.ata_port=496,this.irq=14,this.pci_id=240):1===e?(this.ata_port=368,this.irq=15,this.pci_id=248):m(!1,"IDE device with nr "+e+" ignored",32768);this.ata_port_high=
268
+ this.ata_port|516;this.master_port=46080;this.pci_space=[134,128,16,112,5,0,160,2,0,128,1,1,0,0,0,0,this.ata_port&255|1,this.ata_port>>8,0,0,this.ata_port_high&255|1,this.ata_port_high>>8,0,0,0,0,0,0,0,0,0,0,this.master_port&255|1,this.master_port>>8,0,0,0,0,0,0,0,0,0,0,67,16,212,130,0,0,0,0,0,0,0,0,0,0,0,0,this.irq,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
269
+ 0,0,0,0,0,0,0];this.pci_bars=[{size:8},{size:4},void 0,void 0,{size:16}];this.name="ide"+e;this.device_control=2;a.io.register_read(this.ata_port|7,this,function(){D("lower irq",32768);this.cpu.device_lower_irq(this.irq);return this.read_status()});a.io.register_read(this.ata_port_high|2,this,this.read_status);a.io.register_write(this.ata_port_high|2,this,this.write_control);a.io.register_read(this.ata_port|0,this,function(){return this.current_interface.read_data(1)},function(){return this.current_interface.read_data(2)},
270
+ function(){return this.current_interface.read_data(4)});a.io.register_read(this.ata_port|1,this,function(){D("Read error: "+z(this.current_interface.error&255)+" slave="+(this.current_interface===this.slave),32768);return this.current_interface.error&255});a.io.register_read(this.ata_port|2,this,function(){D("Read bytecount: "+z(this.current_interface.bytecount&255),32768);return this.current_interface.bytecount&255});a.io.register_read(this.ata_port|3,this,function(){D("Read sector: "+z(this.current_interface.sector&
271
+ 255),32768);return this.current_interface.sector&255});a.io.register_read(this.ata_port|4,this,function(){D("Read 1F4: "+z(this.current_interface.cylinder_low&255),32768);return this.current_interface.cylinder_low&255});a.io.register_read(this.ata_port|5,this,function(){D("Read 1F5: "+z(this.current_interface.cylinder_high&255),32768);return this.current_interface.cylinder_high&255});a.io.register_read(this.ata_port|6,this,function(){D("Read 1F6",32768);return this.current_interface.drive_head&255});
272
+ a.io.register_write(this.ata_port|0,this,function(h){this.current_interface.write_data_port8(h)},function(h){this.current_interface.write_data_port16(h)},function(h){this.current_interface.write_data_port32(h)});a.io.register_write(this.ata_port|1,this,function(h){D("1F1/lba_count: "+z(h),32768);this.master.lba_count=(this.master.lba_count<<8|h)&65535;this.slave.lba_count=(this.slave.lba_count<<8|h)&65535});a.io.register_write(this.ata_port|2,this,function(h){D("1F2/bytecount: "+z(h),32768);this.master.bytecount=
273
+ (this.master.bytecount<<8|h)&65535;this.slave.bytecount=(this.slave.bytecount<<8|h)&65535});a.io.register_write(this.ata_port|3,this,function(h){D("1F3/sector: "+z(h),32768);this.master.sector=(this.master.sector<<8|h)&65535;this.slave.sector=(this.slave.sector<<8|h)&65535});a.io.register_write(this.ata_port|4,this,function(h){D("1F4/sector low: "+z(h),32768);this.master.cylinder_low=(this.master.cylinder_low<<8|h)&65535;this.slave.cylinder_low=(this.slave.cylinder_low<<8|h)&65535});a.io.register_write(this.ata_port|
274
+ 5,this,function(h){D("1F5/sector high: "+z(h),32768);this.master.cylinder_high=(this.master.cylinder_high<<8|h)&65535;this.slave.cylinder_high=(this.slave.cylinder_high<<8|h)&65535});a.io.register_write(this.ata_port|6,this,function(h){var l=h&16;D("1F6/drive: "+z(h,2),32768);l?(D("Slave",32768),this.current_interface=this.slave):this.current_interface=this.master;this.master.drive_head=h;this.slave.drive_head=h;this.master.is_lba=this.slave.is_lba=h>>6&1;this.master.head=this.slave.head=h&15});this.dma_command=
275
+ this.dma_status=this.prdt_addr=0;a.io.register_write(this.ata_port|7,this,function(h){D("lower irq",32768);this.cpu.device_lower_irq(this.irq);this.current_interface.ata_command(h)});a.io.register_read(this.master_port|4,this,void 0,void 0,this.dma_read_addr);a.io.register_write(this.master_port|4,this,void 0,void 0,this.dma_set_addr);a.io.register_read(this.master_port,this,this.dma_read_command8,void 0,this.dma_read_command);a.io.register_write(this.master_port,this,this.dma_write_command8,void 0,
276
+ this.dma_write_command);a.io.register_read(this.master_port|2,this,this.dma_read_status);a.io.register_write(this.master_port|2,this,this.dma_write_status);a.io.register_read(this.master_port|8,this,function(){D("DMA read 0x8",32768);return 0});a.io.register_read(this.master_port|10,this,function(){D("DMA read 0xA",32768);return 0});a.devices.pci.register_device(this);Object.seal(this)}Sb.prototype.read_status=function(){if(this.current_interface.buffer){var a=this.current_interface.status;D("ATA read status: "+
277
+ z(a,2),32768);return a}return 0};Sb.prototype.write_control=function(a){D("set device control: "+z(a,2)+" interrupts "+(a&2?"disabled":"enabled"),32768);a&4&&(D("Reset via control port",32768),this.cpu.device_lower_irq(this.irq),this.master.device_reset(),this.slave.device_reset());this.device_control=a};Sb.prototype.dma_read_addr=function(){D("dma get address: "+z(this.prdt_addr,8),32768);return this.prdt_addr};Sb.prototype.dma_set_addr=function(a){D("dma set address: "+z(a,8),32768);this.prdt_addr=
278
+ a};Sb.prototype.dma_read_status=function(){D("DMA read status: "+z(this.dma_status),32768);return this.dma_status};Sb.prototype.dma_write_status=function(a){D("DMA set status: "+z(a),32768);this.dma_status&=~(a&6)};Sb.prototype.dma_read_command=function(){return this.dma_read_command8()|this.dma_read_status()<<16};Sb.prototype.dma_read_command8=function(){D("DMA read command: "+z(this.dma_command),32768);return this.dma_command};Sb.prototype.dma_write_command=function(a){D("DMA write command: "+z(a),
279
+ 32768);this.dma_write_command8(a&255);this.dma_write_status(a>>16&255)};Sb.prototype.dma_write_command8=function(a){D("DMA write command8: "+z(a),32768);const b=this.dma_command;this.dma_command=a&9;if((b&1)!==(a&1))if(0===(a&1))this.dma_status&=-2;else switch(this.dma_status|=1,this.current_interface.current_command){case 37:case 200:this.current_interface.do_ata_read_sectors_dma();break;case 202:case 53:this.current_interface.do_ata_write_sectors_dma();break;case 160:this.current_interface.do_atapi_dma();
280
+ break;default:D("Spurious dma command write, current command: "+z(this.current_interface.current_command),32768),m(!1)}};Sb.prototype.push_irq=function(){0===(this.device_control&2)&&(D("push irq",32768),this.dma_status|=4,this.cpu.device_raise_irq(this.irq))};Sb.prototype.get_state=function(){var a=[];a[0]=this.master;a[1]=this.slave;a[2]=this.ata_port;a[3]=this.irq;a[4]=this.pci_id;a[5]=this.ata_port_high;a[6]=this.master_port;a[7]=this.name;a[8]=this.device_control;a[9]=this.prdt_addr;a[10]=this.dma_status;
281
+ a[11]=this.current_interface===this.master;a[12]=this.dma_command;return a};Sb.prototype.set_state=function(a){this.master.set_state(a[0]);this.slave.set_state(a[1]);this.ata_port=a[2];this.irq=a[3];this.pci_id=a[4];this.ata_port_high=a[5];this.master_port=a[6];this.name=a[7];this.device_control=a[8];this.prdt_addr=a[9];this.dma_status=a[10];this.current_interface=a[11]?this.master:this.slave;this.dma_command=a[12]};function R(a,b,c,d,e,f,h){this.device=a;this.bus=h;this.nr=e;this.cpu=b;this.buffer=
282
+ c;this.sector_size=d?2048:512;this.is_atapi=d;this.cylinder_count=this.sectors_per_track=this.head_count=this.sector_count=0;this.buffer&&(this.sector_count=this.buffer.byteLength/this.sector_size,this.sector_count!==(this.sector_count|0)&&(D("Warning: Disk size not aligned with sector size",32768),this.sector_count=Math.ceil(this.sector_count)),d?(this.head_count=1,this.sectors_per_track=0):(this.head_count=16,this.sectors_per_track=63),this.cylinder_count=this.sector_count/this.head_count/this.sectors_per_track,
283
+ this.cylinder_count!==(this.cylinder_count|0)&&(D("Warning: Rounding up cylinder count. Choose different head number",32768),this.cylinder_count=Math.floor(this.cylinder_count)),a=b.devices.rtc,a.cmos_write(57,a.cmos_read(57)|1<<4*this.nr),a.cmos_write(18,a.cmos_read(18)&15|240),a.cmos_write(27,this.cylinder_count&255),a.cmos_write(28,this.cylinder_count>>8&255),a.cmos_write(29,this.head_count&255),a.cmos_write(30,255),a.cmos_write(31,255),a.cmos_write(32,200),a.cmos_write(33,this.cylinder_count&
102
284
  255),a.cmos_write(34,this.cylinder_count>>8&255),a.cmos_write(35,this.sectors_per_track&255));this.buffer=c;this.drive_head=this.head=this.cylinder_high=this.cylinder_low=this.lba_count=this.sector=this.bytecount=this.is_lba=0;this.status=80;this.sectors_per_drq=128;this.data_pointer=this.error=0;this.data=new Uint8Array(65536);this.data16=new Uint16Array(this.data.buffer);this.data32=new Int32Array(this.data.buffer);this.data_end=this.data_length=0;this.current_atapi_command=this.current_command=
103
- -1;this.last_io_id=this.write_dest=0;this.in_progress_io_ids=new Set;this.cancelled_io_ids=new Set;Object.seal(this)}K.prototype.device_reset=function(){this.is_atapi?(this.status=0,this.sector=this.error=this.bytecount=1,this.cylinder_low=20,this.cylinder_high=235):(this.status=81,this.sector=this.error=this.bytecount=1,this.cylinder_high=this.cylinder_low=0);this.cancel_io_operations()};K.prototype.push_irq=function(){this.device.push_irq()};K.prototype.ata_command=function(a){E("ATA Command: "+
104
- B(a)+" slave="+(this.drive_head>>4&1),32768);if(this.buffer)switch(this.current_command=a,this.error=0,a){case 8:E("ATA device reset",32768);this.data_length=this.data_end=this.data_pointer=0;this.device_reset();this.push_irq();break;case 16:this.status=80;this.cylinder_low=0;this.push_irq();break;case 248:this.status=80;a=this.sector_count-1;this.sector=a&255;this.cylinder_low=a>>8&255;this.cylinder_high=a>>16&255;this.drive_head=this.drive_head&240|a>>24&15;this.push_irq();break;case 39:this.status=
285
+ -1;this.last_io_id=this.write_dest=0;this.in_progress_io_ids=new Set;this.cancelled_io_ids=new Set;Object.seal(this)}R.prototype.device_reset=function(){this.is_atapi?(this.status=0,this.sector=this.error=this.bytecount=1,this.cylinder_low=20,this.cylinder_high=235):(this.status=81,this.sector=this.error=this.bytecount=1,this.cylinder_high=this.cylinder_low=0);this.cancel_io_operations()};R.prototype.push_irq=function(){this.device.push_irq()};R.prototype.ata_command=function(a){D("ATA Command: "+
286
+ z(a)+" slave="+(this.drive_head>>4&1),32768);if(this.buffer)switch(this.current_command=a,this.error=0,a){case 8:D("ATA device reset",32768);this.data_length=this.data_end=this.data_pointer=0;this.device_reset();this.push_irq();break;case 16:this.status=80;this.cylinder_low=0;this.push_irq();break;case 248:this.status=80;a=this.sector_count-1;this.sector=a&255;this.cylinder_low=a>>8&255;this.cylinder_high=a>>16&255;this.drive_head=this.drive_head&240|a>>24&15;this.push_irq();break;case 39:this.status=
105
287
  80;a=this.sector_count-1;this.sector=a&255;this.cylinder_low=a>>8&255;this.cylinder_high=a>>16&255;this.sector|=a>>24<<8&65280;this.push_irq();break;case 32:case 36:case 41:case 196:this.ata_read_sectors(a);break;case 48:case 52:case 57:case 197:this.ata_write_sectors(a);break;case 144:this.push_irq();this.error=257;this.status=80;break;case 145:this.status=80;this.push_irq();break;case 160:this.is_atapi&&(this.status=88,this.data_allocate(12),this.data_end=12,this.bytecount=1,this.push_irq());break;
106
- case 161:E("ATA identify packet device",32768);this.is_atapi?(this.create_identify_packet(),this.status=88,this.cylinder_low=20,this.cylinder_high=235):this.status=65;this.push_irq();break;case 198:E("Logical sectors per DRQ Block: "+B(this.bytecount&255),32768);this.sectors_per_drq=this.bytecount&255;this.status=80;this.push_irq();break;case 37:case 200:this.ata_read_sectors_dma(a);break;case 53:case 202:this.ata_write_sectors_dma(a);break;case 64:E("read verify sectors",32768);this.status=80;this.push_irq();
107
- break;case 218:E("Unimplemented: get media status",32768);this.status=65;this.error=4;this.push_irq();break;case 224:E("ATA standby immediate",32768);this.status=80;this.push_irq();break;case 225:E("ATA idle immediate",32768);this.status=80;this.push_irq();break;case 231:E("ATA flush cache",32768);this.status=80;this.push_irq();break;case 236:E("ATA identify device",32768);if(this.is_atapi){this.status=65;this.error=4;this.push_irq();break}this.create_identify_packet();this.status=88;this.push_irq();
108
- break;case 234:E("flush cache ext",32768);this.status=80;this.push_irq();break;case 239:E("set features: "+B(this.bytecount&255),32768);this.status=80;this.push_irq();break;case 222:this.status=80;this.push_irq();break;case 245:E("security freeze lock",32768);this.status=80;this.push_irq();break;case 249:E("Unimplemented: set max address",32768);this.status=65;this.error=4;break;default:h(!1,"New ATA cmd on 1F7: "+B(a),32768),this.status=65,this.error=4}else E("abort: No buffer",32768),this.error=
109
- 4,this.status=65,this.push_irq()};K.prototype.atapi_handle=function(){E("ATAPI Command: "+B(this.data[0])+" slave="+(this.drive_head>>4&1),32768);this.data_pointer=0;this.current_atapi_command=this.data[0];switch(this.current_atapi_command){case 0:E("test unit ready",32768);this.data_allocate(0);this.data_end=this.data_length;this.status=80;break;case 3:this.data_allocate(this.data[4]);this.data_end=this.data_length;this.status=88;this.data[0]=240;this.data[2]=5;this.data[7]=8;break;case 18:var a=
110
- this.data[4];this.status=88;E("inquiry: "+B(this.data[1],2)+" length="+a,32768);this.data.set([5,128,1,49,31,0,0,0,83,79,78,89,32,32,32,32,67,68,45,82,79,77,32,67,68,85,45,49,48,48,48,32,49,46,49,97]);this.data_end=this.data_length=Math.min(36,a);break;case 26:this.data_allocate(this.data[4]);this.data_end=this.data_length;this.status=88;break;case 30:this.data_allocate(0);this.data_end=this.data_length;this.status=80;break;case 37:a=this.sector_count-1;this.data_set(new Uint8Array([a>>24&255,a>>
111
- 16&255,a>>8&255,a&255,0,0,this.sector_size>>8&255,this.sector_size&255]));this.data_end=this.data_length;this.status=88;break;case 40:this.lba_count&1?this.atapi_read_dma(this.data):this.atapi_read(this.data);break;case 66:a=this.data[8];this.data_allocate(Math.min(8,a));this.data_end=this.data_length;E("read q subcode: length="+a,32768);this.status=88;break;case 67:a=this.data[8]|this.data[7]<<8;var b=this.data[9]>>6;this.data_allocate(a);this.data_end=this.data_length;E("read toc: "+B(b,2)+" length="+
112
- a+" "+(this.data[1]&2)+" "+B(this.data[6]),32768);0===b?(a=this.sector_count,this.data.set(new Uint8Array([0,18,1,1,0,20,1,0,0,0,0,0,0,22,170,0,a>>24,a>>16&255,a>>8&255,a&255]))):1===b?this.data.set(new Uint8Array([0,10,1,1,0,0,0,0,0,0,0,0])):h(!1,"Unimplemented format: "+b);this.status=88;break;case 70:a=this.data[8]|this.data[7]<<8;a=Math.min(a,32);this.data_allocate(a);this.data_end=this.data_length;this.data[0]=a-4>>24&255;this.data[1]=a-4>>16&255;this.data[2]=a-4>>8&255;this.data[3]=a-4&255;
113
- this.data[6]=8;this.data[10]=3;this.status=88;break;case 81:this.data_allocate(0);this.data_end=this.data_length;this.status=80;break;case 82:E("Unimplemented ATAPI command: "+B(this.data[0]),32768);this.status=81;this.data_length=0;this.error=80;break;case 90:a=this.data[8]|this.data[7]<<8;b=this.data[2];E("mode sense: "+B(b)+" length="+a,32768);42===b&&this.data_allocate(Math.min(30,a));this.data_end=this.data_length;this.status=88;break;case 189:this.data_allocate(this.data[9]|this.data[8]<<8);
114
- this.data_end=this.data_length;this.data[5]=1;this.status=88;break;case 74:this.status=81;this.data_length=0;this.error=80;E("Unimplemented ATAPI command: "+B(this.data[0]),32768);break;case 190:E("Unimplemented ATAPI command: "+B(this.data[0]),32768);this.data_allocate(0);this.data_end=this.data_length;this.status=80;break;default:this.status=81,this.data_length=0,this.error=80,E("Unimplemented ATAPI command: "+B(this.data[0]),32768),h(!1)}this.bytecount=this.bytecount&-8|2;0===(this.status&128)&&
115
- this.push_irq();0===(this.status&128)&&0===this.data_length&&(this.bytecount|=1,this.status&=-9)};K.prototype.do_write=function(){this.status=80;h(this.data_length<=this.data.length);var a=this.data.subarray(0,this.data_length);h(0===this.data_length%512);this.ata_advance(this.current_command,this.data_length/512);this.push_irq();this.buffer.set(this.write_dest,a,function(){});this.report_write(this.data_length)};K.prototype.atapi_read=function(a){var b=a[2]<<24|a[3]<<16|a[4]<<8|a[5],c=a[7]<<8|a[8];
116
- a=a[1];var d=c*this.sector_size,e=b*this.sector_size;E("CD read lba="+B(b)+" lbacount="+B(c)+" bytecount="+B(d)+" flags="+B(a),32768);this.data_length=0;var g=this.cylinder_high<<8&65280|this.cylinder_low&255;E(B(this.cylinder_high,2)+" "+B(this.cylinder_low,2),32768);this.cylinder_low=this.cylinder_high=0;65535===g&&g--;g>d&&(g=d);e>=this.buffer.byteLength?(h(!1,"CD read: Outside of disk end="+B(e+d)+" size="+B(this.buffer.byteLength),32768),this.status=255,this.push_irq()):0===d?(this.status=80,
117
- this.data_pointer=0):(d=Math.min(d,this.buffer.byteLength-e),this.status=208,this.report_read_start(),this.read_buffer(e,d,f=>{E("cd read: data arrived",32768);this.data_set(f);this.status=88;this.bytecount=this.bytecount&-8|2;this.push_irq();this.data_end=g&=-4;this.data_end>this.data_length&&(this.data_end=this.data_length);this.cylinder_low=this.data_end&255;this.cylinder_high=this.data_end>>8&255;this.report_read_end(d)}))};K.prototype.atapi_read_dma=function(a){var b=a[2]<<24|a[3]<<16|a[4]<<
118
- 8|a[5],c=a[7]<<8|a[8];a=a[1];var d=c*this.sector_size,e=b*this.sector_size;E("CD read DMA lba="+B(b)+" lbacount="+B(c)+" bytecount="+B(d)+" flags="+B(a),32768);e>=this.buffer.byteLength?(h(!1,"CD read: Outside of disk end="+B(e+d)+" size="+B(this.buffer.byteLength),32768),this.status=255,this.push_irq()):(this.status=208,this.report_read_start(),this.read_buffer(e,d,g=>{E("atapi_read_dma: Data arrived");this.report_read_end(d);this.status=88;this.bytecount=this.bytecount&-8|2;this.data_set(g);this.do_atapi_dma()}))};
119
- K.prototype.do_atapi_dma=function(){if(0===(this.device.dma_status&1))E("do_atapi_dma: Status not set",32768);else if(0===(this.status&8))E("do_atapi_dma: DRQ not set",32768);else{E("atapi dma transfer len="+this.data_length,32768);var a=this.device.prdt_addr,b=0,c=this.data;do{var d=this.cpu.read32s(a),e=this.cpu.read16(a+4),g=this.cpu.read8(a+7)&128;e||(e=65536);E("dma read dest="+B(d)+" count="+B(e)+" datalen="+B(this.data_length),32768);this.cpu.write_blob(c.subarray(b,Math.min(b+e,this.data_length)),
120
- d);b+=e;a+=8;if(b>=this.data_length&&!g){E("leave early end="+ +g+" offset="+B(b)+" data_length="+B(this.data_length)+" cmd="+B(this.current_command),32768);break}}while(!g);E("end offset="+b,32768);this.status=80;this.device.dma_status&=-2;this.bytecount=this.bytecount&-8|3;this.push_irq()}};K.prototype.read_data=function(a){if(this.data_pointer<this.data_end){h(this.data_pointer+a-1<this.data_end);h(0===this.data_pointer%a,B(this.data_pointer)+" "+a);var b=1===a?this.data[this.data_pointer]:2===
121
- a?this.data16[this.data_pointer>>>1]:this.data32[this.data_pointer>>>2];this.data_pointer+=a;0===(this.data_pointer&(0===(this.data_end&4095)?4095:255))&&E("Read 1F0: "+B(this.data[this.data_pointer],2)+" cur="+B(this.data_pointer)+" cnt="+B(this.data_length),32768);this.data_pointer>=this.data_end&&this.read_end();return b}E("Read 1F0: empty",32768);this.data_pointer+=a;return 0};K.prototype.read_end=function(){E("read_end cmd="+B(this.current_command)+" data_pointer="+B(this.data_pointer)+" end="+
122
- B(this.data_end)+" length="+B(this.data_length),32768);if(160===this.current_command)if(this.data_end===this.data_length)this.status=80,this.bytecount=this.bytecount&-8|3,this.push_irq();else{this.status=88;this.bytecount=this.bytecount&-8|2;this.push_irq();var a=this.cylinder_high<<8&65280|this.cylinder_low&255;this.data_end+a>this.data_length?(this.cylinder_low=this.data_length-this.data_end&255,this.cylinder_high=this.data_length-this.data_end>>8&255,this.data_end=this.data_length):this.data_end+=
123
- a;E("data_end="+B(this.data_end),32768)}else this.error=0,this.data_pointer>=this.data_length?this.status=80:(196===this.current_command||41===this.current_command?(a=Math.min(this.sectors_per_drq,(this.data_length-this.data_end)/512),h(0===a%1)):(h(32===this.current_command||36===this.current_command),a=1),this.ata_advance(this.current_command,a),this.data_end+=512*a,this.status=88,this.push_irq())};K.prototype.write_data_port=function(a,b){h(0===this.data_pointer%b);this.data_pointer>=this.data_end?
124
- E("Redundant write to data port: "+B(a)+" count="+B(this.data_end)+" cur="+B(this.data_pointer),32768):((0===(this.data_pointer+b&(0===(this.data_end&4095)?4095:255))||20>this.data_end)&&E("Data port: "+B(a>>>0)+" count="+B(this.data_end)+" cur="+B(this.data_pointer),32768),1===b?this.data[this.data_pointer++]=a:2===b?(this.data16[this.data_pointer>>>1]=a,this.data_pointer+=2):(this.data32[this.data_pointer>>>2]=a,this.data_pointer+=4),h(this.data_pointer<=this.data_end),this.data_pointer===this.data_end&&
125
- this.write_end())};K.prototype.write_data_port8=function(a){this.write_data_port(a,1)};K.prototype.write_data_port16=function(a){this.write_data_port(a,2)};K.prototype.write_data_port32=function(a){this.write_data_port(a,4)};K.prototype.write_end=function(){160===this.current_command?this.atapi_handle():(E("write_end data_pointer="+B(this.data_pointer)+" data_length="+B(this.data_length),32768),this.data_pointer>=this.data_length?this.do_write():(h(48===this.current_command||52===this.current_command||
126
- 197===this.current_command,"Unexpected command: "+B(this.current_command)),this.status=88,this.data_end+=512,this.push_irq()))};K.prototype.ata_advance=function(a,b){E("Advance sectors="+b+" old_bytecount="+this.bytecount,32768);this.bytecount-=b;36===a||41===a||52===a||57===a||37===a||53===a?(a=b+this.get_lba48(),this.sector=a&255|a>>16&65280,this.cylinder_low=a>>8&255,this.cylinder_high=a>>16&255):this.is_lba?(a=b+this.get_lba28(),this.sector=a&255,this.cylinder_low=a>>8&255,this.cylinder_high=
127
- a>>16&255,this.head=this.head&-16|a&15):(a=b+this.get_chs(),b=a/(this.head_count*this.sectors_per_track)|0,this.cylinder_low=b&255,this.cylinder_high=b>>8&255,this.head=(a/this.sectors_per_track|0)%this.head_count&15,this.sector=a%this.sectors_per_track+1&255,h(a===this.get_chs()))};K.prototype.ata_read_sectors=function(a){var b=36===a||41===a,c=this.get_count(b);b=this.get_lba(b);var d=32===a||36===a,e=c*this.sector_size,g=b*this.sector_size;E("ATA read cmd="+B(a)+" mode="+(this.is_lba?"lba":"chs")+
128
- " lba="+B(b)+" lbacount="+B(c)+" bytecount="+B(e),32768);g+e>this.buffer.byteLength?(h(!1,"ATA read: Outside of disk",32768),this.status=255,this.push_irq()):(this.status=192,this.report_read_start(),this.read_buffer(g,e,f=>{E("ata_read: Data arrived",32768);this.data_set(f);this.status=88;this.data_end=d?512:Math.min(e,512*this.sectors_per_drq);this.ata_advance(a,d?1:Math.min(c,this.sectors_per_track));this.push_irq();this.report_read_end(e)}))};K.prototype.ata_read_sectors_dma=function(a){var b=
129
- 37===a;a=this.get_count(b);b=this.get_lba(b);var c=a*this.sector_size,d=b*this.sector_size;E("ATA DMA read lba="+B(b)+" lbacount="+B(a)+" bytecount="+B(c),32768);d+c>this.buffer.byteLength?(h(!1,"ATA read: Outside of disk",32768),this.status=255,this.push_irq()):(this.status=88,this.device.dma_status|=1)};K.prototype.do_ata_read_sectors_dma=function(){var a=37===this.current_command,b=this.get_count(a);a=this.get_lba(a);var c=b*this.sector_size,d=a*this.sector_size;h(a<this.buffer.byteLength);this.report_read_start();
130
- var e=this.device.prdt_addr;this.read_buffer(d,c,g=>{E("do_ata_read_sectors_dma: Data arrived",32768);var f=this.device.prdt_addr,l=0;h(e===f);do{var n=this.cpu.read32s(f),m=this.cpu.read16(f+4),q=this.cpu.read8(f+7)&128;m||(m=65536,E("dma: prd count was 0",32768));E("dma read transfer dest="+B(n)+" prd_count="+B(m),32768);this.cpu.write_blob(g.subarray(l,l+m),n);l+=m;f+=8}while(!q);h(l===c);this.ata_advance(this.current_command,b);this.status=80;this.device.dma_status&=-2;this.current_command=-1;
131
- this.push_irq();this.report_read_end(c)})};K.prototype.ata_write_sectors=function(a){var b=52===a||57===a,c=this.get_count(b);b=this.get_lba(b);a=48===a||52===a;var d=c*this.sector_size,e=b*this.sector_size;E("ATA write lba="+B(b)+" mode="+(this.is_lba?"lba":"chs")+" lbacount="+B(c)+" bytecount="+B(d),32768);e+d>this.buffer.byteLength?(h(!1,"ATA write: Outside of disk",32768),this.status=255,this.push_irq()):(this.status=88,this.data_allocate_noclear(d),this.data_end=a?512:Math.min(d,512*this.sectors_per_drq),
132
- this.write_dest=e)};K.prototype.ata_write_sectors_dma=function(a){var b=53===a;a=this.get_count(b);b=this.get_lba(b);var c=a*this.sector_size,d=b*this.sector_size;E("ATA DMA write lba="+B(b)+" lbacount="+B(a)+" bytecount="+B(c),32768);d+c>this.buffer.byteLength?(h(!1,"ATA DMA write: Outside of disk",32768),this.status=255,this.push_irq()):(this.status=88,this.device.dma_status|=1)};K.prototype.do_ata_write_sectors_dma=function(){var a=53===this.current_command,b=this.get_count(a),c=this.get_lba(a);
133
- a=b*this.sector_size;c*=this.sector_size;var d=this.device.prdt_addr,e=0;E("prdt addr: "+B(d,8),32768);const g=new Uint8Array(a);do{var f=this.cpu.read32s(d),l=this.cpu.read16(d+4),n=this.cpu.read8(d+7)&128;l||(l=65536,E("dma: prd count was 0",32768));E("dma write transfer dest="+B(f)+" prd_count="+B(l),32768);f=this.cpu.mem8.subarray(f,f+l);h(f.length===l);g.set(f,e);e+=l;d+=8}while(!n);h(e===g.length);this.buffer.set(c,g,()=>{E("dma write completed",32768);this.ata_advance(this.current_command,
134
- b);this.status=80;this.push_irq();this.device.dma_status&=-2;this.current_command=-1});this.report_write(a)};K.prototype.get_chs=function(){var a=this.cylinder_low&255|this.cylinder_high<<8&65280,b=this.head,c=this.sector&255;E("get_chs: c="+a+" h="+b+" s="+c,32768);return(a*this.head_count+b)*this.sectors_per_track+c-1};K.prototype.get_lba28=function(){return this.sector&255|this.cylinder_low<<8&65280|this.cylinder_high<<16&16711680|(this.head&15)<<24};K.prototype.get_lba48=function(){return(this.sector&
135
- 255|this.cylinder_low<<8&65280|this.cylinder_high<<16&16711680|this.sector>>8<<24&4278190080)>>>0};K.prototype.get_lba=function(a){return a?this.get_lba48():this.is_lba?this.get_lba28():this.get_chs()};K.prototype.get_count=function(a){a?(a=this.bytecount,0===a&&(a=65536)):(a=this.bytecount&255,0===a&&(a=256));return a};K.prototype.create_identify_packet=function(){if(this.drive_head&16)this.data_allocate(0);else{for(var a=0;512>a;a++)this.data[a]=0;a=Math.min(16383,this.cylinder_count);this.data_set([64,
288
+ case 161:D("ATA identify packet device",32768);this.is_atapi?(this.create_identify_packet(),this.status=88,this.cylinder_low=20,this.cylinder_high=235):this.status=65;this.push_irq();break;case 198:D("Logical sectors per DRQ Block: "+z(this.bytecount&255),32768);this.sectors_per_drq=this.bytecount&255;this.status=80;this.push_irq();break;case 37:case 200:this.ata_read_sectors_dma(a);break;case 53:case 202:this.ata_write_sectors_dma(a);break;case 64:D("read verify sectors",32768);this.status=80;this.push_irq();
289
+ break;case 218:D("Unimplemented: get media status",32768);this.status=65;this.error=4;this.push_irq();break;case 224:D("ATA standby immediate",32768);this.status=80;this.push_irq();break;case 225:D("ATA idle immediate",32768);this.status=80;this.push_irq();break;case 231:D("ATA flush cache",32768);this.status=80;this.push_irq();break;case 236:D("ATA identify device",32768);if(this.is_atapi){this.status=65;this.error=4;this.push_irq();break}this.create_identify_packet();this.status=88;this.push_irq();
290
+ break;case 234:D("flush cache ext",32768);this.status=80;this.push_irq();break;case 239:D("set features: "+z(this.bytecount&255),32768);this.status=80;this.push_irq();break;case 222:this.status=80;this.push_irq();break;case 245:D("security freeze lock",32768);this.status=80;this.push_irq();break;case 249:D("Unimplemented: set max address",32768);this.status=65;this.error=4;break;default:m(!1,"New ATA cmd on 1F7: "+z(a),32768),this.status=65,this.error=4}else D("abort: No buffer",32768),this.error=
291
+ 4,this.status=65,this.push_irq()};R.prototype.atapi_handle=function(){D("ATAPI Command: "+z(this.data[0])+" slave="+(this.drive_head>>4&1),32768);this.data_pointer=0;this.current_atapi_command=this.data[0];switch(this.current_atapi_command){case 0:D("test unit ready",32768);this.data_allocate(0);this.data_end=this.data_length;this.status=80;break;case 3:this.data_allocate(this.data[4]);this.data_end=this.data_length;this.status=88;this.data[0]=240;this.data[2]=5;this.data[7]=8;break;case 18:var a=
292
+ this.data[4];this.status=88;D("inquiry: "+z(this.data[1],2)+" length="+a,32768);this.data.set([5,128,1,49,31,0,0,0,83,79,78,89,32,32,32,32,67,68,45,82,79,77,32,67,68,85,45,49,48,48,48,32,49,46,49,97]);this.data_end=this.data_length=Math.min(36,a);break;case 26:this.data_allocate(this.data[4]);this.data_end=this.data_length;this.status=88;break;case 30:this.data_allocate(0);this.data_end=this.data_length;this.status=80;break;case 37:a=this.sector_count-1;this.data_set(new Uint8Array([a>>24&255,a>>
293
+ 16&255,a>>8&255,a&255,0,0,this.sector_size>>8&255,this.sector_size&255]));this.data_end=this.data_length;this.status=88;break;case 40:this.lba_count&1?this.atapi_read_dma(this.data):this.atapi_read(this.data);break;case 66:a=this.data[8];this.data_allocate(Math.min(8,a));this.data_end=this.data_length;D("read q subcode: length="+a,32768);this.status=88;break;case 67:a=this.data[8]|this.data[7]<<8;var b=this.data[9]>>6;this.data_allocate(a);this.data_end=this.data_length;D("read toc: "+z(b,2)+" length="+
294
+ a+" "+(this.data[1]&2)+" "+z(this.data[6]),32768);0===b?(a=this.sector_count,this.data.set(new Uint8Array([0,18,1,1,0,20,1,0,0,0,0,0,0,22,170,0,a>>24,a>>16&255,a>>8&255,a&255]))):1===b?this.data.set(new Uint8Array([0,10,1,1,0,0,0,0,0,0,0,0])):m(!1,"Unimplemented format: "+b);this.status=88;break;case 70:a=this.data[8]|this.data[7]<<8;a=Math.min(a,32);this.data_allocate(a);this.data_end=this.data_length;this.data[0]=a-4>>24&255;this.data[1]=a-4>>16&255;this.data[2]=a-4>>8&255;this.data[3]=a-4&255;
295
+ this.data[6]=8;this.data[10]=3;this.status=88;break;case 81:this.data_allocate(0);this.data_end=this.data_length;this.status=80;break;case 82:D("Unimplemented ATAPI command: "+z(this.data[0]),32768);this.status=81;this.data_length=0;this.error=80;break;case 90:a=this.data[8]|this.data[7]<<8;b=this.data[2];D("mode sense: "+z(b)+" length="+a,32768);42===b&&this.data_allocate(Math.min(30,a));this.data_end=this.data_length;this.status=88;break;case 189:this.data_allocate(this.data[9]|this.data[8]<<8);
296
+ this.data_end=this.data_length;this.data[5]=1;this.status=88;break;case 74:this.status=81;this.data_length=0;this.error=80;D("Unimplemented ATAPI command: "+z(this.data[0]),32768);break;case 190:D("Unimplemented ATAPI command: "+z(this.data[0]),32768);this.data_allocate(0);this.data_end=this.data_length;this.status=80;break;default:this.status=81,this.data_length=0,this.error=80,D("Unimplemented ATAPI command: "+z(this.data[0]),32768),m(!1)}this.bytecount=this.bytecount&-8|2;0===(this.status&128)&&
297
+ this.push_irq();0===(this.status&128)&&0===this.data_length&&(this.bytecount|=1,this.status&=-9)};R.prototype.do_write=function(){this.status=80;m(this.data_length<=this.data.length);var a=this.data.subarray(0,this.data_length);m(0===this.data_length%512);this.ata_advance(this.current_command,this.data_length/512);this.push_irq();this.buffer.set(this.write_dest,a,function(){});this.report_write(this.data_length)};R.prototype.atapi_read=function(a){var b=a[2]<<24|a[3]<<16|a[4]<<8|a[5],c=a[7]<<8|a[8];
298
+ a=a[1];var d=c*this.sector_size,e=b*this.sector_size;D("CD read lba="+z(b)+" lbacount="+z(c)+" bytecount="+z(d)+" flags="+z(a),32768);this.data_length=0;var f=this.cylinder_high<<8&65280|this.cylinder_low&255;D(z(this.cylinder_high,2)+" "+z(this.cylinder_low,2),32768);this.cylinder_low=this.cylinder_high=0;65535===f&&f--;f>d&&(f=d);e>=this.buffer.byteLength?(m(!1,"CD read: Outside of disk end="+z(e+d)+" size="+z(this.buffer.byteLength),32768),this.status=255,this.push_irq()):0===d?(this.status=80,
299
+ this.data_pointer=0):(d=Math.min(d,this.buffer.byteLength-e),this.status=208,this.report_read_start(),this.read_buffer(e,d,h=>{D("cd read: data arrived",32768);this.data_set(h);this.status=88;this.bytecount=this.bytecount&-8|2;this.push_irq();this.data_end=f&=-4;this.data_end>this.data_length&&(this.data_end=this.data_length);this.cylinder_low=this.data_end&255;this.cylinder_high=this.data_end>>8&255;this.report_read_end(d)}))};R.prototype.atapi_read_dma=function(a){var b=a[2]<<24|a[3]<<16|a[4]<<
300
+ 8|a[5],c=a[7]<<8|a[8];a=a[1];var d=c*this.sector_size,e=b*this.sector_size;D("CD read DMA lba="+z(b)+" lbacount="+z(c)+" bytecount="+z(d)+" flags="+z(a),32768);e>=this.buffer.byteLength?(m(!1,"CD read: Outside of disk end="+z(e+d)+" size="+z(this.buffer.byteLength),32768),this.status=255,this.push_irq()):(this.status=208,this.report_read_start(),this.read_buffer(e,d,f=>{D("atapi_read_dma: Data arrived");this.report_read_end(d);this.status=88;this.bytecount=this.bytecount&-8|2;this.data_set(f);this.do_atapi_dma()}))};
301
+ R.prototype.do_atapi_dma=function(){if(0===(this.device.dma_status&1))D("do_atapi_dma: Status not set",32768);else if(0===(this.status&8))D("do_atapi_dma: DRQ not set",32768);else{D("atapi dma transfer len="+this.data_length,32768);var a=this.device.prdt_addr,b=0,c=this.data;do{var d=this.cpu.read32s(a),e=this.cpu.read16(a+4),f=this.cpu.read8(a+7)&128;e||(e=65536);D("dma read dest="+z(d)+" count="+z(e)+" datalen="+z(this.data_length),32768);this.cpu.write_blob(c.subarray(b,Math.min(b+e,this.data_length)),
302
+ d);b+=e;a+=8;if(b>=this.data_length&&!f){D("leave early end="+ +f+" offset="+z(b)+" data_length="+z(this.data_length)+" cmd="+z(this.current_command),32768);break}}while(!f);D("end offset="+b,32768);this.status=80;this.device.dma_status&=-2;this.bytecount=this.bytecount&-8|3;this.push_irq()}};R.prototype.read_data=function(a){if(this.data_pointer<this.data_end){m(this.data_pointer+a-1<this.data_end);m(0===this.data_pointer%a,z(this.data_pointer)+" "+a);var b=1===a?this.data[this.data_pointer]:2===
303
+ a?this.data16[this.data_pointer>>>1]:this.data32[this.data_pointer>>>2];this.data_pointer+=a;0===(this.data_pointer&(0===(this.data_end&4095)?4095:255))&&D("Read 1F0: "+z(this.data[this.data_pointer],2)+" cur="+z(this.data_pointer)+" cnt="+z(this.data_length),32768);this.data_pointer>=this.data_end&&this.read_end();return b}D("Read 1F0: empty",32768);this.data_pointer+=a;return 0};R.prototype.read_end=function(){D("read_end cmd="+z(this.current_command)+" data_pointer="+z(this.data_pointer)+" end="+
304
+ z(this.data_end)+" length="+z(this.data_length),32768);if(160===this.current_command)if(this.data_end===this.data_length)this.status=80,this.bytecount=this.bytecount&-8|3,this.push_irq();else{this.status=88;this.bytecount=this.bytecount&-8|2;this.push_irq();var a=this.cylinder_high<<8&65280|this.cylinder_low&255;this.data_end+a>this.data_length?(this.cylinder_low=this.data_length-this.data_end&255,this.cylinder_high=this.data_length-this.data_end>>8&255,this.data_end=this.data_length):this.data_end+=
305
+ a;D("data_end="+z(this.data_end),32768)}else this.error=0,this.data_pointer>=this.data_length?this.status=80:(196===this.current_command||41===this.current_command?(a=Math.min(this.sectors_per_drq,(this.data_length-this.data_end)/512),m(0===a%1)):(m(32===this.current_command||36===this.current_command),a=1),this.ata_advance(this.current_command,a),this.data_end+=512*a,this.status=88,this.push_irq())};R.prototype.write_data_port=function(a,b){m(0===this.data_pointer%b);this.data_pointer>=this.data_end?
306
+ D("Redundant write to data port: "+z(a)+" count="+z(this.data_end)+" cur="+z(this.data_pointer),32768):((0===(this.data_pointer+b&(0===(this.data_end&4095)?4095:255))||20>this.data_end)&&D("Data port: "+z(a>>>0)+" count="+z(this.data_end)+" cur="+z(this.data_pointer),32768),1===b?this.data[this.data_pointer++]=a:2===b?(this.data16[this.data_pointer>>>1]=a,this.data_pointer+=2):(this.data32[this.data_pointer>>>2]=a,this.data_pointer+=4),m(this.data_pointer<=this.data_end),this.data_pointer===this.data_end&&
307
+ this.write_end())};R.prototype.write_data_port8=function(a){this.write_data_port(a,1)};R.prototype.write_data_port16=function(a){this.write_data_port(a,2)};R.prototype.write_data_port32=function(a){this.write_data_port(a,4)};R.prototype.write_end=function(){160===this.current_command?this.atapi_handle():(D("write_end data_pointer="+z(this.data_pointer)+" data_length="+z(this.data_length),32768),this.data_pointer>=this.data_length?this.do_write():(m(48===this.current_command||52===this.current_command||
308
+ 197===this.current_command,"Unexpected command: "+z(this.current_command)),this.status=88,this.data_end+=512,this.push_irq()))};R.prototype.ata_advance=function(a,b){D("Advance sectors="+b+" old_bytecount="+this.bytecount,32768);this.bytecount-=b;36===a||41===a||52===a||57===a||37===a||53===a?(a=b+this.get_lba48(),this.sector=a&255|a>>16&65280,this.cylinder_low=a>>8&255,this.cylinder_high=a>>16&255):this.is_lba?(a=b+this.get_lba28(),this.sector=a&255,this.cylinder_low=a>>8&255,this.cylinder_high=
309
+ a>>16&255,this.head=this.head&-16|a&15):(a=b+this.get_chs(),b=a/(this.head_count*this.sectors_per_track)|0,this.cylinder_low=b&255,this.cylinder_high=b>>8&255,this.head=(a/this.sectors_per_track|0)%this.head_count&15,this.sector=a%this.sectors_per_track+1&255,m(a===this.get_chs()))};R.prototype.ata_read_sectors=function(a){var b=36===a||41===a,c=this.get_count(b);b=this.get_lba(b);var d=32===a||36===a,e=c*this.sector_size,f=b*this.sector_size;D("ATA read cmd="+z(a)+" mode="+(this.is_lba?"lba":"chs")+
310
+ " lba="+z(b)+" lbacount="+z(c)+" bytecount="+z(e),32768);f+e>this.buffer.byteLength?(m(!1,"ATA read: Outside of disk",32768),this.status=255,this.push_irq()):(this.status=192,this.report_read_start(),this.read_buffer(f,e,h=>{D("ata_read: Data arrived",32768);this.data_set(h);this.status=88;this.data_end=d?512:Math.min(e,512*this.sectors_per_drq);this.ata_advance(a,d?1:Math.min(c,this.sectors_per_track));this.push_irq();this.report_read_end(e)}))};R.prototype.ata_read_sectors_dma=function(a){var b=
311
+ 37===a;a=this.get_count(b);b=this.get_lba(b);var c=a*this.sector_size,d=b*this.sector_size;D("ATA DMA read lba="+z(b)+" lbacount="+z(a)+" bytecount="+z(c),32768);d+c>this.buffer.byteLength?(m(!1,"ATA read: Outside of disk",32768),this.status=255,this.push_irq()):(this.status=88,this.device.dma_status|=1)};R.prototype.do_ata_read_sectors_dma=function(){var a=37===this.current_command,b=this.get_count(a);a=this.get_lba(a);var c=b*this.sector_size,d=a*this.sector_size;m(a<this.buffer.byteLength);this.report_read_start();
312
+ var e=this.device.prdt_addr;this.read_buffer(d,c,f=>{D("do_ata_read_sectors_dma: Data arrived",32768);var h=this.device.prdt_addr,l=0;m(e===h);do{var n=this.cpu.read32s(h),p=this.cpu.read16(h+4),q=this.cpu.read8(h+7)&128;p||(p=65536,D("dma: prd count was 0",32768));D("dma read transfer dest="+z(n)+" prd_count="+z(p),32768);this.cpu.write_blob(f.subarray(l,l+p),n);l+=p;h+=8}while(!q);m(l===c);this.ata_advance(this.current_command,b);this.status=80;this.device.dma_status&=-2;this.current_command=-1;
313
+ this.push_irq();this.report_read_end(c)})};R.prototype.ata_write_sectors=function(a){var b=52===a||57===a,c=this.get_count(b);b=this.get_lba(b);a=48===a||52===a;var d=c*this.sector_size,e=b*this.sector_size;D("ATA write lba="+z(b)+" mode="+(this.is_lba?"lba":"chs")+" lbacount="+z(c)+" bytecount="+z(d),32768);e+d>this.buffer.byteLength?(m(!1,"ATA write: Outside of disk",32768),this.status=255,this.push_irq()):(this.status=88,this.data_allocate_noclear(d),this.data_end=a?512:Math.min(d,512*this.sectors_per_drq),
314
+ this.write_dest=e)};R.prototype.ata_write_sectors_dma=function(a){var b=53===a;a=this.get_count(b);b=this.get_lba(b);var c=a*this.sector_size,d=b*this.sector_size;D("ATA DMA write lba="+z(b)+" lbacount="+z(a)+" bytecount="+z(c),32768);d+c>this.buffer.byteLength?(m(!1,"ATA DMA write: Outside of disk",32768),this.status=255,this.push_irq()):(this.status=88,this.device.dma_status|=1)};R.prototype.do_ata_write_sectors_dma=function(){var a=53===this.current_command,b=this.get_count(a),c=this.get_lba(a);
315
+ a=b*this.sector_size;c*=this.sector_size;var d=this.device.prdt_addr,e=0;D("prdt addr: "+z(d,8),32768);const f=new Uint8Array(a);do{var h=this.cpu.read32s(d),l=this.cpu.read16(d+4),n=this.cpu.read8(d+7)&128;l||(l=65536,D("dma: prd count was 0",32768));D("dma write transfer dest="+z(h)+" prd_count="+z(l),32768);h=this.cpu.mem8.subarray(h,h+l);m(h.length===l);f.set(h,e);e+=l;d+=8}while(!n);m(e===f.length);this.buffer.set(c,f,()=>{D("dma write completed",32768);this.ata_advance(this.current_command,
316
+ b);this.status=80;this.push_irq();this.device.dma_status&=-2;this.current_command=-1});this.report_write(a)};R.prototype.get_chs=function(){var a=this.cylinder_low&255|this.cylinder_high<<8&65280,b=this.head,c=this.sector&255;D("get_chs: c="+a+" h="+b+" s="+c,32768);return(a*this.head_count+b)*this.sectors_per_track+c-1};R.prototype.get_lba28=function(){return this.sector&255|this.cylinder_low<<8&65280|this.cylinder_high<<16&16711680|(this.head&15)<<24};R.prototype.get_lba48=function(){return(this.sector&
317
+ 255|this.cylinder_low<<8&65280|this.cylinder_high<<16&16711680|this.sector>>8<<24&4278190080)>>>0};R.prototype.get_lba=function(a){return a?this.get_lba48():this.is_lba?this.get_lba28():this.get_chs()};R.prototype.get_count=function(a){a?(a=this.bytecount,0===a&&(a=65536)):(a=this.bytecount&255,0===a&&(a=256));return a};R.prototype.create_identify_packet=function(){if(this.drive_head&16)this.data_allocate(0);else{for(var a=0;512>a;a++)this.data[a]=0;a=Math.min(16383,this.cylinder_count);this.data_set([64,
136
318
  this.is_atapi?133:0,a,a>>8,0,0,this.head_count,this.head_count>>8,this.sectors_per_track/512,this.sectors_per_track/512>>8,0,2,this.sectors_per_track,this.sectors_per_track>>8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,4,0,0,0,0,0,0,0,0,0,56,118,32,54,68,72,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,128,0,1,0,0,2,0,0,0,2,0,2,7,0,a,a>>8,this.head_count,this.head_count>>8,this.sectors_per_track,0,this.sector_count&255,this.sector_count>>
137
319
  8&255,this.sector_count>>16&255,this.sector_count>>24&255,0,0,this.sector_count&255,this.sector_count>>8&255,this.sector_count>>16&255,this.sector_count>>24&255,0,0,160===this.current_command?0:7,160===this.current_command?0:4,0,0,30,0,30,0,30,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,0,0,0,0,0,0,116,0,64,0,64,0,116,0,64,0,0,0,0,0,0,0,0,0,0,1,96,0,0,0,0,0,0,0,0,0,0,0,0,this.sector_count&255,this.sector_count>>8&255,this.sector_count>>16&255,this.sector_count>>24&255]);this.data_end=this.data_length=
138
- 512}};K.prototype.data_allocate=function(a){this.data_allocate_noclear(a);for(var b=0;b<a+3>>2;b++)this.data32[b]=0};K.prototype.data_allocate_noclear=function(a){this.data.length<a&&(this.data=new Uint8Array(a+3&-4),this.data16=new Uint16Array(this.data.buffer),this.data32=new Int32Array(this.data.buffer));this.data_length=a;this.data_pointer=0};K.prototype.data_set=function(a){this.data_allocate_noclear(a.length);this.data.set(a)};K.prototype.report_read_start=function(){this.bus.send("ide-read-start")};
139
- K.prototype.report_read_end=function(a){this.bus.send("ide-read-end",[this.nr,a,a/this.sector_size|0])};K.prototype.report_write=function(a){this.bus.send("ide-write-end",[this.nr,a,a/this.sector_size|0])};K.prototype.read_buffer=function(a,b,c){const d=this.last_io_id++;this.in_progress_io_ids.add(d);this.buffer.get(a,b,e=>{if(this.cancelled_io_ids.delete(d))h(!this.in_progress_io_ids.has(d));else{var g=this.in_progress_io_ids.delete(d);h(g);c(e)}})};K.prototype.cancel_io_operations=function(){for(const a of this.in_progress_io_ids)this.cancelled_io_ids.add(a);
140
- this.in_progress_io_ids.clear()};K.prototype.get_state=function(){var a=[];a[0]=this.bytecount;a[1]=this.cylinder_count;a[2]=this.cylinder_high;a[3]=this.cylinder_low;a[4]=this.data_pointer;a[5]=0;a[6]=0;a[7]=0;a[8]=0;a[9]=this.drive_head;a[10]=this.error;a[11]=this.head;a[12]=this.head_count;a[13]=this.is_atapi;a[14]=this.is_lba;a[15]=this.lba_count;a[16]=this.data;a[17]=this.data_length;a[18]=this.sector;a[19]=this.sector_count;a[20]=this.sector_size;a[21]=this.sectors_per_drq;a[22]=this.sectors_per_track;
141
- a[23]=this.status;a[24]=this.write_dest;a[25]=this.current_command;a[26]=this.data_end;a[27]=this.current_atapi_command;a[28]=this.buffer;return a};K.prototype.set_state=function(a){this.bytecount=a[0];this.cylinder_count=a[1];this.cylinder_high=a[2];this.cylinder_low=a[3];this.data_pointer=a[4];this.drive_head=a[9];this.error=a[10];this.head=a[11];this.head_count=a[12];this.is_atapi=a[13];this.is_lba=a[14];this.lba_count=a[15];this.data=a[16];this.data_length=a[17];this.sector=a[18];this.sector_count=
142
- a[19];this.sector_size=a[20];this.sectors_per_drq=a[21];this.sectors_per_track=a[22];this.status=a[23];this.write_dest=a[24];this.current_command=a[25];this.data_end=a[26];this.current_atapi_command=a[27];this.data16=new Uint16Array(this.data.buffer);this.data32=new Int32Array(this.data.buffer);this.buffer&&this.buffer.set_state(a[28])};function za(a){this.pci_addr=new Uint8Array(4);this.pci_value=new Uint8Array(4);this.pci_response=new Uint8Array(4);this.pci_status=new Uint8Array(4);this.pci_addr32=
143
- new Int32Array(this.pci_addr.buffer);this.pci_value32=new Int32Array(this.pci_value.buffer);this.pci_response32=new Int32Array(this.pci_response.buffer);this.pci_status32=new Int32Array(this.pci_status.buffer);this.device_spaces=[];this.devices=[];this.cpu=a;for(var b=0;256>b;b++)this.device_spaces[b]=void 0,this.devices[b]=void 0;this.io=a.io;a.io.register_write(3324,this,function(c){this.pci_write8(this.pci_addr32[0],c)},function(c){this.pci_write16(this.pci_addr32[0],c)},function(c){this.pci_write32(this.pci_addr32[0],
144
- c)});a.io.register_write(3325,this,function(c){this.pci_write8(this.pci_addr32[0]+1|0,c)});a.io.register_write(3326,this,function(c){this.pci_write8(this.pci_addr32[0]+2|0,c)},function(c){this.pci_write16(this.pci_addr32[0]+2|0,c)});a.io.register_write(3327,this,function(c){this.pci_write8(this.pci_addr32[0]+3|0,c)});a.io.register_read_consecutive(3324,this,function(){return this.pci_response[0]},function(){return this.pci_response[1]},function(){return this.pci_response[2]},function(){return this.pci_response[3]});
145
- a.io.register_read_consecutive(3320,this,function(){return this.pci_status[0]},function(){return this.pci_status[1]},function(){return this.pci_status[2]},function(){return this.pci_status[3]});a.io.register_write_consecutive(3320,this,function(c){this.pci_addr[0]=c&252},function(c){2===(this.pci_addr[1]&6)&&6===(c&6)?(E("CPU reboot via PCI"),a.reboot_internal()):this.pci_addr[1]=c},function(c){this.pci_addr[2]=c},function(c){this.pci_addr[3]=c;this.pci_query()});this.register_device({pci_id:0,pci_space:[134,
146
- 128,55,18,0,0,0,0,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0],pci_bars:[],name:"82441FX PMC"});this.isa_bridge={pci_id:8,pci_space:[134,128,0,112,7,0,0,2,0,0,1,6,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],pci_bars:[],name:"82371SB PIIX3 ISA"};this.isa_bridge_space=this.register_device(this.isa_bridge);
147
- this.isa_bridge_space8=new Uint8Array(this.isa_bridge_space.buffer)}za.prototype.get_state=function(){for(var a=[],b=0;256>b;b++)a[b]=this.device_spaces[b];a[256]=this.pci_addr;a[257]=this.pci_value;a[258]=this.pci_response;a[259]=this.pci_status;return a};za.prototype.set_state=function(a){for(var b=0;256>b;b++){var c=this.devices[b],d=a[b];if(c&&d){for(var e=0;e<c.pci_bars.length;e++){var g=d[4+e];if(g&1){var f=c.pci_bars[e];this.set_io_bars(f,f.original_bar&65534,g&65534)}}this.device_spaces[b].set(d)}else c&&
148
- E("Warning: While restoring PCI device: Device exists in current configuration but not in snapshot ("+c.name+")"),d&&E("Warning: While restoring PCI device: Device doesn't exist in current configuration but does in snapshot (device "+B(b,2)+")")}this.pci_addr.set(a[256]);this.pci_value.set(a[257]);this.pci_response.set(a[258]);this.pci_status.set(a[259])};za.prototype.pci_query=function(){var a=this.pci_addr[2]<<8|this.pci_addr[1],b=this.pci_addr[0]&252,c=a>>3&31;var d="query enabled="+(this.pci_addr[3]>>
149
- 7)+(" bdf="+B(a,4));d+=" dev="+B(c,2);d+=" addr="+B(b,2);c=this.device_spaces[a];void 0!==c?(this.pci_status32[0]=-2147483648,this.pci_response32[0]=b<c.byteLength?c[b>>2]:0,d+=" "+B(this.pci_addr32[0]>>>0,8)+" -> "+B(this.pci_response32[0]>>>0,8),b>=c.byteLength&&(d+=" (undef)"),d+=" ("+this.devices[a].name+")",E(d,2048)):(this.pci_response32[0]=-1,this.pci_status32[0]=0)};za.prototype.pci_write8=function(a,b){var c=a>>8&65535;a&=255;var d=new Uint8Array(this.device_spaces[c].buffer),e=this.devices[c];
150
- d&&(h(!(16<=a&&44>a||48<=a&&52>a),"PCI: Expected 32-bit write, got 8-bit (addr: "+B(a)+")"),E("PCI write8 dev="+B(c>>3,2)+" ("+e.name+") addr="+B(a,4)+" value="+B(b,2),2048),d[a]=b)};za.prototype.pci_write16=function(a,b){h(0===(a&1));var c=a>>8&65535;a&=255;var d=new Uint16Array(this.device_spaces[c].buffer),e=this.devices[c];d&&(16<=a&&44>a?E("Warning: PCI: Expected 32-bit write, got 16-bit (addr: "+B(a)+")"):(h(!(48<=a&&52>a),"PCI: Expected 32-bit write, got 16-bit (addr: "+B(a)+")"),E("PCI writ16 dev="+
151
- B(c>>3,2)+" ("+e.name+") addr="+B(a,4)+" value="+B(b,4),2048),d[a>>>1]=b))};za.prototype.pci_write32=function(a,b){h(0===(a&3));var c=a>>8&65535;a&=255;var d=this.device_spaces[c],e=this.devices[c];if(d)if(16<=a&&40>a){var g=a-16>>2,f=e.pci_bars[g];E("BAR"+g+" exists="+(f?"y":"n")+" changed to "+B(b>>>0)+" dev="+B(c>>3,2)+" ("+e.name+") ",2048);f?(h(!(f.size&f.size-1),"bar size should be power of 2"),c=a>>2,e=d[c]&1,-1===(b|3|f.size-1)?(b=~(f.size-1)|e,0===e&&(d[c]=b)):0===e&&(g=f.original_bar,(b&
152
- -16)!==(g&-16)&&E("Warning: Changing memory bar not supported, ignored",2048),d[c]=g),1===e&&(h(1===e),e=d[c]&65534,g=b&65534,E("io bar changed from "+B(e>>>0,8)+" to "+B(g>>>0,8)+" size="+f.size,2048),this.set_io_bars(f,e,g),d[c]=b|1)):d[a>>2]=0;E("BAR effective value: "+B(d[a>>2]>>>0),2048)}else 48===a?(E("PCI write rom address dev="+B(c>>3,2)+" ("+e.name+") value="+B(b>>>0,8),2048),d[a>>2]=e.pci_rom_size?-1===(b|2047)?-e.pci_rom_size|0:e.pci_rom_address|0:0):4===a?E("PCI write dev="+B(c>>3,2)+
153
- " ("+e.name+") addr="+B(a,4)+" value="+B(b>>>0,8),2048):(E("PCI write dev="+B(c>>3,2)+" ("+e.name+") addr="+B(a,4)+" value="+B(b>>>0,8),2048),d[a>>>2]=b)};za.prototype.register_device=function(a){h(void 0!==a.pci_id);h(void 0!==a.pci_space);h(void 0!==a.pci_bars);var b=a.pci_id;E("PCI register bdf="+B(b)+" ("+a.name+")",2048);h(!this.devices[b]);h(64<=a.pci_space.length);h(b<this.devices.length);var c=new Int32Array(64);c.set(new Int32Array((new Uint8Array(a.pci_space)).buffer));this.device_spaces[b]=
154
- c;this.devices[b]=a;b=c.slice(4,10);for(var d=0;d<a.pci_bars.length;d++){var e=a.pci_bars[d];if(e){var g=b[d],f=g&1;e.original_bar=g;e.entries=[];if(0!==f)for(h(1===f),g&=-2,f=0;f<e.size;f++)e.entries[f]=this.io.ports[g+f]}}return c};za.prototype.set_io_bars=function(a,b,c){var d=a.size;E("Move io bars: from="+B(b)+" to="+B(c)+" count="+d,2048);for(var e=this.io.ports,g=0;g<d;g++){var f=e[b+g];4096<=b+g&&(e[b+g]=this.io.create_empty_entry());f.read8===this.io.empty_port_read8&&f.read16===this.io.empty_port_read16&&
155
- f.read32===this.io.empty_port_read32&&f.write8===this.io.empty_port_write&&f.write16===this.io.empty_port_write&&f.write32===this.io.empty_port_write&&E("Warning: Bad IO bar: Source not mapped, port="+B(b+g,4),2048);f=a.entries[g];var l=e[c+g];h(f&&l);4096<=c+g&&(e[c+g]=f);l.read8!==this.io.empty_port_read8&&l.read16!==this.io.empty_port_read16&&l.read32!==this.io.empty_port_read32&&l.write8!==this.io.empty_port_write&&l.write16!==this.io.empty_port_write&&l.write32!==this.io.empty_port_write||E("Warning: Bad IO bar: Target already mapped, port="+
156
- B(c+g,4),2048)}};za.prototype.raise_irq=function(a){var b=this.device_spaces[a];h(b);this.cpu.device_raise_irq(this.isa_bridge_space8[96+((b[15]>>8&255)-1+((a>>3)-1&255)&3)])};za.prototype.lower_irq=function(a){var b=this.device_spaces[a];h(b);this.cpu.device_lower_irq(this.isa_bridge_space8[96+((b[15]>>8&255)+(a>>3&255)-2&3)])};function N(a,b,c){this.io=a.io;this.cpu=a;this.dma=a.devices.dma;this.bytes_expecting=0;this.receiving_command=new Uint8Array(10);this.receiving_index=0;this.next_command=
157
- null;this.response_data=new Uint8Array(10);this.last_head=this.last_cylinder=this.drive=this.status_reg2=this.status_reg1=this.status_reg0=this.response_length=this.response_index=0;this.last_sector=1;this.dir=this.dor=0;this.fdb_image=this.fda_image=null;b?this.set_fda(b):(this.eject_fda(),this.cpu.devices.rtc.cmos_write(16,64));h(!c,"FDB not supported");this.io.register_read(1008,this,this.port3F0_read);this.io.register_read(1010,this,this.port3F2_read);this.io.register_read(1012,this,this.port3F4_read);
158
- this.io.register_read(1013,this,this.port3F5_read);this.io.register_read(1015,this,this.port3F7_read);this.io.register_write(1010,this,this.port3F2_write);this.io.register_write(1012,this,this.port3F4_write);this.io.register_write(1013,this,this.port3F5_write)}N.prototype.eject_fda=function(){this.fda_image=null;this.number_of_cylinders=this.number_of_heads=this.sectors_per_track=0;this.dir=128};N.prototype.set_fda=function(a){var b={[163840]:{type:1,tracks:40,sectors:8,heads:1},[184320]:{type:1,
159
- tracks:40,sectors:9,heads:1},[204800]:{type:1,tracks:40,sectors:10,heads:1},[327680]:{type:1,tracks:40,sectors:8,heads:2},[368640]:{type:1,tracks:40,sectors:9,heads:2},[409600]:{type:1,tracks:40,sectors:10,heads:2},[737280]:{type:3,tracks:80,sectors:9,heads:2},[1228800]:{type:2,tracks:80,sectors:15,heads:2},[1474560]:{type:4,tracks:80,sectors:18,heads:2},[1763328]:{type:5,tracks:82,sectors:21,heads:2},[2949120]:{type:5,tracks:80,sectors:36,heads:2},512:{type:1,tracks:1,sectors:1,heads:1}};let c=a.byteLength,
160
- d=b[c];d||(c=1474560<a.byteLength?2949120:1474560,d=b[c],h(a.buffer&&a.buffer instanceof ArrayBuffer),b=new Uint8Array(c),b.set(new Uint8Array(a.buffer)),a=new k.SyncBuffer(b.buffer),E("Warning: Unkown floppy size: "+a.byteLength+", assuming "+c));this.sectors_per_track=d.sectors;this.number_of_heads=d.heads;this.number_of_cylinders=d.tracks;this.fda_image=a;this.dir=128;this.cpu.devices.rtc.cmos_write(16,d.type<<4)};N.prototype.get_state=function(){var a=[];a[0]=this.bytes_expecting;a[1]=this.receiving_command;
161
- a[2]=this.receiving_index;a[4]=this.response_data;a[5]=this.response_index;a[6]=this.response_length;a[8]=this.status_reg0;a[9]=this.status_reg1;a[10]=this.status_reg2;a[11]=this.drive;a[12]=this.last_cylinder;a[13]=this.last_head;a[14]=this.last_sector;a[15]=this.dor;a[16]=this.sectors_per_track;a[17]=this.number_of_heads;a[18]=this.number_of_cylinders;return a};N.prototype.set_state=function(a){this.bytes_expecting=a[0];this.receiving_command=a[1];this.receiving_index=a[2];this.next_command=a[3];
162
- this.response_data=a[4];this.response_index=a[5];this.response_length=a[6];this.status_reg0=a[8];this.status_reg1=a[9];this.status_reg2=a[10];this.drive=a[11];this.last_cylinder=a[12];this.last_head=a[13];this.last_sector=a[14];this.dor=a[15];this.sectors_per_track=a[16];this.number_of_heads=a[17];this.number_of_cylinders=a[18]};N.prototype.port3F0_read=function(){E("3F0 read",8192);return 0};N.prototype.port3F4_read=function(){E("3F4 read",8192);var a=128;this.response_index<this.response_length&&
163
- (a|=80);0===(this.dor&8)&&(a|=32);return a};N.prototype.port3F7_read=function(){E("3F7 read",8192);return this.dir};N.prototype.port3F5_read=function(){if(this.response_index<this.response_length)return E("3F5 read: "+this.response_data[this.response_index],8192),this.cpu.device_lower_irq(6),this.response_data[this.response_index++];E("3F5 read, empty",8192);return 255};N.prototype.port3F4_write=function(a){E("3F4/data rate write: "+B(a),8192);a&128&&(E("dsr reset",8192),this.status_reg0=192,this.cpu.device_raise_irq(6))};
164
- N.prototype.port3F5_write=function(a){E("3F5 write "+B(a),8192);if(0<this.bytes_expecting){if(this.receiving_command[this.receiving_index++]=a,this.bytes_expecting--,0===this.bytes_expecting){a="3F5 command received: ";for(var b=0;b<this.receiving_index;b++)a+=B(this.receiving_command[b])+" ";E(a,8192);this.next_command.call(this,this.receiving_command)}}else{switch(a){case 3:this.next_command=this.fix_drive_data;this.bytes_expecting=2;break;case 19:this.next_command=this.configure;this.bytes_expecting=
165
- 3;break;case 4:this.next_command=this.check_drive_status;this.bytes_expecting=1;break;case 5:case 69:case 197:this.next_command=function(c){this.do_sector(!0,c)};this.bytes_expecting=8;break;case 6:case 70:case 198:case 230:this.next_command=function(c){this.do_sector(!1,c)};this.bytes_expecting=8;break;case 7:this.next_command=this.calibrate;this.bytes_expecting=1;break;case 8:this.check_interrupt_status();break;case 74:this.next_command=this.read_sector_id;this.bytes_expecting=1;break;case 15:this.bytes_expecting=
166
- 2;this.next_command=this.seek;break;case 14:case 16:E(14===a?"dump registers":"determine controller version",8192);this.status_reg0=128;this.response_data[0]=this.status_reg0;this.response_index=0;this.response_length=1;this.bytes_expecting=0;break;default:h(!1,"Unimplemented floppy command call "+B(a))}this.receiving_index=0}};N.prototype.port3F2_read=function(){E("read 3F2: DOR",8192);return this.dor};N.prototype.port3F2_write=function(a){4===(a&4)&&0===(this.dor&4)&&(this.status_reg0=192,this.cpu.device_raise_irq(6));
167
- E("start motors: "+B(a>>4),8192);E("enable dma/irq: "+!!(a&8),8192);E("reset fdc: "+!!(a&4),8192);E("drive select: "+(a&3),8192);0!==(a&3)&&E("guest: fdb not implemented",8192);E("DOR = "+B(a),8192);this.dor=a};N.prototype.check_drive_status=function(){E("check drive status",8192);this.status_reg1=this.fda_image?0:5;this.response_index=0;this.response_length=1;this.response_data[0]=0};N.prototype.seek=function(a){E("seek",8192);if(0!==(a[0]&3))E("seek on fdb",8192);else{var b=a[1];a=a[0]>>2&1;b!==
168
- this.last_cylinder&&(this.dir=0);this.status_reg1=this.fda_image?0:5;this.status_reg0=32;this.last_cylinder=b;this.last_head=a}this.raise_irq()};N.prototype.calibrate=function(a){E("floppy calibrate",8192);this.seek([a[0],0])};N.prototype.check_interrupt_status=function(){E("floppy check interrupt status",8192);this.response_index=0;this.response_length=2;this.response_data[0]=this.status_reg0;this.response_data[1]=this.last_cylinder};N.prototype.do_sector=function(a,b){var c=b[2],d=b[1],e=b[3],g=
169
- 128<<b[4],f=b[5]-b[3]+1,l=((c+this.number_of_heads*d)*this.sectors_per_track+e-1)*g;E("Floppy "+(a?"Write":"Read"),8192);E("from "+B(l)+" length "+B(f*g),8192);E(d+" / "+c+" / "+e,8192);b[4]||E("FDC: sector count is zero, use data length instead",8192);this.fda_image?(this.status_reg1=0,a?this.dma.do_write(this.fda_image,l,f*g,2,this.done.bind(this,b,d,c,e)):this.dma.do_read(this.fda_image,l,f*g,2,this.done.bind(this,b,d,c,e))):this.status_reg1=5};N.prototype.done=function(a,b,c,d,e){e?E("XXX: Unhandled floppy error",
170
- 8192):(d++,d>this.sectors_per_track&&(d=1,c++,c>=this.number_of_heads&&(c=0,b++)),b!==this.last_cylinder&&(this.dir=0),this.status_reg0=32,this.last_cylinder=b,this.last_head=c,this.last_sector=d,this.response_index=0,this.response_length=7,this.response_data[0]=c<<2|32,this.response_data[1]=0,this.response_data[2]=0,this.response_data[3]=b,this.response_data[4]=c,this.response_data[5]=d,this.response_data[6]=a[4],this.raise_irq())};N.prototype.fix_drive_data=function(a){E("floppy fix drive data "+
171
- a.slice(0,this.bytes_expecting),8192)};N.prototype.configure=function(a){E("floppy configure "+a.slice(0,this.bytes_expecting),8192)};N.prototype.read_sector_id=function(a){E("floppy read sector id "+a,8192);this.response_index=0;this.response_length=7;this.response_data[0]=0;this.response_data[1]=0;this.response_data[2]=0;this.response_data[3]=0;this.response_data[4]=0;this.response_data[5]=0;this.response_data[6]=0;this.raise_irq()};N.prototype.raise_irq=function(){this.dor&8&&this.cpu.device_raise_irq(6)};
172
- G.prototype.mmap_read8=function(a){a=this.memory_map_read8[a>>>17](a);h(0<=a&&255>=a);return a};G.prototype.mmap_write8=function(a,b){h(0<=b&&255>=b);this.memory_map_write8[a>>>17](a,b)};G.prototype.mmap_read16=function(a){var b=this.memory_map_read8[a>>>17];a=b(a)|b(a+1|0)<<8;h(0<=a&&65535>=a);return a};G.prototype.mmap_write16=function(a,b){var c=this.memory_map_write8[a>>>17];h(0<=b&&65535>=b);c(a,b&255);c(a+1|0,b>>8)};G.prototype.mmap_read32=function(a){return this.memory_map_read32[a>>>17](a)};
173
- G.prototype.mmap_write32=function(a,b){this.memory_map_write32[a>>>17](a,b)};G.prototype.mmap_write64=function(a,b,c){var d=a>>>17;h(d===a+7>>>17);d=this.memory_map_write32[d];d(a,b);d(a+4,c)};G.prototype.mmap_write128=function(a,b,c,d,e){var g=a>>>17;h(g===a+12>>>17);g=this.memory_map_write32[g];g(a,b);g(a+4,c);g(a+8,d);g(a+12,e)};G.prototype.write_blob=function(a,b){h(a&&0<=a.length);a.length&&(h(!this.in_mapped_range(b)),h(!this.in_mapped_range(b+a.length-1)),this.jit_dirty_cache(b,b+a.length),
174
- this.mem8.set(a,b))};G.prototype.read_blob=function(a,b){b&&(h(!this.in_mapped_range(a)),h(!this.in_mapped_range(a+b-1)));return this.mem8.subarray(a,a+b)};function O(a){this.cpu=a;this.channel_page=new Uint8Array(8);this.channel_pagehi=new Uint8Array(8);this.channel_addr=new Uint16Array(8);this.channel_addr_init=new Uint16Array(8);this.channel_count=new Uint16Array(8);this.channel_count_init=new Uint16Array(8);this.channel_mask=new Uint8Array(8);this.channel_mode=new Uint8Array(8);this.unmask_listeners=
175
- [];this.lsb_msb_flipflop=0;a=a.io;a.register_write(0,this,this.port_addr_write.bind(this,0));a.register_write(2,this,this.port_addr_write.bind(this,1));a.register_write(4,this,this.port_addr_write.bind(this,2));a.register_write(6,this,this.port_addr_write.bind(this,3));a.register_write(1,this,this.port_count_write.bind(this,0));a.register_write(3,this,this.port_count_write.bind(this,1));a.register_write(5,this,this.port_count_write.bind(this,2));a.register_write(7,this,this.port_count_write.bind(this,
176
- 3));a.register_read(0,this,this.port_addr_read.bind(this,0));a.register_read(2,this,this.port_addr_read.bind(this,1));a.register_read(4,this,this.port_addr_read.bind(this,2));a.register_read(6,this,this.port_addr_read.bind(this,3));a.register_read(1,this,this.port_count_read.bind(this,0));a.register_read(3,this,this.port_count_read.bind(this,1));a.register_read(5,this,this.port_count_read.bind(this,2));a.register_read(7,this,this.port_count_read.bind(this,3));a.register_write(192,this,this.port_addr_write.bind(this,
177
- 4));a.register_write(196,this,this.port_addr_write.bind(this,5));a.register_write(200,this,this.port_addr_write.bind(this,6));a.register_write(204,this,this.port_addr_write.bind(this,7));a.register_write(194,this,this.port_count_write.bind(this,4));a.register_write(198,this,this.port_count_write.bind(this,5));a.register_write(202,this,this.port_count_write.bind(this,6));a.register_write(206,this,this.port_count_write.bind(this,7));a.register_read(192,this,this.port_addr_read.bind(this,4));a.register_read(196,
178
- this,this.port_addr_read.bind(this,5));a.register_read(200,this,this.port_addr_read.bind(this,6));a.register_read(204,this,this.port_addr_read.bind(this,7));a.register_read(194,this,this.port_count_read.bind(this,4));a.register_read(198,this,this.port_count_read.bind(this,5));a.register_read(202,this,this.port_count_read.bind(this,6));a.register_read(206,this,this.port_count_read.bind(this,7));a.register_write(135,this,this.port_page_write.bind(this,0));a.register_write(131,this,this.port_page_write.bind(this,
179
- 1));a.register_write(129,this,this.port_page_write.bind(this,2));a.register_write(130,this,this.port_page_write.bind(this,3));a.register_write(143,this,this.port_page_write.bind(this,4));a.register_write(139,this,this.port_page_write.bind(this,5));a.register_write(137,this,this.port_page_write.bind(this,6));a.register_write(138,this,this.port_page_write.bind(this,7));a.register_read(135,this,this.port_page_read.bind(this,0));a.register_read(131,this,this.port_page_read.bind(this,1));a.register_read(129,
180
- this,this.port_page_read.bind(this,2));a.register_read(130,this,this.port_page_read.bind(this,3));a.register_read(143,this,this.port_page_read.bind(this,4));a.register_read(139,this,this.port_page_read.bind(this,5));a.register_read(137,this,this.port_page_read.bind(this,6));a.register_read(138,this,this.port_page_read.bind(this,7));a.register_write(1159,this,this.port_pagehi_write.bind(this,0));a.register_write(1155,this,this.port_pagehi_write.bind(this,1));a.register_write(1153,this,this.port_pagehi_write.bind(this,
181
- 2));a.register_write(1154,this,this.port_pagehi_write.bind(this,3));a.register_write(1163,this,this.port_pagehi_write.bind(this,5));a.register_write(1161,this,this.port_pagehi_write.bind(this,6));a.register_write(1162,this,this.port_pagehi_write.bind(this,7));a.register_read(1159,this,this.port_pagehi_read.bind(this,0));a.register_read(1155,this,this.port_pagehi_read.bind(this,1));a.register_read(1153,this,this.port_pagehi_read.bind(this,2));a.register_read(1154,this,this.port_pagehi_read.bind(this,
182
- 3));a.register_read(1163,this,this.port_pagehi_read.bind(this,5));a.register_read(1161,this,this.port_pagehi_read.bind(this,6));a.register_read(1162,this,this.port_pagehi_read.bind(this,7));a.register_write(10,this,this.port_singlemask_write.bind(this,0));a.register_write(212,this,this.port_singlemask_write.bind(this,4));a.register_write(15,this,this.port_multimask_write.bind(this,0));a.register_write(222,this,this.port_multimask_write.bind(this,4));a.register_read(15,this,this.port_multimask_read.bind(this,
183
- 0));a.register_read(222,this,this.port_multimask_read.bind(this,4));a.register_write(11,this,this.port_mode_write.bind(this,0));a.register_write(214,this,this.port_mode_write.bind(this,4));a.register_write(12,this,this.portC_write);a.register_write(216,this,this.portC_write)}O.prototype.get_state=function(){return[this.channel_page,this.channel_pagehi,this.channel_addr,this.channel_addr_init,this.channel_count,this.channel_count_init,this.channel_mask,this.channel_mode,this.lsb_msb_flipflop]};O.prototype.set_state=
184
- function(a){this.channel_page=a[0];this.channel_pagehi=a[1];this.channel_addr=a[2];this.channel_addr_init=a[3];this.channel_count=a[4];this.channel_count_init=a[5];this.channel_mask=a[6];this.channel_mode=a[7];this.lsb_msb_flipflop=a[8]};O.prototype.port_count_write=function(a,b){E("count write ["+a+"] = "+B(b),16);this.channel_count[a]=this.flipflop_get(this.channel_count[a],b,!1);this.channel_count_init[a]=this.flipflop_get(this.channel_count_init[a],b,!0)};O.prototype.port_count_read=function(a){E("count read ["+
185
- a+"] -> "+B(this.channel_count[a]),16);return this.flipflop_read(this.channel_count[a])};O.prototype.port_addr_write=function(a,b){E("addr write ["+a+"] = "+B(b),16);this.channel_addr[a]=this.flipflop_get(this.channel_addr[a],b,!1);this.channel_addr_init[a]=this.flipflop_get(this.channel_addr_init[a],b,!0)};O.prototype.port_addr_read=function(a){E("addr read ["+a+"] -> "+B(this.channel_addr[a]),16);return this.flipflop_read(this.channel_addr[a])};O.prototype.port_pagehi_write=function(a,b){E("pagehi write ["+
186
- a+"] = "+B(b),16);this.channel_pagehi[a]=b};O.prototype.port_pagehi_read=function(a){E("pagehi read ["+a+"]",16);return this.channel_pagehi[a]};O.prototype.port_page_write=function(a,b){E("page write ["+a+"] = "+B(b),16);this.channel_page[a]=b};O.prototype.port_page_read=function(a){E("page read ["+a+"]",16);return this.channel_page[a]};O.prototype.port_singlemask_write=function(a,b){a=(b&3)+a;b=b&4?1:0;E("singlechannel mask write ["+a+"] = "+b,16);this.update_mask(a,b)};O.prototype.port_multimask_write=
187
- function(a,b){E("multichannel mask write: "+B(b),16);for(var c=0;4>c;c++)this.update_mask(a+c,b&1<<c)};O.prototype.port_multimask_read=function(a){var b=0|this.channel_mask[a+0];b|=this.channel_mask[a+1]<<1;b|=this.channel_mask[a+2]<<2;b|=this.channel_mask[a+3]<<3;E("multichannel mask read: "+B(b),16);return b};O.prototype.port_mode_write=function(a,b){a=(b&3)+a;E("mode write ["+a+"] = "+B(b),16);this.channel_mode[a]=b};O.prototype.portC_write=function(){E("flipflop reset",16);this.lsb_msb_flipflop=
188
- 0};O.prototype.on_unmask=function(a,b){this.unmask_listeners.push({fn:a,this_value:b})};O.prototype.update_mask=function(a,b){if(this.channel_mask[a]!==b&&(this.channel_mask[a]=b,!b))for(E("firing on_unmask("+a+")",16),b=0;b<this.unmask_listeners.length;b++)this.unmask_listeners[b].fn.call(this.unmask_listeners[b].this_value,a)};O.prototype.do_read=function(a,b,c,d,e){var g=this.count_get_8bit(d),f=this.address_get_8bit(d);E("DMA write channel "+d,16);E("to "+B(f)+" len "+B(g),16);c<g&&E("DMA should read more than provided: "+
189
- B(c)+" "+B(g),16);if(b+g>a.byteLength)E("DMA read outside of buffer",16),e(!0);else{var l=this.cpu;this.channel_addr[d]+=g;a.get(b,g,function(n){l.write_blob(n,f);e(!1)})}};O.prototype.do_write=function(a,b,c,d,e){var g=this.channel_count[d]+1&65535,f=5<=d?2:1,l=g*f,n=this.address_get_8bit(d),m=!1,q=!1,r=this.channel_mode[d]&16;E("DMA write channel "+d,16);E("to "+B(n)+" len "+B(l),16);c<l?(E("DMA should read more than provided",16),g=Math.floor(c/f),l=g*f,m=!0):c>l&&(E("DMA attempted to read more than provided",
190
- 16),q=!0);b+l>a.byteLength?(E("DMA write outside of buffer",16),e(!0)):(this.channel_addr[d]+=g,this.channel_count[d]-=g,!m&&r&&(E("DMA autoinit",16),this.channel_addr[d]=this.channel_addr_init[d],this.channel_count[d]=this.channel_count_init[d]),a.set(b,this.cpu.mem8.subarray(n,n+l),()=>{q&&r?(E("DMA continuing from start",16),this.do_write(a,b+l,c-l,d,e)):e(!1)}))};O.prototype.address_get_8bit=function(a){var b=this.channel_addr[a];5<=a&&(b<<=1);b=b&65535|this.channel_page[a]<<16;return b|=this.channel_pagehi[a]<<
191
- 24};O.prototype.count_get_8bit=function(a){var b=this.channel_count[a]+1;5<=a&&(b*=2);return b};O.prototype.flipflop_get=function(a,b,c){c||(this.lsb_msb_flipflop^=1);return this.lsb_msb_flipflop?a&-256|b:a&-65281|b<<8};O.prototype.flipflop_read=function(a){return(this.lsb_msb_flipflop^=1)?a&255:a>>8&255};function Aa(a,b){this.cpu=a;this.bus=b;this.counter_start_time=new Float64Array(3);this.counter_start_value=new Uint16Array(3);this.counter_next_low=new Uint8Array(4);this.counter_enabled=new Uint8Array(4);
192
- this.counter_mode=new Uint8Array(4);this.counter_read_mode=new Uint8Array(4);this.counter_latch=new Uint8Array(4);this.counter_latch_value=new Uint16Array(3);this.counter_reload=new Uint16Array(3);a.io.register_read(97,this,function(){var c=F.microtick(),d=66.66666666666667*c&1;c=this.did_rollover(2,c);return d<<4|c<<5});a.io.register_write(97,this,function(c){c&1?this.bus.send("pcspeaker-enable"):this.bus.send("pcspeaker-disable")});a.io.register_read(64,this,function(){return this.counter_read(0)});
193
- a.io.register_read(65,this,function(){return this.counter_read(1)});a.io.register_read(66,this,function(){return this.counter_read(2)});a.io.register_write(64,this,function(c){this.counter_write(0,c)});a.io.register_write(65,this,function(c){this.counter_write(1,c)});a.io.register_write(66,this,function(c){this.counter_write(2,c);this.bus.send("pcspeaker-update",[this.counter_mode[2],this.counter_reload[2]])});a.io.register_write(67,this,this.port43_write)}Aa.prototype.get_state=function(){var a=
194
- [];a[0]=this.counter_next_low;a[1]=this.counter_enabled;a[2]=this.counter_mode;a[3]=this.counter_read_mode;a[4]=this.counter_latch;a[5]=this.counter_latch_value;a[6]=this.counter_reload;a[7]=this.counter_start_time;a[8]=this.counter_start_value;return a};Aa.prototype.set_state=function(a){this.counter_next_low=a[0];this.counter_enabled=a[1];this.counter_mode=a[2];this.counter_read_mode=a[3];this.counter_latch=a[4];this.counter_latch_value=a[5];this.counter_reload=a[6];this.counter_start_time=a[7];
195
- this.counter_start_value=a[8]};Aa.prototype.timer=function(a,b){var c=100;b||(this.counter_enabled[0]&&this.did_rollover(0,a)?(this.counter_start_value[0]=this.get_counter_value(0,a),this.counter_start_time[0]=a,E("pit interrupt. new value: "+this.counter_start_value[0],512),this.cpu.device_lower_irq(0),this.cpu.device_raise_irq(0),0===this.counter_mode[0]&&(this.counter_enabled[0]=0)):this.cpu.device_lower_irq(0),this.counter_enabled[0]&&(c=(this.counter_start_value[0]-Math.floor(1193.1816666*(a-
196
- this.counter_start_time[0])))/1193.1816666));return c};Aa.prototype.get_counter_value=function(a,b){if(!this.counter_enabled[a])return 0;var c=b-this.counter_start_time[a],d=Math.floor(1193.1816666*c);b=this.counter_start_value[a]-d;E("diff="+c+" dticks="+d+" value="+b+" reload="+this.counter_reload[a],512);c=this.counter_reload[a];b>=c?(E("Warning: Counter"+a+" value "+b+" is larger than reload "+c,512),b%=c):0>b&&(b=b%c+c);return b};Aa.prototype.did_rollover=function(a,b){b-=this.counter_start_time[a];
197
- return 0>b?(E("Warning: PIT timer difference is negative, resetting (timer "+a+")"),!0):this.counter_start_value[a]<Math.floor(1193.1816666*b)};Aa.prototype.counter_read=function(a){var b=this.counter_latch[a];if(b)return this.counter_latch[a]--,2===b?this.counter_latch_value[a]&255:this.counter_latch_value[a]>>8;b=this.counter_next_low[a];3===this.counter_mode[a]&&(this.counter_next_low[a]^=1);a=this.get_counter_value(a,F.microtick());return b?a&255:a>>8};Aa.prototype.counter_write=function(a,b){this.counter_reload[a]=
198
- this.counter_next_low[a]?this.counter_reload[a]&-256|b:this.counter_reload[a]&255|b<<8;3===this.counter_read_mode[a]&&this.counter_next_low[a]||(this.counter_reload[a]||(this.counter_reload[a]=65535),this.counter_start_value[a]=this.counter_reload[a],this.counter_enabled[a]=!0,this.counter_start_time[a]=F.microtick(),E("counter"+a+" reload="+B(this.counter_reload[a])+" tick="+(this.counter_reload[a]||65536)/1193.1816666+"ms",512));3===this.counter_read_mode[a]&&(this.counter_next_low[a]^=1)};Aa.prototype.port43_write=
199
- function(a){var b=a>>1&7,c=a&1,d=a>>6&3;a=a>>4&3;1===d&&E("Unimplemented timer1",512);3===d?E("Unimplemented read back",512):0===a?(this.counter_latch[d]=2,b=this.get_counter_value(d,F.microtick()),E("latch: "+b,512),this.counter_latch_value[d]=b?b-1:0):(6<=b&&(b&=-5),E("Control: mode="+b+" ctr="+d+" read_mode="+a+" bcd="+c,512),this.counter_next_low[d]=1===a?0:1,0===d&&this.cpu.device_lower_irq(0),0!==b&&3!==b&&2!==b&&E("Unimplemented counter mode: "+B(b),512),this.counter_mode[d]=b,this.counter_read_mode[d]=
200
- a,2===d&&this.bus.send("pcspeaker-update",[this.counter_mode[2],this.counter_reload[2]]))};Aa.prototype.dump=function(){const a=this.counter_reload[0];E("counter0 ticks every "+(a||65536)/1193.1816666+"ms (reload="+a+")")};const Ba=Uint32Array.from([655360,655360,720896,753664]),Ca=Uint32Array.from([131072,65536,32768,32768]);function P(a,b,c,d){this.cpu=a;this.bus=b;this.screen=c;this.vga_memory_size=d;this.cursor_address=0;this.cursor_scanline_start=14;this.cursor_scanline_end=15;this.max_cols=
201
- 80;this.max_rows=25;this.virtual_height=this.virtual_width=this.screen_height=this.screen_width=0;this.layers=[];this.start_address_latched=this.start_address=0;this.crtc=new Uint8Array(25);this.line_compare=this.offset_register=this.preset_row_scan=this.underline_location_register=this.vertical_blank_start=this.vertical_display_enable_end=this.horizontal_blank_start=this.horizontal_display_enable_end=this.crtc_mode=0;this.graphical_mode=!1;this.vga256_palette=new Int32Array(256);this.latch_dword=
202
- 0;this.svga_version=45253;this.svga_height=this.svga_width=0;this.svga_enabled=!1;this.svga_bpp=32;this.svga_offset_y=this.svga_offset_x=this.svga_offset=this.svga_bank_offset=0;this.vga_memory_size=void 0===this.vga_memory_size||262144>this.vga_memory_size?262144:268435456<this.vga_memory_size?268435456:k.round_up_to_next_power_of_2(this.vga_memory_size);E("effective vga memory size: "+this.vga_memory_size,256);this.pci_space=[52,18,17,17,3,1,0,0,0,0,0,3,0,0,0,0,8,14680064,57344,224,0,0,0,0,0,0,
203
- 191,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,26,0,17,0,0,190,254,0,0,0,0,0,0,0,0,0,0,0,0];this.pci_id=144;this.pci_bars=[{size:this.vga_memory_size}];this.pci_rom_size=65536;this.pci_rom_address=4272947200;this.name="vga";this.dac_state=this.dac_color_index_read=this.dac_color_index_write=this.index_crtc=0;this.dac_mask=255;this.dac_map=new Uint8Array(16);this.attribute_controller_index=-1;this.palette_source=32;this.color_select=this.horizontal_panning=this.color_plane_enable=this.attribute_mode=
204
- 0;this.sequencer_index=-1;this.plane_write_bm=15;this.clocking_mode=this.sequencer_memory_mode=0;this.graphics_index=-1;this.planar_rotate_reg=this.planar_mode=this.plane_read=this.character_map_select=0;this.planar_bitmap=255;this.max_scan_line=this.color_dont_care=this.color_compare=this.miscellaneous_graphics_register=this.planar_setreset_enable=this.planar_setreset=0;this.port_3DA_value=this.miscellaneous_output_register=255;this.font_page_ab_enabled=!1;b=a.io;b.register_write(960,this,this.port3C0_write);
205
- b.register_read(960,this,this.port3C0_read,this.port3C0_read16);b.register_read(961,this,this.port3C1_read);b.register_write(962,this,this.port3C2_write);b.register_write_consecutive(964,this,this.port3C4_write,this.port3C5_write);b.register_read(964,this,this.port3C4_read);b.register_read(965,this,this.port3C5_read);b.register_write_consecutive(974,this,this.port3CE_write,this.port3CF_write);b.register_read(974,this,this.port3CE_read);b.register_read(975,this,this.port3CF_read);b.register_read(966,
206
- this,this.port3C6_read);b.register_write(966,this,this.port3C6_write);b.register_write(967,this,this.port3C7_write);b.register_read(967,this,this.port3C7_read);b.register_write(968,this,this.port3C8_write);b.register_read(968,this,this.port3C8_read);b.register_write(969,this,this.port3C9_write);b.register_read(969,this,this.port3C9_read);b.register_read(972,this,this.port3CC_read);b.register_write(980,this,this.port3D4_write,this.port3D4_write16);b.register_write(981,this,this.port3D5_write,this.port3D5_write16);
207
- b.register_read(980,this,this.port3D4_read);b.register_read(981,this,this.port3D5_read,this.port3D5_read16);b.register_write(948,this,this.port3D4_write,this.port3D4_write16);b.register_write(949,this,this.port3D5_write,this.port3D5_write16);b.register_read(948,this,this.port3D4_read);b.register_read(949,this,this.port3D5_read,this.port3D5_read16);b.register_read(970,this,function(){E("3CA read",256);return 0});b.register_read(986,this,this.port3DA_read);b.register_read(954,this,this.port3DA_read);
208
- this.dispi_index=-1;this.dispi_enable_value=0;b.register_write(462,this,void 0,this.port1CE_write);b.register_write(463,this,void 0,this.port1CF_write);b.register_read(463,this,void 0,this.port1CF_read);c=a.svga_allocate_memory(this.vga_memory_size)>>>0;this.svga_memory=k.view(Uint8Array,a.wasm_memory,c,this.vga_memory_size);this.diff_addr_min=this.vga_memory_size;this.diff_addr_max=0;this.diff_plot_min=this.vga_memory_size;this.diff_plot_max=0;this.image_data=null;this.vga_memory=new Uint8Array(262144);
209
- this.plane0=new Uint8Array(this.vga_memory.buffer,0,65536);this.plane1=new Uint8Array(this.vga_memory.buffer,65536,65536);this.plane2=new Uint8Array(this.vga_memory.buffer,131072,65536);this.plane3=new Uint8Array(this.vga_memory.buffer,196608,65536);this.pixel_buffer=new Uint8Array(524288);b.mmap_register(655360,131072,e=>this.vga_memory_read(e),(e,g)=>this.vga_memory_write(e,g));a.devices.pci.register_device(this)}P.prototype.get_state=function(){var a=[];a[0]=this.vga_memory_size;a[1]=this.cursor_address;
210
- a[2]=this.cursor_scanline_start;a[3]=this.cursor_scanline_end;a[4]=this.max_cols;a[5]=this.max_rows;a[6]=this.vga_memory;a[7]=this.dac_state;a[8]=this.start_address;a[9]=this.graphical_mode;a[10]=this.vga256_palette;a[11]=this.latch_dword;a[12]=this.color_compare;a[13]=this.color_dont_care;a[14]=this.miscellaneous_graphics_register;a[15]=this.svga_width;a[16]=this.svga_height;a[17]=this.crtc_mode;a[18]=this.svga_enabled;a[19]=this.svga_bpp;a[20]=this.svga_bank_offset;a[21]=this.svga_offset;a[22]=
211
- this.index_crtc;a[23]=this.dac_color_index_write;a[24]=this.dac_color_index_read;a[25]=this.dac_map;a[26]=this.sequencer_index;a[27]=this.plane_write_bm;a[28]=this.sequencer_memory_mode;a[29]=this.graphics_index;a[30]=this.plane_read;a[31]=this.planar_mode;a[32]=this.planar_rotate_reg;a[33]=this.planar_bitmap;a[34]=this.max_scan_line;a[35]=this.miscellaneous_output_register;a[36]=this.port_3DA_value;a[37]=this.dispi_index;a[38]=this.dispi_enable_value;a[39]=this.svga_memory;a[41]=this.attribute_controller_index;
212
- a[42]=this.offset_register;a[43]=this.planar_setreset;a[44]=this.planar_setreset_enable;a[45]=this.start_address_latched;a[46]=this.crtc;a[47]=this.horizontal_display_enable_end;a[48]=this.horizontal_blank_start;a[49]=this.vertical_display_enable_end;a[50]=this.vertical_blank_start;a[51]=this.underline_location_register;a[52]=this.preset_row_scan;a[53]=this.offset_register;a[54]=this.palette_source;a[55]=this.attribute_mode;a[56]=this.color_plane_enable;a[57]=this.horizontal_panning;a[58]=this.color_select;
213
- a[59]=this.clocking_mode;a[60]=this.line_compare;a[61]=this.pixel_buffer;a[62]=this.dac_mask;a[63]=this.character_map_select;a[64]=this.font_page_ab_enabled;return a};P.prototype.set_state=function(a){this.vga_memory_size=a[0];this.cursor_address=a[1];this.cursor_scanline_start=a[2];this.cursor_scanline_end=a[3];this.max_cols=a[4];this.max_rows=a[5];a[6]&&this.vga_memory.set(a[6]);this.dac_state=a[7];this.start_address=a[8];this.graphical_mode=a[9];this.vga256_palette=a[10];this.latch_dword=a[11];
214
- this.color_compare=a[12];this.color_dont_care=a[13];this.miscellaneous_graphics_register=a[14];this.svga_width=a[15];this.svga_height=a[16];this.crtc_mode=a[17];this.svga_enabled=a[18];this.svga_bpp=a[19];this.svga_bank_offset=a[20];this.svga_offset=a[21];this.index_crtc=a[22];this.dac_color_index_write=a[23];this.dac_color_index_read=a[24];this.dac_map=a[25];this.sequencer_index=a[26];this.plane_write_bm=a[27];this.sequencer_memory_mode=a[28];this.graphics_index=a[29];this.plane_read=a[30];this.planar_mode=
215
- a[31];this.planar_rotate_reg=a[32];this.planar_bitmap=a[33];this.max_scan_line=a[34];this.miscellaneous_output_register=a[35];this.port_3DA_value=a[36];this.dispi_index=a[37];this.dispi_enable_value=a[38];this.svga_memory.set(a[39]);this.attribute_controller_index=a[41];this.offset_register=a[42];this.planar_setreset=a[43];this.planar_setreset_enable=a[44];this.start_address_latched=a[45];this.crtc.set(a[46]);this.horizontal_display_enable_end=a[47];this.horizontal_blank_start=a[48];this.vertical_display_enable_end=
216
- a[49];this.vertical_blank_start=a[50];this.underline_location_register=a[51];this.preset_row_scan=a[52];this.offset_register=a[53];this.palette_source=a[54];this.attribute_mode=a[55];this.color_plane_enable=a[56];this.horizontal_panning=a[57];this.color_select=a[58];this.clocking_mode=a[59];this.line_compare=a[60];a[61]&&this.pixel_buffer.set(a[61]);this.dac_mask=void 0===a[62]?255:a[62];this.character_map_select=void 0===a[63]?0:a[63];this.font_page_ab_enabled=void 0===a[64]?0:a[64];this.screen.set_mode(this.graphical_mode);
217
- this.graphical_mode?(this.screen_height=this.screen_width=0,this.svga_enabled?(this.set_size_graphical(this.svga_width,this.svga_height,this.svga_width,this.svga_height,this.svga_bpp),this.update_layers()):(this.update_vga_size(),this.update_layers(),this.complete_replot())):(this.set_font_bitmap(!0),this.set_size_text(this.max_cols,this.max_rows),this.set_font_page(),this.update_cursor_scanline(),this.update_cursor());this.complete_redraw()};P.prototype.vga_memory_read=function(a){if(this.svga_enabled)return this.cpu.read8((a-
218
- 655360|this.svga_bank_offset)+3758096384|0);var b=this.miscellaneous_graphics_register>>2&3;a-=Ba[b];if(0>a||a>=Ca[b])return E("vga read outside memory space: addr:"+B(a),256),0;this.latch_dword=this.plane0[a];this.latch_dword|=this.plane1[a]<<8;this.latch_dword|=this.plane2[a]<<16;this.latch_dword|=this.plane3[a]<<24;if(this.planar_mode&8)return b=255,this.color_dont_care&1&&(b&=this.plane0[a]^~(this.color_compare&1?255:0)),this.color_dont_care&2&&(b&=this.plane1[a]^~(this.color_compare&2?255:0)),
219
- this.color_dont_care&4&&(b&=this.plane2[a]^~(this.color_compare&4?255:0)),this.color_dont_care&8&&(b&=this.plane3[a]^~(this.color_compare&8?255:0)),b;b=this.plane_read;this.graphical_mode?this.sequencer_memory_mode&8?(b=a&3,a&=-4):this.planar_mode&16&&(b=a&1,a&=-2):b&=3;return this.vga_memory[b<<16|a]};P.prototype.vga_memory_write=function(a,b){if(this.svga_enabled)this.cpu.write8((a-655360|this.svga_bank_offset)+3758096384|0,b);else{var c=this.miscellaneous_graphics_register>>2&3;a-=Ba[c];0>a||a>=
220
- Ca[c]?E("vga write outside memory space: addr:"+B(a)+", value:"+B(b),256):this.graphical_mode?this.vga_memory_write_graphical(a,b):this.plane_write_bm&3?this.vga_memory_write_text_mode(a,b):this.plane_write_bm&4&&(this.plane2[a]=b)}};P.prototype.vga_memory_write_graphical=function(a,b){var c=this.planar_mode&3,d=this.apply_feed(this.planar_bitmap),e=this.apply_expand(this.planar_setreset),g=this.apply_expand(this.planar_setreset_enable);switch(c){case 0:b=this.apply_rotate(b);var f=this.apply_feed(b);
221
- f=this.apply_setreset(f,g);f=this.apply_logical(f,this.latch_dword);f=this.apply_bitmask(f,d);break;case 1:f=this.latch_dword;break;case 2:f=this.apply_expand(b);f=this.apply_logical(f,this.latch_dword);f=this.apply_bitmask(f,d);break;case 3:b=this.apply_rotate(b),d&=this.apply_feed(b),f=this.apply_bitmask(e,d)}b=15;switch(this.sequencer_memory_mode&12){case 0:b=5<<(a&1);a&=-2;break;case 8:case 12:b=1<<(a&3),a&=-4}b&=this.plane_write_bm;b&1&&(this.plane0[a]=f>>0&255);b&2&&(this.plane1[a]=f>>8&255);
222
- b&4&&(this.plane2[a]=f>>16&255);b&8&&(this.plane3[a]=f>>24&255);a=this.vga_addr_to_pixel(a);this.partial_replot(a,a+7)};P.prototype.apply_feed=function(a){return a|a<<8|a<<16|a<<24};P.prototype.apply_expand=function(a){return(a&1?255:0)|(a&2?255:0)<<8|(a&4?255:0)<<16|(a&8?255:0)<<24};P.prototype.apply_rotate=function(a){return(a|a<<8)>>>(this.planar_rotate_reg&7)&255};P.prototype.apply_setreset=function(a,b){var c=this.apply_expand(this.planar_setreset);return(a|b&c)&(~b|c)};P.prototype.apply_logical=
223
- function(a,b){switch(this.planar_rotate_reg&24){case 8:return a&b;case 16:return a|b;case 24:return a^b}return a};P.prototype.apply_bitmask=function(a,b){return b&a|~b&this.latch_dword};P.prototype.text_mode_redraw=function(){const a=this.scan_line_to_screen_row(this.line_compare),b=Math.max(0,2*(2*this.offset_register-this.max_cols)),c=this.attribute_mode&8,d=this.font_page_ab_enabled?7:15,e=c?7:15,g=this.screen.FLAG_BLINKING,f=this.screen.FLAG_FONT_PAGE_B;let l=this.start_address<<1;for(let n=0;n<
224
- this.max_rows;n++){n===a&&(l=0);for(let m=0;m<this.max_cols;m++){const q=this.vga_memory[l],r=this.vga_memory[l|1],t=(c&&r&128?g:0)|(!this.font_page_ab_enabled||r&8?0:f);this.bus.send("screen-put-char",[n,m,q]);this.screen.put_char(n,m,q,t,this.vga256_palette[this.dac_mask&this.dac_map[r>>4&e]],this.vga256_palette[this.dac_mask&this.dac_map[r&d]]);l+=2}l+=b}};P.prototype.vga_memory_write_text_mode=function(a,b){this.vga_memory[a]=b;var c=Math.max(this.max_cols,2*this.offset_register);let d;if(a>>
225
- 1>=this.start_address){var e=(a>>1)-this.start_address;d=e/c|0;c=e%c}else e=a>>1,d=(e/c|0)+this.scan_line_to_screen_row(this.line_compare),c=e%c;h(0<=d&&0<=c);if(!(c>=this.max_cols||d>=this.max_rows)){a&1?(e=b,b=this.vga_memory[a&-2]):e=this.vga_memory[a|1];var g=this.attribute_mode&8;a=(g&&e&128?this.screen.FLAG_BLINKING:0)|(!this.font_page_ab_enabled||e&8?0:this.screen.FLAG_FONT_PAGE_B);var f=this.font_page_ab_enabled?7:15;g=g?7:15;this.bus.send("screen-put-char",[d,c,b]);this.screen.put_char(d,
226
- c,b,a,this.vga256_palette[this.dac_mask&this.dac_map[e>>4&g]],this.vga256_palette[this.dac_mask&this.dac_map[e&f]])}};P.prototype.update_cursor=function(){var a=Math.max(this.max_cols,2*this.offset_register);let b;this.cursor_address>=this.start_address?(b=(this.cursor_address-this.start_address)/a|0,a=(this.cursor_address-this.start_address)%a):(b=(this.cursor_address/a|0)+this.scan_line_to_screen_row(this.line_compare),a=this.cursor_address%a);h(0<=b&&0<=a);this.screen.update_cursor(b,a)};P.prototype.complete_redraw=
227
- function(){E("complete redraw",256);this.graphical_mode?this.svga_enabled?this.cpu.svga_mark_dirty():(this.diff_addr_min=0,this.diff_addr_max=524288):this.text_mode_redraw()};P.prototype.complete_replot=function(){E("complete replot",256);this.graphical_mode&&!this.svga_enabled&&(this.diff_plot_min=0,this.diff_plot_max=524288,this.complete_redraw())};P.prototype.partial_redraw=function(a,b){a<this.diff_addr_min&&(this.diff_addr_min=a);b>this.diff_addr_max&&(this.diff_addr_max=b)};P.prototype.partial_replot=
228
- function(a,b){a<this.diff_plot_min&&(this.diff_plot_min=a);b>this.diff_plot_max&&(this.diff_plot_max=b);this.partial_redraw(a,b)};P.prototype.reset_diffs=function(){this.diff_addr_min=this.vga_memory_size;this.diff_addr_max=0;this.diff_plot_min=this.vga_memory_size;this.diff_plot_max=0};P.prototype.destroy=function(){};P.prototype.vga_bytes_per_line=function(){var a=this.offset_register<<2;this.underline_location_register&64?a<<=1:this.crtc_mode&64&&(a>>>=1);return a};P.prototype.vga_addr_shift_count=
229
- function(){var a=128+(~this.underline_location_register&this.crtc_mode&64);a-=this.underline_location_register&64;a-=this.attribute_mode&64;return a>>>6};P.prototype.vga_addr_to_pixel=function(a){var b=this.vga_addr_shift_count();if(~this.crtc_mode&3){var c=a-this.start_address;c&=this.crtc_mode<<13|-24577;c<<=b;var d=c/this.virtual_width|0;c%=this.virtual_width;switch(this.crtc_mode&3){case 2:d=d<<1|a>>13&1;break;case 1:d=d<<1|a>>14&1;break;case 0:d=d<<2|a>>13&3}return d*this.virtual_width+c+(this.start_address<<
230
- b)}return a<<b};P.prototype.scan_line_to_screen_row=function(a){this.max_scan_line&128&&(a>>>=1);a=Math.ceil(a/(1+(this.max_scan_line&31)));this.crtc_mode&1||(a<<=1);this.crtc_mode&2||(a<<=1);return a};P.prototype.set_size_text=function(a,b){h(!this.graphical_mode);this.max_cols=a;this.max_rows=b;this.screen.set_size_text(a,b);this.bus.send("screen-set-size",[a,b,0])};P.prototype.set_size_graphical=function(a,b,c,d,e){h(this.graphical_mode);c=Math.max(c,1);d=Math.max(d,1);if(this.screen_width!==a||
231
- this.screen_height!==b||this.virtual_width!==c||this.virtual_height!==d){this.screen_width=a;this.screen_height=b;this.virtual_width=c;this.virtual_height=d;if("undefined"!==typeof ImageData){const g=c*d,f=this.cpu.svga_allocate_dest_buffer(g)>>>0;this.dest_buffet_offset=f;this.image_data=new ImageData(new Uint8ClampedArray(this.cpu.wasm_memory.buffer,f,4*g),c,d);this.cpu.svga_mark_dirty()}this.screen.set_size_graphical(a,b,c,d);this.bus.send("screen-set-size",[a,b,e])}};P.prototype.update_vga_size=
232
- function(){if(!this.svga_enabled){var a=Math.min(1+this.horizontal_display_enable_end,this.horizontal_blank_start),b=Math.min(1+this.vertical_display_enable_end,this.vertical_blank_start);if(a&&b)if(this.graphical_mode){a<<=3;var c=this.offset_register<<4;this.attribute_mode&64&&(a>>>=1,c>>>=1);b=this.scan_line_to_screen_row(b);var d=Ca[0];const e=this.vga_bytes_per_line();this.set_size_graphical(a,b,c,e?Math.ceil(d/e):b,8);this.update_vertical_retrace();this.update_layers()}else this.max_scan_line&
233
- 128&&(b>>>=1),c=b/(1+(this.max_scan_line&31))|0,a&&c&&this.set_size_text(a,c)}};P.prototype.update_layers=function(){this.graphical_mode||this.text_mode_redraw();if(this.svga_enabled)this.layers=[];else if(this.virtual_width&&this.screen_width)if(!this.palette_source||this.clocking_mode&32)this.layers=[],this.screen.clear_screen();else{var a=this.start_address_latched,b=this.horizontal_panning;this.attribute_mode&64&&(b>>>=1);var c=this.preset_row_scan>>5&3,d=this.vga_addr_to_pixel(a+c);a=d/this.virtual_width|
234
- 0;var e=d%this.virtual_width+b;d=this.scan_line_to_screen_row(1+this.line_compare);d=Math.min(d,this.screen_height);var g=this.screen_height-d;this.layers=[];e=-e;for(var f=0;e<this.screen_width;e+=this.virtual_width,f++)this.layers.push({image_data:this.image_data,screen_x:e,screen_y:0,buffer_x:0,buffer_y:a+f,buffer_width:this.virtual_width,buffer_height:d});a=0;this.attribute_mode&32||(a=this.vga_addr_to_pixel(c)+b);e=-a;for(f=0;e<this.screen_width;e+=this.virtual_width,f++)this.layers.push({image_data:this.image_data,
235
- screen_x:e,screen_y:d,buffer_x:0,buffer_y:f,buffer_width:this.virtual_width,buffer_height:g})}};P.prototype.update_vertical_retrace=function(){this.port_3DA_value|=8;this.start_address_latched!==this.start_address&&(this.start_address_latched=this.start_address,this.update_layers())};P.prototype.update_cursor_scanline=function(){var a=this.max_scan_line&31;const b=Math.min(a,this.cursor_scanline_start&31);a=Math.min(a,this.cursor_scanline_end&31);this.screen.update_cursor_scanline(b,a,!(this.cursor_scanline_start&
236
- 32)&&b<a)};P.prototype.port3C0_write=function(a){if(-1===this.attribute_controller_index)E("attribute controller index register: "+B(a),256),this.attribute_controller_index=a&31,E("attribute actual index: "+B(this.attribute_controller_index),256),this.palette_source!==(a&32)&&(this.palette_source=a&32,this.update_layers());else{if(16>this.attribute_controller_index)E("internal palette: "+B(this.attribute_controller_index)+" -> "+B(a),256),this.dac_map[this.attribute_controller_index]=a,this.attribute_mode&
237
- 64||this.complete_redraw();else switch(this.attribute_controller_index){case 16:E("3C0 / attribute mode control: "+B(a),256);if(this.attribute_mode!==a){var b=this.attribute_mode;this.attribute_mode=a;const c=0!==(a&1);this.svga_enabled||this.graphical_mode===c||(this.graphical_mode=c,this.screen.set_mode(this.graphical_mode));(b^a)&64&&this.complete_replot();this.update_vga_size();this.complete_redraw();this.set_font_bitmap(!1)}break;case 18:E("3C0 / color plane enable: "+B(a),256);this.color_plane_enable!==
238
- a&&(this.color_plane_enable=a,this.complete_redraw());break;case 19:E("3C0 / horizontal panning: "+B(a),256);this.horizontal_panning!==a&&(this.horizontal_panning=a&15,this.update_layers());break;case 20:E("3C0 / color select: "+B(a),256);this.color_select!==a&&(this.color_select=a,this.complete_redraw());break;default:E("3C0 / attribute controller write "+B(this.attribute_controller_index)+": "+B(a),256)}this.attribute_controller_index=-1}};P.prototype.port3C0_read=function(){E("3C0 read",256);return(this.attribute_controller_index|
239
- this.palette_source)&255};P.prototype.port3C0_read16=function(){E("3C0 read16",256);return this.port3C0_read()|this.port3C1_read()<<8&65280};P.prototype.port3C1_read=function(){if(16>this.attribute_controller_index)return E("3C1 / internal palette read: "+B(this.attribute_controller_index)+" -> "+B(this.dac_map[this.attribute_controller_index]),256),this.dac_map[this.attribute_controller_index]&255;switch(this.attribute_controller_index){case 16:return E("3C1 / attribute mode read: "+B(this.attribute_mode),
240
- 256),this.attribute_mode;case 18:return E("3C1 / color plane enable read: "+B(this.color_plane_enable),256),this.color_plane_enable;case 19:return E("3C1 / horizontal panning read: "+B(this.horizontal_panning),256),this.horizontal_panning;case 20:return E("3C1 / color select read: "+B(this.color_select),256),this.color_select;default:E("3C1 / attribute controller read "+B(this.attribute_controller_index),256)}return 255};P.prototype.port3C2_write=function(a){E("3C2 / miscellaneous output register = "+
241
- B(a),256);this.miscellaneous_output_register=a};P.prototype.port3C4_write=function(a){this.sequencer_index=a};P.prototype.port3C4_read=function(){return this.sequencer_index};P.prototype.port3C5_write=function(a){switch(this.sequencer_index){case 1:E("clocking mode: "+B(a),256);var b=this.clocking_mode;this.clocking_mode=a;(b^a)&32&&this.update_layers();this.set_font_bitmap(!1);break;case 2:E("plane write mask: "+B(a),256);b=this.plane_write_bm;this.plane_write_bm=a;this.graphical_mode||!(b&4)||this.plane_write_bm&
242
- 4||this.set_font_bitmap(!0);break;case 3:E("character map select: "+B(a),256);b=this.character_map_select;this.character_map_select=a;this.graphical_mode||b===a||this.set_font_page();break;case 4:E("sequencer memory mode: "+B(a),256);this.sequencer_memory_mode=a;break;default:E("3C5 / sequencer write "+B(this.sequencer_index)+": "+B(a),256)}};P.prototype.port3C5_read=function(){E("3C5 / sequencer read "+B(this.sequencer_index),256);switch(this.sequencer_index){case 1:return this.clocking_mode;case 2:return this.plane_write_bm;
243
- case 3:return this.character_map_select;case 4:return this.sequencer_memory_mode;case 6:return 18}return 0};P.prototype.port3C6_write=function(a){this.dac_mask!==a&&(this.dac_mask=a,this.complete_redraw())};P.prototype.port3C6_read=function(){return this.dac_mask};P.prototype.port3C7_write=function(a){E("3C7 write: "+B(a),256);this.dac_color_index_read=3*a;this.dac_state&=0};P.prototype.port3C7_read=function(){return this.dac_state};P.prototype.port3C8_write=function(a){this.dac_color_index_write=
244
- 3*a;this.dac_state|=3};P.prototype.port3C8_read=function(){return this.dac_color_index_write/3&255};P.prototype.port3C9_write=function(a){var b=this.dac_color_index_write/3|0,c=this.dac_color_index_write%3,d=this.vga256_palette[b];if(0===(this.dispi_enable_value&32)){a&=63;const e=a&1;a=a<<2|e<<1|e}0===c?d=d&-16711681|a<<16:1===c?d=d&-65281|a<<8:(d=d&-256|a,E("dac set color, index="+B(b)+" value="+B(d),256));this.vga256_palette[b]!==d&&(this.vga256_palette[b]=d,this.complete_redraw());this.dac_color_index_write++};
245
- P.prototype.port3C9_read=function(){E("3C9 read",256);var a=this.vga256_palette[this.dac_color_index_read/3|0]>>8*(2-this.dac_color_index_read%3)&255;this.dac_color_index_read++;return this.dispi_enable_value&32?a:a>>2};P.prototype.port3CC_read=function(){E("3CC read",256);return this.miscellaneous_output_register};P.prototype.port3CE_write=function(a){this.graphics_index=a};P.prototype.port3CE_read=function(){return this.graphics_index};P.prototype.port3CF_write=function(a){switch(this.graphics_index){case 0:this.planar_setreset=
246
- a;E("plane set/reset: "+B(a),256);break;case 1:this.planar_setreset_enable=a;E("plane set/reset enable: "+B(a),256);break;case 2:this.color_compare=a;E("color compare: "+B(a),256);break;case 3:this.planar_rotate_reg=a;E("plane rotate: "+B(a),256);break;case 4:this.plane_read=a;E("plane read: "+B(a),256);break;case 5:var b=this.planar_mode;this.planar_mode=a;E("planar mode: "+B(a),256);(b^a)&96&&this.complete_replot();break;case 6:E("miscellaneous graphics register: "+B(a),256);this.miscellaneous_graphics_register!==
247
- a&&(this.miscellaneous_graphics_register=a,this.update_vga_size());break;case 7:this.color_dont_care=a;E("color don't care: "+B(a),256);break;case 8:this.planar_bitmap=a;E("planar bitmap: "+B(a),256);break;default:E("3CF / graphics write "+B(this.graphics_index)+": "+B(a),256)}};P.prototype.port3CF_read=function(){E("3CF / graphics read "+B(this.graphics_index),256);switch(this.graphics_index){case 0:return this.planar_setreset;case 1:return this.planar_setreset_enable;case 2:return this.color_compare;
248
- case 3:return this.planar_rotate_reg;case 4:return this.plane_read;case 5:return this.planar_mode;case 6:return this.miscellaneous_graphics_register;case 7:return this.color_dont_care;case 8:return this.planar_bitmap}return 0};P.prototype.port3D4_write=function(a){E("3D4 / crtc index: "+a,256);this.index_crtc=a};P.prototype.port3D4_write16=function(a){this.port3D4_write(a&255);this.port3D5_write(a>>8&255)};P.prototype.port3D4_read=function(){E("3D4 read / crtc index: "+this.index_crtc,256);return this.index_crtc};
249
- P.prototype.port3D5_write=function(a){switch(this.index_crtc){case 1:E("3D5 / hdisp enable end write: "+B(a),256);this.horizontal_display_enable_end!==a&&(this.horizontal_display_enable_end=a,this.update_vga_size());break;case 2:this.horizontal_blank_start!==a&&(this.horizontal_blank_start=a,this.update_vga_size());break;case 7:E("3D5 / overflow register write: "+B(a),256);var b=this.vertical_display_enable_end;this.vertical_display_enable_end&=255;this.vertical_display_enable_end=this.vertical_display_enable_end|
250
- a<<3&512|a<<7&256;b!==this.vertical_display_enable_end&&this.update_vga_size();this.line_compare=this.line_compare&767|a<<4&256;b=this.vertical_blank_start;this.vertical_blank_start=this.vertical_blank_start&767|a<<5&256;b!==this.vertical_blank_start&&this.update_vga_size();this.update_layers();break;case 8:E("3D5 / preset row scan write: "+B(a),256);this.preset_row_scan=a;this.update_layers();break;case 9:E("3D5 / max scan line write: "+B(a),256);var c=this.max_scan_line;this.max_scan_line=a;this.line_compare=
251
- this.line_compare&511|a<<3&512;b=this.vertical_blank_start;this.vertical_blank_start=this.vertical_blank_start&511|a<<4&512;((c^this.max_scan_line)&159||b!==this.vertical_blank_start)&&this.update_vga_size();this.update_cursor_scanline();this.update_layers();this.set_font_bitmap(!1);break;case 10:E("3D5 / cursor scanline start write: "+B(a),256);this.cursor_scanline_start=a;this.update_cursor_scanline();break;case 11:E("3D5 / cursor scanline end write: "+B(a),256);this.cursor_scanline_end=a;this.update_cursor_scanline();
252
- break;case 12:(this.start_address>>8&255)!==a&&(this.start_address=this.start_address&255|a<<8,this.update_layers(),~this.crtc_mode&3&&this.complete_replot());E("3D5 / start addr hi write: "+B(a)+" -> "+B(this.start_address,4),256);break;case 13:(this.start_address&255)!==a&&(this.start_address=this.start_address&65280|a,this.update_layers(),~this.crtc_mode&3&&this.complete_replot());E("3D5 / start addr lo write: "+B(a)+" -> "+B(this.start_address,4),256);break;case 14:E("3D5 / cursor address hi write: "+
253
- B(a),256);this.cursor_address=this.cursor_address&255|a<<8;this.update_cursor();break;case 15:E("3D5 / cursor address lo write: "+B(a),256);this.cursor_address=this.cursor_address&65280|a;this.update_cursor();break;case 18:E("3D5 / vdisp enable end write: "+B(a),256);(this.vertical_display_enable_end&255)!==a&&(this.vertical_display_enable_end=this.vertical_display_enable_end&768|a,this.update_vga_size());break;case 19:E("3D5 / offset register write: "+B(a),256);this.offset_register!==a&&(this.offset_register=
254
- a,this.update_vga_size(),~this.crtc_mode&3&&this.complete_replot());break;case 20:E("3D5 / underline location write: "+B(a),256);this.underline_location_register!==a&&(b=this.underline_location_register,this.underline_location_register=a,this.update_vga_size(),(b^a)&64&&this.complete_replot());break;case 21:E("3D5 / vertical blank start write: "+B(a),256);(this.vertical_blank_start&255)!==a&&(this.vertical_blank_start=this.vertical_blank_start&768|a,this.update_vga_size());break;case 23:E("3D5 / crtc mode write: "+
255
- B(a),256);this.crtc_mode!==a&&(b=this.crtc_mode,this.crtc_mode=a,this.update_vga_size(),(b^a)&67&&this.complete_replot());break;case 24:E("3D5 / line compare write: "+B(a),256);this.line_compare=this.line_compare&768|a;this.update_layers();break;default:this.index_crtc<this.crtc.length&&(this.crtc[this.index_crtc]=a),E("3D5 / CRTC write "+B(this.index_crtc)+": "+B(a),256)}};P.prototype.port3D5_write16=function(a){E("16-bit write to 3D5: "+B(a,4),256);this.port3D5_write(a&255)};P.prototype.port3D5_read=
256
- function(){E("3D5 read "+B(this.index_crtc),256);switch(this.index_crtc){case 1:return this.horizontal_display_enable_end;case 2:return this.horizontal_blank_start;case 7:return this.vertical_display_enable_end>>7&2|this.vertical_blank_start>>5&8|this.line_compare>>4&16|this.vertical_display_enable_end>>3&64;case 8:return this.preset_row_scan;case 9:return this.max_scan_line;case 10:return this.cursor_scanline_start;case 11:return this.cursor_scanline_end;case 12:return this.start_address&255;case 13:return this.start_address>>
257
- 8;case 14:return this.cursor_address>>8;case 15:return this.cursor_address&255;case 18:return this.vertical_display_enable_end&255;case 19:return this.offset_register;case 20:return this.underline_location_register;case 21:return this.vertical_blank_start&255;case 23:return this.crtc_mode;case 24:return this.line_compare&255}return this.index_crtc<this.crtc.length?this.crtc[this.index_crtc]:0};P.prototype.port3D5_read16=function(){E("Warning: 16-bit read from 3D5",256);return this.port3D5_read()};
258
- P.prototype.port3DA_read=function(){E("3DA read - status 1 and clear attr index",256);var a=this.port_3DA_value;this.graphical_mode?(this.port_3DA_value^=1,this.port_3DA_value&=1):(this.port_3DA_value&1&&(this.port_3DA_value^=8),this.port_3DA_value^=1);this.attribute_controller_index=-1;return a};P.prototype.port1CE_write=function(a){this.dispi_index=a};P.prototype.port1CF_write=function(a){E("1CF / dispi write "+B(this.dispi_index)+": "+B(a),256);const b=this.svga_enabled;switch(this.dispi_index){case 0:45248<=
259
- a&&45253>=a?this.svga_version=a:E("Invalid version value: "+B(a),256);break;case 1:this.svga_width=a;2560<this.svga_width&&(E("svga_width reduced from "+this.svga_width+" to 2560",256),this.svga_width=2560);break;case 2:this.svga_height=a;1600<this.svga_height&&(E("svga_height reduced from "+this.svga_height+" to 1600",256),this.svga_height=1600);break;case 3:this.svga_bpp=a;break;case 4:(this.svga_enabled=1===(a&1))&&0===(a&128)&&this.svga_memory.fill(0);this.dispi_enable_value=a;break;case 5:E("SVGA bank offset: "+
260
- B(a<<16),256);this.svga_bank_offset=a<<16;break;case 8:E("SVGA X offset: "+B(a),256);this.svga_offset_x!==a&&(this.svga_offset_x=a,this.svga_offset=this.svga_offset_y*this.svga_width+this.svga_offset_x,this.complete_redraw());break;case 9:E("SVGA Y offset: "+B(a*this.svga_width)+" y="+B(a),256);this.svga_offset_y!==a&&(this.svga_offset_y=a,this.svga_offset=this.svga_offset_y*this.svga_width+this.svga_offset_x,this.complete_redraw());break;default:E("Unimplemented dispi write index: "+B(this.dispi_index),
261
- 256)}!this.svga_enabled||this.svga_width&&this.svga_height||(E("SVGA: disabled because of invalid width/height: "+this.svga_width+"x"+this.svga_height,256),this.svga_enabled=!1);h(4!==this.svga_bpp,"unimplemented svga bpp: 4");h(4===this.svga_bpp||8===this.svga_bpp||15===this.svga_bpp||16===this.svga_bpp||24===this.svga_bpp||32===this.svga_bpp,"unexpected svga bpp: "+this.svga_bpp);this.svga_enabled?E("SVGA: enabled, "+this.svga_width+"x"+this.svga_height+"x"+this.svga_bpp,256):E("SVGA: disabled");
262
- this.svga_enabled&&!b&&(this.svga_offset_y=this.svga_offset_x=this.svga_offset=0,this.graphical_mode=!0,this.screen.set_mode(this.graphical_mode),this.set_size_graphical(this.svga_width,this.svga_height,this.svga_width,this.svga_height,this.svga_bpp));this.svga_enabled||(this.svga_bank_offset=0);this.update_layers()};P.prototype.port1CF_read=function(){E("1CF / dispi read "+B(this.dispi_index),256);return this.svga_register_read(this.dispi_index)};P.prototype.svga_register_read=function(a){switch(a){case 0:return this.svga_version;
263
- case 1:return this.dispi_enable_value&2?2560:this.svga_width;case 2:return this.dispi_enable_value&2?1600:this.svga_height;case 3:return this.dispi_enable_value&2?32:this.svga_bpp;case 4:return this.dispi_enable_value;case 5:return this.svga_bank_offset>>>16;case 6:return this.screen_width?this.screen_width:1;case 8:return this.svga_offset_x;case 9:return this.svga_offset_y;case 10:return this.vga_memory_size/65536|0;default:E("Unimplemented dispi read index: "+B(this.dispi_index),256)}return 255};
264
- P.prototype.vga_replot=function(){for(var a=this.diff_plot_min&-16,b=Math.min(this.diff_plot_max|15,524287),c=this.vga_addr_shift_count(),d=~this.crtc_mode&3,e=this.planar_mode&96,g=this.attribute_mode&64;a<=b;){var f=a>>>c;if(d){var l=a/this.virtual_width|0,n=a-this.virtual_width*l;switch(d){case 1:f=(l&1)<<13;l>>>=1;break;case 2:f=(l&1)<<14;l>>>=1;break;case 3:f=(l&3)<<13,l>>>=2}f|=(l*this.virtual_width+n>>>c)+this.start_address}l=this.plane0[f];n=this.plane1[f];var m=this.plane2[f],q=this.plane3[f];
265
- f=new Uint8Array(8);switch(e){case 0:l<<=0;n<<=1;m<<=2;q<<=3;for(var r=7;0<=r;r--)f[7-r]=l>>r&1|n>>r&2|m>>r&4|q>>r&8;break;case 32:f[0]=l>>6&3|m>>4&12;f[1]=l>>4&3|m>>2&12;f[2]=l>>2&3|m>>0&12;f[3]=l>>0&3|m<<2&12;f[4]=n>>6&3|q>>4&12;f[5]=n>>4&3|q>>2&12;f[6]=n>>2&3|q>>0&12;f[7]=n>>0&3|q<<2&12;break;case 64:case 96:f[0]=l>>4&15,f[1]=l>>0&15,f[2]=n>>4&15,f[3]=n>>0&15,f[4]=m>>4&15,f[5]=m>>0&15,f[6]=q>>4&15,f[7]=q>>0&15}if(g)for(l=r=0;4>r;r++,a++,l+=2)this.pixel_buffer[a]=f[l]<<4|f[l+1];else for(r=0;8>r;r++,
266
- a++)this.pixel_buffer[a]=f[r]}};P.prototype.vga_redraw=function(){var a=this.diff_addr_min,b=Math.min(this.diff_addr_max,524287);const c=new Int32Array(this.cpu.wasm_memory.buffer,this.dest_buffet_offset,this.virtual_width*this.virtual_height);var d=255,e=0;this.attribute_mode&128&&(d&=207,e|=this.color_select<<4&48);if(this.attribute_mode&64)for(;a<=b;a++){var g=this.pixel_buffer[a]&d|e;g=this.vga256_palette[g];c[a]=g&65280|g<<16|g>>16|4278190080}else for(d&=63,e|=this.color_select<<4&192;a<=b;a++)g=
267
- this.dac_map[this.pixel_buffer[a]&this.color_plane_enable]&d|e,g=this.vga256_palette[g],c[a]=g&65280|g<<16|g>>16|4278190080};P.prototype.screen_fill_buffer=function(){if(this.graphical_mode){if(0===this.image_data.data.byteLength){var a=new Uint8ClampedArray(this.cpu.wasm_memory.buffer,this.dest_buffet_offset,4*this.virtual_width*this.virtual_height);this.image_data=new ImageData(a,this.virtual_width,this.virtual_height);this.update_layers()}if(this.svga_enabled){a=0;let d=this.svga_height;if(8===
268
- this.svga_bpp){const e=new Int32Array(this.cpu.wasm_memory.buffer,this.dest_buffet_offset,this.screen_width*this.screen_height),g=new Uint8Array(this.cpu.wasm_memory.buffer,this.svga_memory.byteOffset,this.vga_memory_size);for(var b=0;b<e.length;b++){var c=this.vga256_palette[g[b]];e[b]=c&65280|c<<16|c>>16|4278190080}}else this.cpu.svga_fill_pixel_buffer(this.svga_bpp,this.svga_offset),b=15===this.svga_bpp?2:this.svga_bpp/8,a=((this.cpu.svga_dirty_bitmap_min_offset[0]/b|0)-this.svga_offset)/this.svga_width|
269
- 0,d=(((this.cpu.svga_dirty_bitmap_max_offset[0]/b|0)-this.svga_offset)/this.svga_width|0)+1;a<d&&(a=Math.max(a,0),d=Math.min(d,this.svga_height),this.screen.update_buffer([{image_data:this.image_data,screen_x:0,screen_y:a,buffer_x:0,buffer_y:a,buffer_width:this.svga_width,buffer_height:d-a}]))}else this.vga_replot(),this.vga_redraw(),this.screen.update_buffer(this.layers);this.reset_diffs()}this.update_vertical_retrace()};P.prototype.set_font_bitmap=function(a){const b=this.max_scan_line&31;if(b&&
270
- !this.graphical_mode){const c=!!(this.clocking_mode&8);this.screen.set_font_bitmap(b+1,!c&&!(this.clocking_mode&1),c,!!(this.attribute_mode&4),this.plane2,a)}};P.prototype.set_font_page=function(){const a=[0,2,4,6,1,3,5,7],b=(this.character_map_select&12)>>2|(this.character_map_select&32)>>3,c=this.character_map_select&3|(this.character_map_select&16)>>2;this.font_page_ab_enabled=b!==c;this.screen.set_font_page(a[b],a[c]);this.complete_redraw()};function Ea(a,b){this.cpu=a;this.bus=b;this.use_mouse=
271
- this.enable_mouse_stream=!1;this.have_mouse=!0;this.mouse_clicks=this.mouse_delta_y=this.mouse_delta_x=0;this.have_keyboard=!0;this.next_read_resolution=this.next_read_rate=this.next_handle_scan_code_set=this.next_read_led=this.next_read_sample=this.next_is_mouse_command=this.enable_keyboard_stream=!1;this.kbd_buffer=new sa(1024);this.last_port60_byte=0;this.sample_rate=100;this.mouse_id=this.mouse_detect_state=0;this.mouse_reset_workaround=!1;this.wheel_movement=0;this.resolution=4;this.scaling2=
272
- !1;this.last_mouse_packet=-1;this.mouse_buffer=new sa(1024);this.next_byte_is_aux=this.next_byte_is_ready=!1;this.bus.register("keyboard-code",function(c){this.kbd_send_code(c)},this);this.bus.register("mouse-click",function(c){this.mouse_send_click(c[0],c[1],c[2])},this);this.bus.register("mouse-delta",function(c){this.mouse_send_delta(c[0],c[1])},this);this.bus.register("mouse-wheel",function(c){this.wheel_movement-=c[0];this.wheel_movement-=2*c[1];this.wheel_movement=Math.min(7,Math.max(-8,this.wheel_movement));
273
- this.send_mouse_packet(0,0)},this);this.command_register=5;this.controller_output_port=0;this.read_controller_output_port=this.read_command_register=this.read_output_register=!1;a.io.register_read(96,this,this.port60_read);a.io.register_read(100,this,this.port64_read);a.io.register_write(96,this,this.port60_write);a.io.register_write(100,this,this.port64_write)}Ea.prototype.get_state=function(){var a=[];a[0]=this.enable_mouse_stream;a[1]=this.use_mouse;a[2]=this.have_mouse;a[3]=this.mouse_delta_x;
274
- a[4]=this.mouse_delta_y;a[5]=this.mouse_clicks;a[6]=this.have_keyboard;a[7]=this.enable_keyboard_stream;a[8]=this.next_is_mouse_command;a[9]=this.next_read_sample;a[10]=this.next_read_led;a[11]=this.next_handle_scan_code_set;a[12]=this.next_read_rate;a[13]=this.next_read_resolution;a[15]=this.last_port60_byte;a[16]=this.sample_rate;a[17]=this.resolution;a[18]=this.scaling2;a[20]=this.command_register;a[21]=this.read_output_register;a[22]=this.read_command_register;a[23]=this.controller_output_port;
275
- a[24]=this.read_controller_output_port;a[25]=this.mouse_id;a[26]=this.mouse_detect_state;a[27]=this.mouse_reset_workaround;return a};Ea.prototype.set_state=function(a){this.enable_mouse_stream=a[0];this.use_mouse=a[1];this.have_mouse=a[2];this.mouse_delta_x=a[3];this.mouse_delta_y=a[4];this.mouse_clicks=a[5];this.have_keyboard=a[6];this.enable_keyboard_stream=a[7];this.next_is_mouse_command=a[8];this.next_read_sample=a[9];this.next_read_led=a[10];this.next_handle_scan_code_set=a[11];this.next_read_rate=
276
- a[12];this.next_read_resolution=a[13];this.last_port60_byte=a[15];this.sample_rate=a[16];this.resolution=a[17];this.scaling2=a[18];this.command_register=a[20];this.read_output_register=a[21];this.read_command_register=a[22];this.controller_output_port=a[23];this.read_controller_output_port=a[24];this.mouse_id=a[25]||0;this.mouse_detect_state=a[26]||0;this.mouse_reset_workaround=a[27]||!1;this.next_byte_is_aux=this.next_byte_is_ready=!1;this.kbd_buffer.clear();this.mouse_buffer.clear();this.bus.send("mouse-enable",
277
- this.use_mouse)};Ea.prototype.raise_irq=function(){this.next_byte_is_ready||(this.kbd_buffer.length?this.kbd_irq():this.mouse_buffer.length&&this.mouse_irq())};Ea.prototype.mouse_irq=function(){this.next_byte_is_aux=this.next_byte_is_ready=!0;this.command_register&2&&(E("Mouse irq",64),this.cpu.device_lower_irq(12),this.cpu.device_raise_irq(12))};Ea.prototype.kbd_irq=function(){this.next_byte_is_ready=!0;this.next_byte_is_aux=!1;this.command_register&1&&(E("Keyboard irq",64),this.cpu.device_lower_irq(1),
278
- this.cpu.device_raise_irq(1))};Ea.prototype.kbd_send_code=function(a){this.enable_keyboard_stream&&(E("adding kbd code: "+B(a),64),this.kbd_buffer.push(a),this.raise_irq())};Ea.prototype.mouse_send_delta=function(a,b){if(this.have_mouse&&this.use_mouse){var c=this.resolution*this.sample_rate/80;this.mouse_delta_x+=a*c;this.mouse_delta_y+=b*c;this.enable_mouse_stream&&(a=this.mouse_delta_x|0,b=this.mouse_delta_y|0,a||b)&&(Date.now(),this.mouse_delta_x-=a,this.mouse_delta_y-=b,this.send_mouse_packet(a,
279
- b))}};Ea.prototype.mouse_send_click=function(a,b,c){this.have_mouse&&this.use_mouse&&(this.mouse_clicks=a|c<<1|b<<2,this.enable_mouse_stream&&this.send_mouse_packet(0,0))};Ea.prototype.send_mouse_packet=function(a,b){var c=(0>b)<<5|(0>a)<<4|8|this.mouse_clicks;this.last_mouse_packet=Date.now();this.mouse_buffer.push(c);this.mouse_buffer.push(a);this.mouse_buffer.push(b);4===this.mouse_id?(this.mouse_buffer.push(0|this.wheel_movement&15),this.wheel_movement=0):3===this.mouse_id&&(this.mouse_buffer.push(this.wheel_movement&
280
- 255),this.wheel_movement=0);this.raise_irq()};Ea.prototype.apply_scaling2=function(a){var b=a>>31;switch(Math.abs(a)){case 0:case 1:case 3:return a;case 2:return b;case 4:return 6*b;case 5:return 9*b;default:return a<<1}};Ea.prototype.port60_read=function(){this.next_byte_is_ready=!1;if(!this.kbd_buffer.length&&!this.mouse_buffer.length)return E("Port 60 read: Empty",64),this.last_port60_byte;this.next_byte_is_aux?(this.cpu.device_lower_irq(12),this.last_port60_byte=this.mouse_buffer.shift(),E("Port 60 read (mouse): "+
281
- B(this.last_port60_byte),64)):(this.cpu.device_lower_irq(1),this.last_port60_byte=this.kbd_buffer.shift(),E("Port 60 read (kbd) : "+B(this.last_port60_byte),64));(this.kbd_buffer.length||this.mouse_buffer.length)&&this.raise_irq();return this.last_port60_byte};Ea.prototype.port64_read=function(){var a=16;this.next_byte_is_ready&&(a|=1);this.next_byte_is_aux&&(a|=32);E("port 64 read: "+B(a),64);return a};Ea.prototype.port60_write=function(a){E("port 60 write: "+B(a),64);if(this.read_command_register)this.command_register=
282
- a,this.read_command_register=!1,E("Keyboard command register = "+B(this.command_register),64);else if(this.read_output_register)this.read_output_register=!1,this.mouse_buffer.clear(),this.mouse_buffer.push(a),this.mouse_irq();else if(this.next_read_sample){this.next_read_sample=!1;this.mouse_buffer.clear();this.mouse_buffer.push(250);this.sample_rate=a;switch(this.mouse_detect_state){case -1:60===a?(this.mouse_reset_workaround=!0,this.mouse_detect_state=0):(this.mouse_reset_workaround=!1,this.mouse_detect_state=
283
- 200===a?1:0);break;case 0:200===a&&(this.mouse_detect_state=1);break;case 1:this.mouse_detect_state=100===a?2:200===a?3:0;break;case 2:80===a&&(this.mouse_id=3);this.mouse_detect_state=-1;break;case 3:80===a&&(this.mouse_id=4),this.mouse_detect_state=-1}E("mouse sample rate: "+B(a)+", mouse id: "+B(this.mouse_id),64);this.sample_rate||(E("invalid sample rate, reset to 100",64),this.sample_rate=100);this.mouse_irq()}else if(this.next_read_resolution)this.next_read_resolution=!1,this.mouse_buffer.clear(),
284
- this.mouse_buffer.push(250),3<a?(this.resolution=4,E("invalid resolution, resetting to 4",64)):(this.resolution=1<<a,E("resolution: "+this.resolution,64)),this.mouse_irq();else if(this.next_read_led)this.next_read_led=!1,this.kbd_buffer.push(250),this.kbd_irq();else if(this.next_handle_scan_code_set)this.next_handle_scan_code_set=!1,this.kbd_buffer.push(250),this.kbd_irq(),a||this.kbd_buffer.push(1);else if(this.next_read_rate)this.next_read_rate=!1,this.kbd_buffer.push(250),this.kbd_irq();else if(this.next_is_mouse_command){if(this.next_is_mouse_command=
285
- !1,E("Port 60 data register write: "+B(a),64),this.have_mouse){this.kbd_buffer.clear();this.mouse_buffer.clear();this.mouse_buffer.push(250);switch(a){case 230:E("Scaling 1:1",64);this.scaling2=!1;break;case 231:E("Scaling 2:1",64);this.scaling2=!0;break;case 232:this.next_read_resolution=!0;break;case 233:this.send_mouse_packet(0,0);break;case 235:E("unimplemented request single packet",64);this.send_mouse_packet(0,0);break;case 242:E("required id: "+B(this.mouse_id),64);this.mouse_buffer.push(this.mouse_id);
286
- this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;this.raise_irq();break;case 243:this.next_read_sample=!0;break;case 244:this.use_mouse=this.enable_mouse_stream=!0;this.bus.send("mouse-enable",!0);this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;break;case 245:this.enable_mouse_stream=!1;break;case 246:this.enable_mouse_stream=!1;this.sample_rate=100;this.scaling2=!1;this.resolution=4;break;case 255:E("Mouse reset",64);this.mouse_buffer.push(170);this.mouse_buffer.push(0);this.use_mouse=
287
- !0;this.bus.send("mouse-enable",!0);this.enable_mouse_stream=!1;this.sample_rate=100;this.scaling2=!1;this.resolution=4;this.mouse_reset_workaround||(this.mouse_id=0);this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;break;default:E("Unimplemented mouse command: "+B(a),64)}this.mouse_irq()}}else if(this.read_controller_output_port)this.read_controller_output_port=!1,this.controller_output_port=a;else{E("Port 60 data register write: "+B(a),64);this.mouse_buffer.clear();this.kbd_buffer.clear();
288
- this.kbd_buffer.push(250);switch(a){case 237:this.next_read_led=!0;break;case 240:this.next_handle_scan_code_set=!0;break;case 242:this.kbd_buffer.push(171);this.kbd_buffer.push(131);break;case 243:this.next_read_rate=!0;break;case 244:E("kbd enable scanning",64);this.enable_keyboard_stream=!0;break;case 245:E("kbd disable scanning",64);this.enable_keyboard_stream=!1;break;case 246:break;case 255:this.kbd_buffer.clear();this.kbd_buffer.push(250);this.kbd_buffer.push(170);this.kbd_buffer.push(0);break;
289
- default:E("Unimplemented keyboard command: "+B(a),64)}this.kbd_irq()}};Ea.prototype.port64_write=function(a){E("port 64 write: "+B(a),64);switch(a){case 32:this.kbd_buffer.clear();this.mouse_buffer.clear();this.kbd_buffer.push(this.command_register);this.kbd_irq();break;case 96:this.read_command_register=!0;break;case 209:this.read_controller_output_port=!0;break;case 211:this.read_output_register=!0;break;case 212:this.next_is_mouse_command=!0;break;case 167:E("Disable second port",64);this.command_register|=
290
- 32;break;case 168:E("Enable second port",64);this.command_register&=-33;break;case 169:this.kbd_buffer.clear();this.mouse_buffer.clear();this.kbd_buffer.push(0);this.kbd_irq();break;case 170:this.kbd_buffer.clear();this.mouse_buffer.clear();this.kbd_buffer.push(85);this.kbd_irq();break;case 171:this.kbd_buffer.clear();this.mouse_buffer.clear();this.kbd_buffer.push(0);this.kbd_irq();break;case 173:E("Disable Keyboard",64);this.command_register|=16;break;case 174:E("Enable Keyboard",64);this.command_register&=
291
- -17;break;case 254:E("CPU reboot via PS2");this.cpu.reboot_internal();break;default:E("port 64: Unimplemented command byte: "+B(a),64)}};function Fa(a){this.cpu=a;this.cmos_index=0;this.cmos_data=new Uint8Array(128);this.last_update=this.rtc_time=Date.now();this.next_interrupt_alarm=this.next_interrupt=0;this.periodic_interrupt=!1;this.periodic_interrupt_time=.9765625;this.cmos_a=38;this.cmos_b=2;this.nmi_disabled=this.cmos_c=0;a.io.register_write(112,this,function(b){this.cmos_index=b&127;this.nmi_disabled=
292
- b>>7});a.io.register_write(113,this,this.cmos_port_write);a.io.register_read(113,this,this.cmos_port_read)}Fa.prototype.get_state=function(){var a=[];a[0]=this.cmos_index;a[1]=this.cmos_data;a[2]=this.rtc_time;a[3]=this.last_update;a[4]=this.next_interrupt;a[5]=this.next_interrupt_alarm;a[6]=this.periodic_interrupt;a[7]=this.periodic_interrupt_time;a[8]=this.cmos_a;a[9]=this.cmos_b;a[10]=this.cmos_c;a[11]=this.nmi_disabled;return a};Fa.prototype.set_state=function(a){this.cmos_index=a[0];this.cmos_data=
293
- a[1];this.rtc_time=a[2];this.last_update=a[3];this.next_interrupt=a[4];this.next_interrupt_alarm=a[5];this.periodic_interrupt=a[6];this.periodic_interrupt_time=a[7];this.cmos_a=a[8];this.cmos_b=a[9];this.cmos_c=a[10];this.nmi_disabled=a[11]};Fa.prototype.timer=function(a){a=Date.now();this.rtc_time+=a-this.last_update;this.last_update=a;this.periodic_interrupt&&this.next_interrupt<a?(this.cpu.device_raise_irq(8),this.cmos_c|=192,this.next_interrupt+=this.periodic_interrupt_time*Math.ceil((a-this.next_interrupt)/
294
- this.periodic_interrupt_time)):this.next_interrupt_alarm&&this.next_interrupt_alarm<a&&(this.cpu.device_raise_irq(8),this.cmos_c|=160,this.next_interrupt_alarm=0);let b=100;this.periodic_interrupt&&this.next_interrupt&&(b=Math.min(b,Math.max(0,this.next_interrupt-a)));this.next_interrupt_alarm&&(b=Math.min(b,Math.max(0,this.next_interrupt_alarm-a)));return b};Fa.prototype.bcd_pack=function(a){for(var b=0,c=0,d;a;)d=a%10,c|=d<<4*b,b++,a=(a-d)/10;return c};Fa.prototype.bcd_unpack=function(a){const b=
295
- a&15,c=a>>4&15;h(256>a);h(10>b);h(10>c);return b+10*c};Fa.prototype.encode_time=function(a){return this.cmos_b&4?a:this.bcd_pack(a)};Fa.prototype.decode_time=function(a){return this.cmos_b&4?a:this.bcd_unpack(a)};Fa.prototype.cmos_port_read=function(){var a=this.cmos_index;switch(a){case 0:return E("read second: "+B(this.encode_time((new Date(this.rtc_time)).getUTCSeconds())),65536),this.encode_time((new Date(this.rtc_time)).getUTCSeconds());case 2:return E("read minute: "+B(this.encode_time((new Date(this.rtc_time)).getUTCMinutes())),
296
- 65536),this.encode_time((new Date(this.rtc_time)).getUTCMinutes());case 4:return E("read hour: "+B(this.encode_time((new Date(this.rtc_time)).getUTCHours())),65536),this.encode_time((new Date(this.rtc_time)).getUTCHours());case 6:return E("read day: "+B(this.encode_time((new Date(this.rtc_time)).getUTCDay()+1)),65536),this.encode_time((new Date(this.rtc_time)).getUTCDay()+1);case 7:return E("read day of month: "+B(this.encode_time((new Date(this.rtc_time)).getUTCDate())),65536),this.encode_time((new Date(this.rtc_time)).getUTCDate());
297
- case 8:return E("read month: "+B(this.encode_time((new Date(this.rtc_time)).getUTCMonth()+1)),65536),this.encode_time((new Date(this.rtc_time)).getUTCMonth()+1);case 9:return E("read year: "+B(this.encode_time((new Date(this.rtc_time)).getUTCFullYear()%100)),65536),this.encode_time((new Date(this.rtc_time)).getUTCFullYear()%100);case 10:return 999<=F.microtick()%1E3?this.cmos_a|128:this.cmos_a;case 11:return this.cmos_b;case 12:return this.cpu.device_lower_irq(8),E("cmos reg C read",65536),a=this.cmos_c,
298
- this.cmos_c&=-241,a;case 13:return 0;case 50:case 55:return E("read century: "+B(this.encode_time((new Date(this.rtc_time)).getUTCFullYear()/100|0)),65536),this.encode_time((new Date(this.rtc_time)).getUTCFullYear()/100|0);default:return E("cmos read from index "+B(a),65536),this.cmos_data[this.cmos_index]}};Fa.prototype.cmos_port_write=function(a){switch(this.cmos_index){case 10:this.cmos_a=a&127;this.periodic_interrupt_time=1E3/(32768>>(this.cmos_a&15)-1);E("Periodic interrupt, a="+B(this.cmos_a,
299
- 2)+" t="+this.periodic_interrupt_time,65536);break;case 11:this.cmos_b=a;this.cmos_b&64&&(this.next_interrupt=Date.now());if(this.cmos_b&32){a=new Date;const b=this.decode_time(this.cmos_data[1]),c=this.decode_time(this.cmos_data[3]),d=this.decode_time(this.cmos_data[5]),e=new Date(Date.UTC(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),d,c,b));E("RTC alarm scheduled for "+e+" hh:mm:ss="+d+":"+c+":"+b+" ms_from_now="+(e-a),65536);this.next_interrupt_alarm=+e}this.cmos_b&16&&E("Unimplemented: updated interrupt",
300
- 65536);E("cmos b="+B(this.cmos_b,2),65536);break;case 1:case 3:case 5:this.cmos_write(this.cmos_index,a);break;default:E("cmos write index "+B(this.cmos_index)+": "+B(a),65536)}this.periodic_interrupt=64===(this.cmos_b&64)&&0<(this.cmos_a&15)};Fa.prototype.cmos_read=function(a){h(128>a);return this.cmos_data[a]};Fa.prototype.cmos_write=function(a,b){E("cmos "+B(a)+" <- "+B(b),65536);h(128>a);this.cmos_data[a]=b};function Ga(a,b,c){this.bus=c;this.cpu=a;this.ints=4;this.line_control=this.baud_rate=
301
- 0;this.lsr=96;this.ier=this.fifo_control=0;this.iir=1;this.irq=this.scratch_register=this.modem_status=this.modem_control=0;this.input=[];this.current_line="";switch(b){case 1016:this.com=0;this.irq=4;break;case 760:this.com=1;this.irq=3;break;case 1E3:this.com=2;this.irq=4;break;case 744:this.irq=this.com=3;break;default:E("Invalid serial port: "+B(b),16384),this.com=0,this.irq=4}this.bus.register("serial"+this.com+"-input",function(d){this.data_received(d)},this);this.bus.register("serial"+this.com+
302
- "-modem-status-input",function(d){this.set_modem_status(d)},this);this.bus.register("serial"+this.com+"-carrier-detect-input",function(d){this.set_modem_status(d?this.modem_status|136:this.modem_status&-137)},this);this.bus.register("serial"+this.com+"-ring-indicator-input",function(d){this.set_modem_status(d?this.modem_status|68:this.modem_status&-69)},this);this.bus.register("serial"+this.com+"-data-set-ready-input",function(d){this.set_modem_status(d?this.modem_status|34:this.modem_status&-35)},
303
- this);this.bus.register("serial"+this.com+"-clear-to-send-input",function(d){this.set_modem_status(d?this.modem_status|17:this.modem_status&-18)},this);a=a.io;a.register_write(b,this,function(d){this.write_data(d)},function(d){this.write_data(d&255);this.write_data(d>>8)});a.register_write(b|1,this,function(d){this.line_control&128?(this.baud_rate=this.baud_rate&255|d<<8,E("baud rate: "+B(this.baud_rate),16384)):(0===(this.ier&2)&&d&2&&this.ThrowInterrupt(2),this.ier=d&15,E("interrupt enable: "+B(d),
304
- 16384),this.CheckInterrupt())});a.register_read(b,this,function(){if(this.line_control&128)return this.baud_rate&255;let d=0;0===this.input.length?E("Read input empty",16384):(d=this.input.shift(),E("Read input: "+B(d),16384));0===this.input.length&&(this.lsr&=-2,this.ClearInterrupt(12),this.ClearInterrupt(4));return d});a.register_read(b|1,this,function(){return this.line_control&128?this.baud_rate>>8:this.ier&15});a.register_read(b|2,this,function(){var d=this.iir&15;E("read interrupt identification: "+
305
- B(this.iir),16384);2===this.iir&&this.ClearInterrupt(2);this.fifo_control&1&&(d|=192);return d});a.register_write(b|2,this,function(d){E("fifo control: "+B(d),16384);this.fifo_control=d});a.register_read(b|3,this,function(){E("read line control: "+B(this.line_control),16384);return this.line_control});a.register_write(b|3,this,function(d){E("line control: "+B(d),16384);this.line_control=d});a.register_read(b|4,this,function(){return this.modem_control});a.register_write(b|4,this,function(d){E("modem control: "+
306
- B(d),16384);this.modem_control=d});a.register_read(b|5,this,function(){E("read line status: "+B(this.lsr),16384);return this.lsr});a.register_write(b|5,this,function(){E("Factory test write",16384)});a.register_read(b|6,this,function(){E("read modem status: "+B(this.modem_status),16384);return this.modem_status&=240});a.register_write(b|6,this,function(d){E("write modem status: "+B(d),16384);this.set_modem_status(d)});a.register_read(b|7,this,function(){return this.scratch_register});a.register_write(b|
307
- 7,this,function(d){this.scratch_register=d})}Ga.prototype.get_state=function(){var a=[];a[0]=this.ints;a[1]=this.baud_rate;a[2]=this.line_control;a[3]=this.lsr;a[4]=this.fifo_control;a[5]=this.ier;a[6]=this.iir;a[7]=this.modem_control;a[8]=this.modem_status;a[9]=this.scratch_register;a[10]=this.irq;return a};Ga.prototype.set_state=function(a){this.ints=a[0];this.baud_rate=a[1];this.line_control=a[2];this.lsr=a[3];this.fifo_control=a[4];this.ier=a[5];this.iir=a[6];this.modem_control=a[7];this.modem_status=
308
- a[8];this.scratch_register=a[9];this.irq=a[10]};Ga.prototype.CheckInterrupt=function(){this.ints&4096&&this.ier&1?(this.iir=12,this.cpu.device_raise_irq(this.irq)):this.ints&16&&this.ier&1?(this.iir=4,this.cpu.device_raise_irq(this.irq)):this.ints&4&&this.ier&2?(this.iir=2,this.cpu.device_raise_irq(this.irq)):this.ints&1&&this.ier&8?(this.iir=0,this.cpu.device_raise_irq(this.irq)):(this.iir=1,this.cpu.device_lower_irq(this.irq))};Ga.prototype.ThrowInterrupt=function(a){this.ints|=1<<a;this.CheckInterrupt()};
309
- Ga.prototype.ClearInterrupt=function(a){this.ints&=~(1<<a);this.CheckInterrupt()};Ga.prototype.data_received=function(a){E("input: "+B(a),16384);this.input.push(a);this.lsr|=1;this.fifo_control&1?this.ThrowInterrupt(12):this.ThrowInterrupt(4)};Ga.prototype.write_data=function(a){this.line_control&128?this.baud_rate=this.baud_rate&-256|a:(E("data: "+B(a),16384),this.ThrowInterrupt(2),this.bus.send("serial"+this.com+"-output-byte",a),a=String.fromCharCode(a),this.current_line+=a,"\n"===a&&(a=this.current_line.trimRight().replace(/[\x00-\x08\x0b-\x1f\x7f\x80-\xff]/g,
310
- ""),E("SERIAL: "+a),this.current_line=""))};Ga.prototype.set_modem_status=function(a){E("modem status: "+B(a),16384);const b=this.modem_status&15;let c=(this.modem_status^a)>>4;this.modem_status=a;this.modem_status=this.modem_status|c|b};function Ha(a){this.cpu=a;var b=a.io;a.devices.pci.register_device({pci_id:56,pci_space:[134,128,19,113,7,0,128,2,8,0,128,6,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,1,0,0],pci_bars:[],name:"acpi"});this.timer_imprecision_offset=
311
- this.timer_last_value=0;this.status=1;this.pm1_enable=this.pm1_status=0;this.last_timer=this.get_timer(F.microtick());this.gpe=new Uint8Array(4);b.register_read(45056,this,void 0,function(){E("ACPI pm1_status read",262144);return this.pm1_status});b.register_write(45056,this,void 0,function(c){E("ACPI pm1_status write: "+B(c,4),262144);this.pm1_status&=~c});b.register_read(45058,this,void 0,function(){E("ACPI pm1_enable read",262144);return this.pm1_enable});b.register_write(45058,this,void 0,function(c){E("ACPI pm1_enable write: "+
312
- B(c),262144);this.pm1_enable=c});b.register_read(45060,this,void 0,function(){E("ACPI status read",262144);return this.status});b.register_write(45060,this,void 0,function(c){E("ACPI status write: "+B(c),262144);this.status=c});b.register_read(45064,this,void 0,void 0,function(){return this.get_timer(F.microtick())&16777215});b.register_read(45024,this,function(){E("Read gpe#0",262144);return this.gpe[0]});b.register_read(45025,this,function(){E("Read gpe#1",262144);return this.gpe[1]});b.register_read(45026,
313
- this,function(){E("Read gpe#2",262144);return this.gpe[2]});b.register_read(45027,this,function(){E("Read gpe#3",262144);return this.gpe[3]});b.register_write(45024,this,function(c){E("Write gpe#0: "+B(c),262144);this.gpe[0]=c});b.register_write(45025,this,function(c){E("Write gpe#1: "+B(c),262144);this.gpe[1]=c});b.register_write(45026,this,function(c){E("Write gpe#2: "+B(c),262144);this.gpe[2]=c});b.register_write(45027,this,function(c){E("Write gpe#3: "+B(c),262144);this.gpe[3]=c})}Ha.prototype.timer=
314
- function(a){a=this.get_timer(a);var b=0!==((a^this.last_timer)&8388608);this.pm1_enable&1&&b?(E("ACPI raise irq",262144),this.pm1_status|=1,this.cpu.device_raise_irq(9)):this.cpu.device_lower_irq(9);this.last_timer=a;return 100};Ha.prototype.get_timer=function(a){a=Math.round(3579.545*a);a===this.timer_last_value?3579.545>this.timer_imprecision_offset&&this.timer_imprecision_offset++:(h(a>this.timer_last_value),this.timer_last_value+this.timer_imprecision_offset<=a?(this.timer_imprecision_offset=
315
- 0,this.timer_last_value=a):E("Warning: Overshot pmtimer, waiting; current="+a+" last="+this.timer_last_value+" offset="+this.timer_imprecision_offset,262144));return this.timer_last_value+this.timer_imprecision_offset};Ha.prototype.get_state=function(){var a=[];a[0]=this.status;a[1]=this.pm1_status;a[2]=this.pm1_enable;a[3]=this.gpe;return a};Ha.prototype.set_state=function(a){this.status=a[0];this.pm1_status=a[1];this.pm1_enable=a[2];this.gpe=a[3]};var Ia="Fixed (0);Lowest Prio (1);SMI (2);Reserved (3);NMI (4);INIT (5);Reserved (6);ExtINT (7)".split(";"),
316
- La=["physical","logical"];function Ma(a){this.cpu=a;this.timer_divider=this.apic_id=0;this.timer_divider_shift=1;this.timer_current_count=this.timer_initial_count=0;this.next_tick=F.microtick();this.lvt_error=this.lvt_int1=this.lvt_int0=this.lvt_perf_counter=this.lvt_thermal_sensor=this.lvt_timer=65536;this.icr1=this.icr0=this.tpr=0;this.irr=new Int32Array(8);this.isr=new Int32Array(8);this.tmr=new Int32Array(8);this.spurious_vector=254;this.destination_format=-1;this.read_error=this.error=this.local_destination=
317
- 0;a.io.mmap_register(4276092928,1048576,b=>{E("Unsupported read8 from apic: "+B(b>>>0),524288);var c=b&3;return this.read32(b&-4)>>8*c&255},(b,c)=>{E("Unsupported write8 from apic: "+B(b)+" <- "+B(c),524288);E(Error().stack,void 0);h(!1)},b=>this.read32(b),(b,c)=>this.write32(b,c))}Ma.prototype.read32=function(a){a=a-4276092928|0;switch(a){case 32:return E("APIC read id",524288),this.apic_id;case 48:return E("APIC read version",524288),327700;case 128:return this.tpr;case 208:return E("Read local destination",
318
- 524288),this.local_destination;case 224:return E("Read destination format",524288),this.destination_format;case 240:return this.spurious_vector;case 256:case 272:case 288:case 304:case 320:case 336:case 352:case 368:return a=a-256>>4,E("Read isr "+a+": "+B(this.isr[a]>>>0,8),524288),this.isr[a];case 384:case 400:case 416:case 432:case 448:case 464:case 480:case 496:return a=a-384>>4,E("Read tmr "+a+": "+B(this.tmr[a]>>>0,8),524288),this.tmr[a];case 512:case 528:case 544:case 560:case 576:case 592:case 608:case 624:return a=
319
- a-512>>4,E("Read irr "+a+": "+B(this.irr[a]>>>0,8),524288),this.irr[a];case 640:return E("Read error: "+B(this.read_error>>>0,8),524288),this.read_error;case 768:return this.icr0;case 784:return E("APIC read icr1",524288),this.icr1;case 800:return E("read timer lvt",524288),this.lvt_timer;case 816:return E("read lvt thermal sensor",524288),this.lvt_thermal_sensor;case 832:return E("read lvt perf counter",524288),this.lvt_perf_counter;case 848:return E("read lvt int0",524288),this.lvt_int0;case 864:return E("read lvt int1",
320
- 524288),this.lvt_int1;case 880:return E("read lvt error",524288),this.lvt_error;case 992:return E("read timer divider",524288),this.timer_divider;case 896:return E("read timer initial count",524288),this.timer_initial_count;case 912:return E("read timer current count: "+B(this.timer_current_count>>>0,8),524288),this.timer_current_count;default:return E("APIC read "+B(a),524288),h(!1),0}};Ma.prototype.write32=function(a,b){a=a-4276092928|0;switch(a){case 32:E("APIC write id: "+B(b>>>8,8),524288);this.apic_id=
321
- b;break;case 48:E("APIC write version: "+B(b>>>0,8)+", ignored",524288);break;case 128:this.tpr=b&255;this.check_vector();break;case 176:b=this.highest_isr();-1!==b?(this.register_clear_bit(this.isr,b),this.register_get_bit(this.tmr,b)&&this.cpu.devices.ioapic.remote_eoi(b),this.check_vector()):E("Bad eoi: No isr set",524288);break;case 208:E("Set local destination: "+B(b>>>0,8),524288);this.local_destination=b&4278190080;break;case 224:E("Set destination format: "+B(b>>>0,8),524288);this.destination_format=
322
- b|16777215;break;case 240:E("Set spurious vector: "+B(b>>>0,8),524288);this.spurious_vector=b;break;case 640:E("Write error: "+B(b>>>0,8),524288);this.read_error=this.error;this.error=0;break;case 768:a=b&255;var c=b>>8&7,d=b>>11&1,e=b>>15&1,g=b>>18&3,f=this.icr1>>>24;E("APIC write icr0: "+B(b,8)+" vector="+B(a,2)+" destination_mode="+La[d]+" delivery_mode="+Ia[c]+" destination_shorthand="+["no","self","all with self","all without self"][g],524288);this.icr0=b&-4097;0===g?this.route(a,c,e,f,d):1===
323
- g?this.deliver(a,0,e):2===g?this.deliver(a,c,e):3!==g&&h(!1);break;case 784:E("APIC write icr1: "+B(b>>>0,8),524288);this.icr1=b;break;case 800:E("timer lvt: "+B(b>>>0,8),524288);this.lvt_timer=b;break;case 816:E("lvt thermal sensor: "+B(b>>>0,8),524288);this.lvt_thermal_sensor=b;break;case 832:E("lvt perf counter: "+B(b>>>0,8),524288);this.lvt_perf_counter=b;break;case 848:E("lvt int0: "+B(b>>>0,8),524288);this.lvt_int0=b;break;case 864:E("lvt int1: "+B(b>>>0,8),524288);this.lvt_int1=b;break;case 880:E("lvt error: "+
324
- B(b>>>0,8),524288);this.lvt_error=b;break;case 992:E("timer divider: "+B(b>>>0,8),524288);this.timer_divider=b;b=b&3|(b&8)>>1;this.timer_divider_shift=7===b?0:b+1;break;case 896:E("timer initial: "+B(b>>>0,8),524288);this.timer_initial_count=b>>>0;this.timer_current_count=b>>>0;this.next_tick=F.microtick();this.timer_active=!0;break;case 912:E("timer current: "+B(b>>>0,8),524288);h(!1,"read-only register");break;default:E("APIC write32 "+B(a)+" <- "+B(b>>>0,8),524288),h(!1)}};Ma.prototype.timer=function(a){if(0===
325
- this.timer_current_count)return 100;const b=1E6/(1<<this.timer_divider_shift);a=(a-this.next_tick)*b>>>0;this.next_tick+=a/b;this.timer_current_count-=a;0>=this.timer_current_count&&(a=this.lvt_timer&393216,131072===a?(this.timer_current_count%=this.timer_initial_count,0>=this.timer_current_count&&(this.timer_current_count+=this.timer_initial_count),h(0!==this.timer_current_count),0===(this.lvt_timer&65536)&&this.deliver(this.lvt_timer&255,0,!1)):0===a&&(this.timer_current_count=0,E("APIC timer one shot end",
326
- 524288),0===(this.lvt_timer&65536)&&this.deliver(this.lvt_timer&255,0,!1)));return Math.max(0,this.timer_current_count/b)};Ma.prototype.route=function(a,b,c){this.deliver(a,b,c)};Ma.prototype.deliver=function(a,b,c){5!==b&&4!==b&&((16>a||255===a)&&h(!1,"TODO: Invalid vector"),this.register_get_bit(this.irr,a)?E("Not delivered: irr already set, vector="+B(a,2),524288):(this.register_set_bit(this.irr,a),c?this.register_set_bit(this.tmr,a):this.register_clear_bit(this.tmr,a),this.check_vector()))};Ma.prototype.highest_irr=
327
- function(){var a=this.register_get_highest_bit(this.irr);h(255!==a);h(16<=a||-1===a);return a};Ma.prototype.highest_isr=function(){var a=this.register_get_highest_bit(this.isr);h(255!==a);h(16<=a||-1===a);return a};Ma.prototype.check_vector=function(){var a=this.highest_irr();-1!==a&&(this.highest_isr()>=a||(a&240)<=(this.tpr&240)||this.cpu.handle_irqs())};Ma.prototype.acknowledge_irq=function(){var a=this.highest_irr();if(-1===a||this.highest_isr()>=a||(a&240)<=(this.tpr&240))return-1;this.register_clear_bit(this.irr,
328
- a);this.register_set_bit(this.isr,a);this.check_vector();return a};Ma.prototype.get_state=function(){var a=[];a[0]=this.apic_id;a[1]=this.timer_divider;a[2]=this.timer_divider_shift;a[3]=this.timer_initial_count;a[4]=this.timer_current_count;a[5]=this.next_tick;a[6]=this.lvt_timer;a[7]=this.lvt_perf_counter;a[8]=this.lvt_int0;a[9]=this.lvt_int1;a[10]=this.lvt_error;a[11]=this.tpr;a[12]=this.icr0;a[13]=this.icr1;a[14]=this.irr;a[15]=this.isr;a[16]=this.tmr;a[17]=this.spurious_vector;a[18]=this.destination_format;
329
- a[19]=this.local_destination;a[20]=this.error;a[21]=this.read_error;a[22]=this.lvt_thermal_sensor;return a};Ma.prototype.set_state=function(a){this.apic_id=a[0];this.timer_divider=a[1];this.timer_divider_shift=a[2];this.timer_initial_count=a[3];this.timer_current_count=a[4];this.next_tick=a[5];this.lvt_timer=a[6];this.lvt_perf_counter=a[7];this.lvt_int0=a[8];this.lvt_int1=a[9];this.lvt_error=a[10];this.tpr=a[11];this.icr0=a[12];this.icr1=a[13];this.irr=a[14];this.isr=a[15];this.tmr=a[16];this.spurious_vector=
330
- a[17];this.destination_format=a[18];this.local_destination=a[19];this.error=a[20];this.read_error=a[21];this.lvt_thermal_sensor=a[22]||65536};Ma.prototype.register_get_bit=function(a,b){h(0<=b&&256>b);return a[b>>5]>>(b&31)&1};Ma.prototype.register_set_bit=function(a,b){h(0<=b&&256>b);a[b>>5]|=1<<(b&31)};Ma.prototype.register_clear_bit=function(a,b){h(0<=b&&256>b);a[b>>5]&=~(1<<(b&31))};Ma.prototype.register_get_highest_bit=function(a){for(var b=7;0<=b;b--){var c=a[b];if(c)return k.int_log2(c>>>0)|
331
- b<<5}return-1};function Na(a){this.cpu=a;this.ioredtbl_config=new Int32Array(24);this.ioredtbl_destination=new Int32Array(24);for(var b=0;b<this.ioredtbl_config.length;b++)this.ioredtbl_config[b]=65536;this.irq_value=this.irr=this.ioapic_id=this.ioregsel=0;h(!0);a.io.mmap_register(4273995776,131072,c=>{c=c-4273995776|0;if(16<=c&&20>c)return c-=16,E("ioapic read8 byte "+c+" "+B(this.ioregsel),524288),this.read(this.ioregsel)>>8*c&255;E("Unexpected IOAPIC register read: "+B(c>>>0),524288);h(!1);return 0},
332
- c=>{h(!1,"unsupported write8 from ioapic: "+B(c>>>0))},c=>{c=c-4273995776|0;if(0===c)return this.ioregsel;if(16===c)return this.read(this.ioregsel);E("Unexpected IOAPIC register read: "+B(c>>>0),524288);h(!1);return 0},(c,d)=>{c=c-4273995776|0;0===c?this.ioregsel=d:16===c?this.write(this.ioregsel,d):(E("Unexpected IOAPIC register write: "+B(c>>>0)+" <- "+B(d>>>0,8),524288),h(!1))})}Na.prototype.remote_eoi=function(a){for(var b=0;24>b;b++){var c=this.ioredtbl_config[b];(c&255)===a&&c&16384&&(E("Clear remote IRR for irq="+
333
- B(b),524288),this.ioredtbl_config[b]&=-16385,this.check_irq(b))}};Na.prototype.check_irq=function(a){var b=1<<a;if(0!==(this.irr&b)){var c=this.ioredtbl_config[a];if(0===(c&65536)){var d=c>>8&7,e=c>>11&1,g=c&255,f=this.ioredtbl_destination[a]>>>24,l=32768===(c&32768);if(0===(c&32768))this.irr&=~b;else if(this.ioredtbl_config[a]|=16384,c&16384){E("No route: level interrupt and remote IRR still set",524288);return}0===d||1===d?this.cpu.devices.apic.route(g,d,l,f,e):h(!1,"TODO");this.ioredtbl_config[a]&=
334
- -4097}}};Na.prototype.set_irq=function(a){if(24<=a)h(!1,"Bad irq: "+a,524288);else{var b=1<<a;0===(this.irq_value&b)&&(this.irq_value|=b,65536!==(this.ioredtbl_config[a]&98304)&&(this.irr|=b,this.check_irq(a)))}};Na.prototype.clear_irq=function(a){if(24<=a)h(!1,"Bad irq: "+a,524288);else{var b=1<<a;(this.irq_value&b)===b&&(this.irq_value&=~b,this.ioredtbl_config[a]&32768&&(this.irr&=~b))}};Na.prototype.read=function(a){if(0===a)return E("IOAPIC Read id",524288),this.ioapic_id<<24;if(1===a)return E("IOAPIC Read version",
335
- 524288),1507345;if(2===a)return E("IOAPIC Read arbitration id",524288),this.ioapic_id<<24;if(16<=a&&64>a){var b=a-16>>1;a&1?(a=this.ioredtbl_destination[b],E("IOAPIC Read destination irq="+B(b)+" -> "+B(a,8),524288)):(a=this.ioredtbl_config[b],E("IOAPIC Read config irq="+B(b)+" -> "+B(a,8),524288));return a}E("IOAPIC register read outside of range "+B(a),524288);h(!1);return 0};Na.prototype.write=function(a,b){if(0===a)this.ioapic_id=b>>>24&15;else if(1===a||2===a)E("Invalid write: "+a,524288);else if(16<=
336
- a&&64>a){var c=a-16>>1;if(a&1)this.ioredtbl_destination[c]=b&4278190080,E("Write destination "+B(b>>>0,8)+" irq="+B(c)+" dest="+B(b>>>24,2),524288);else{this.ioredtbl_config[c]=b&110591|this.ioredtbl_config[c]&-110592;a=b&255;var d=b>>8&7,e=b>>11&1,g=b>>15&1,f=b>>16&1;E("Write config "+B(b>>>0,8)+" irq="+B(c)+" vector="+B(a,2)+" deliverymode="+Ia[d]+" destmode="+La[e]+" is_level="+g+" disabled="+f,524288);this.check_irq(c)}}else E("IOAPIC register write outside of range "+B(a)+": "+B(b>>>0,8),524288),
337
- h(!1)};Na.prototype.get_state=function(){var a=[];a[0]=this.ioredtbl_config;a[1]=this.ioredtbl_destination;a[2]=this.ioregsel;a[3]=this.ioapic_id;a[4]=this.irr;a[5]=this.irq_value;return a};Na.prototype.set_state=function(a){this.ioredtbl_config=a[0];this.ioredtbl_destination=a[1];this.ioregsel=a[2];this.ioapic_id=a[3];this.irr=a[4];this.irq_value=a[5]};function Oa(a){this.message=a}Oa.prototype=Error();const Qa={Uint8Array,Int8Array,Uint16Array,Int16Array,Uint32Array,Int32Array,Float32Array,Float64Array};
338
- function Ra(a,b){if("object"!==typeof a||null===a)return h("function"!==typeof a),a;if(Array.isArray(a))return a.map(g=>Ra(g,b));a.constructor===Object&&(console.log(a),h(a.constructor!==Object,"Expected non-object"));if(a.BYTES_PER_ELEMENT){var c=new Uint8Array(a.buffer,a.byteOffset,a.length*a.BYTES_PER_ELEMENT);a=a.constructor.name.replace("bound ","");h(Qa[a]);return{__state_type__:a,buffer_id:b.push(c)-1}}!a.get_state&&console.log("Object without get_state: ",a);c=a.get_state();a=[];for(var d=
339
- 0;d<c.length;d++){var e=c[d];h("function"!==typeof e);a[d]=Ra(e,b)}return a}function Sa(a,b){if("object"!==typeof a||null===a)return h("function"!==typeof a),a;if(Array.isArray(a)){for(var c=0;c<a.length;c++)a[c]=Sa(a[c],b);return a}c=a.__state_type__;h(void 0!==c);const d=Qa[c];h(d,"Unkown type: "+c);return new d(b[a.buffer_id])}G.prototype.save_state=function(){for(var a=[],b=Ra(this,a),c=[],d=0,e=0;e<a.length;e++){var g=a[e].byteLength;c[e]={offset:d,length:g};d+=g;d=d+3&-4}b=JSON.stringify({buffer_infos:c,
340
- state:b});b=(new TextEncoder).encode(b);e=16+b.length;e=e+3&-4;var f=e+d;d=new ArrayBuffer(f);var l=new Int32Array(d,0,4);(new Uint8Array(d,16,b.length)).set(b);g=new Uint8Array(d,e);l[0]=-2039052682;l[1]=6;l[2]=f;l[3]=b.length;for(e=0;e<a.length;e++)f=a[e],h(f.constructor===Uint8Array),g.set(f,c[e].offset);E("State: json size "+(b.byteLength>>10)+"k");E("State: Total buffers size "+(g.byteLength>>10)+"k");return d};G.prototype.restore_state=function(a){function b(t,v){const y=t.length;if(16>y)throw new Oa("Invalid length: "+
341
- y);t=new Int32Array(t.buffer,t.byteOffset,4);if(-2039052682!==t[0])throw new Oa("Invalid header: "+B(t[0]>>>0));if(6!==t[1])throw new Oa("Version mismatch: dump="+t[1]+" we=6");if(v&&t[2]!==y)throw new Oa("Length doesn't match header: real="+y+" header="+t[2]);return t[3]}function c(t){t=(new TextDecoder).decode(t);return JSON.parse(t)}a=new Uint8Array(a);if(4247762216===(new Uint32Array(a.buffer,0,1))[0]){var d=this.zstd_create_ctx(a.length);(new Uint8Array(this.wasm_memory.buffer,this.zstd_get_src_ptr(d),
342
- a.length)).set(a);var e=this.zstd_read(d,16),g=new Uint8Array(this.wasm_memory.buffer,e,16),f=b(g,!1);this.zstd_read_free(e,16);e=this.zstd_read(d,f);g=new Uint8Array(this.wasm_memory.buffer,e,f);g=c(g);this.zstd_read_free(e,f);e=g.state;var l=g.buffer_infos;g=[];f=16+f;for(var n of l){l=(f+3&-4)-f;if(1048576<n.length){var m=this.zstd_read(d,l);this.zstd_read_free(m,l);m=new Uint8Array(n.length);g.push(m.buffer);for(var q=0;q<n.length;){var r=n.length-q;h(0<=r);r=Math.min(r,1048576);const t=this.zstd_read(d,
343
- r);m.set(new Uint8Array(this.wasm_memory.buffer,t,r),q);this.zstd_read_free(t,r);q+=r}}else m=this.zstd_read(d,l+n.length),q=m+l,g.push(this.wasm_memory.buffer.slice(q,q+n.length)),this.zstd_read_free(m,l+n.length);f+=l+n.length}e=Sa(e,g);this.set_state(e);this.zstd_free_ctx(d)}else{d=b(a,!0);if(0>d||d+12>=a.length)throw new Oa("Invalid info block length: "+d);n=a.subarray(16,16+d);e=c(n);n=e.state;e=e.buffer_infos;let t=16+d;t=t+3&-4;d=e.map(v=>{const y=t+v.offset;return a.buffer.slice(y,y+v.length)});
344
- n=Sa(n,d);this.set_state(n)}};function Ta(a,b,c){a[0]===b[0]&&a[1]===b[1]&&a[2]===b[2]&&a[3]===b[3]&&a[4]===b[4]&&a[5]===b[5]&&(E("Replace mac in eth destination field",1048576),a[0]=c[0],a[1]=c[1],a[2]=c[2],a[3]=c[3],a[4]=c[4],a[5]=c[5]);a[6]===b[0]&&a[7]===b[1]&&a[8]===b[2]&&a[9]===b[3]&&a[10]===b[4]&&a[11]===b[5]&&(E("Replace mac in eth source field",1048576),a[6]=c[0],a[7]=c[1],a[8]=c[2],a[9]=c[3],a[10]=c[4],a[11]=c[5]);var d=a[12]<<8|a[13];if(2048===d)if(a=a.subarray(14),d=a[0]>>4,4!==d)E("Expected ipv4.version==4 but got: "+
345
- d,1048576);else{if(h(5===(a[0]&15),"TODO: ihl!=5"),17===a[9]){a=a.subarray(20);d=a[0]<<8|a[1];var e=a[2]<<8|a[3];E("udp srcport="+d+" dstport="+e+" checksum="+B(a[6]<<8|a[7],4),1048576);if(67===d||67===e)if(d=a.subarray(8),e=d[236]<<24|d[237]<<16|d[238]<<8|d[239],1669485411!==e)E("dhcp packet didn't match magic: "+B(e,8));else for(d[28]===b[0]&&d[29]===b[1]&&d[30]===b[2]&&d[31]===b[3]&&d[32]===b[4]&&d[33]===b[5]&&(E("Replace mac in dhcp.chaddr",1048576),d[28]=c[0],d[29]=c[1],d[30]=c[2],d[31]=c[3],
346
- d[32]=c[4],d[33]=c[5],a[6]=a[7]=0),e=240;e<d.length;){const g=d[e++];if(255===g)break;const f=d[e++];61===g&&1===d[e+0]&&d[e+1]===b[0]&&d[e+2]===b[1]&&d[e+3]===b[2]&&d[e+4]===b[3]&&d[e+5]===b[4]&&d[e+6]===b[5]&&(E("Replace mac in dhcp.clientidentifier",1048576),d[e+1]=c[0],d[e+2]=c[1],d[e+3]=c[2],d[e+4]=c[3],d[e+5]=c[4],d[e+6]=c[5],a[6]=a[7]=0);e+=f}}}else 2054===d&&(a=a.subarray(14),E("arp oper="+a[7]+" "+Ua(a.subarray(8,14))+" "+Ua(a.subarray(18,24)),1048576),a[8]===b[0]&&a[9]===b[1]&&a[10]===b[2]&&
347
- a[11]===b[3]&&a[12]===b[4]&&a[13]===b[5]&&(E("Replace mac in arp.sha",1048576),a[8]=c[0],a[9]=c[1],a[10]=c[2],a[11]=c[3],a[12]=c[4],a[13]=c[5]))}function Ua(a){return[a[0].toString(16).padStart(2,"0"),a[1].toString(16).padStart(2,"0"),a[2].toString(16).padStart(2,"0"),a[3].toString(16).padStart(2,"0"),a[4].toString(16).padStart(2,"0"),a[5].toString(16).padStart(2,"0")].join(":")}function Va(a,b,c,d,e){this.cpu=a;this.pci=a.devices.pci;this.id=e||0;this.preserve_mac_from_state_image=c;this.mac_address_translation=
348
- d;this.bus=b;this.bus.register("net"+this.id+"-receive",function(g){this.receive(g)},this);this.port=768+256*this.id;this.name="ne2k";this.pci_space=[236,16,41,128,3,1,0,0,0,0,0,2,0,0,0,0,this.port&255|1,this.port>>8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,26,0,17,0,0,184,254,0,0,0,0,0,0,0,0,0,1,0,0];this.pci_id=(0===this.id?5:7+this.id)<<3;this.pci_bars=[{size:32}];this.imr=this.isr=0;this.cr=1;this.tpsr=this.tcnt=this.rcnt=this.dcfg=0;this.memory=new Uint8Array(32768);this.txcr=
349
- this.rxcr=0;this.tsr=1;this.mac=new Uint8Array([0,34,21,255*Math.random()|0,255*Math.random()|0,255*Math.random()|0]);this.bus.send("net"+this.id+"-mac",Ua(this.mac));this.mar=Uint8Array.of(255,255,255,255,255,255,255,255);this.mac_address_in_state=null;for(b=0;6>b;b++)this.memory[b<<1]=this.memory[b<<1|1]=this.mac[b];this.memory[28]=this.memory[29]=87;this.memory[30]=this.memory[31]=87;E("Mac: "+Ua(this.mac),1048576);this.rsar=0;this.pstart=64;this.pstop=128;this.boundary=this.curpg=76;b=a.io;b.register_read(this.port|
350
- 0,this,function(){E("Read cmd",1048576);return this.cr});b.register_write(this.port|0,this,function(g){this.cr=g;E("Write command: "+B(g,2)+" newpg="+(this.cr>>6)+" txcr="+B(this.txcr,2),1048576);this.cr&1||(g&24&&0===this.rcnt&&this.do_interrupt(64),g&4&&(g=this.tpsr<<8,g=this.memory.subarray(g,g+this.tcnt),this.mac_address_in_state&&(g=new Uint8Array(g),Ta(g,this.mac_address_in_state,this.mac)),this.bus.send("net"+this.id+"-send",g),this.bus.send("eth-transmit-end",[g.length]),this.cr&=-5,this.do_interrupt(2),
351
- E("Command: Transfer. length="+B(g.byteLength),1048576)))});b.register_read(this.port|13,this,function(){var g=this.get_page();if(1===g)return E("Read mar5",1048576),this.mar[5];E("Read counter0 pg="+g,1048576);return 0});b.register_read(this.port|14,this,function(){var g=this.get_page();if(1===g)return E("Read mar6",1048576),this.mar[6];E("Read8 counter1 pg="+g,1048576);return 0},function(){E("Read16 counter1 pg="+this.get_page(),1048576);return 0});b.register_read(this.port|15,this,function(){var g=
352
- this.get_page();if(1===g)return E("Read mar7",1048576),this.mar[7];E("Read counter2 pg="+g,1048576);return 0});b.register_read(this.port|31,this,function(){this.get_page();E("Read reset",1048576);this.do_interrupt(128);return 0});b.register_write(this.port|31,this,function(g){this.get_page();E("Write reset: "+B(g,2),1048576)});b.register_read(this.port|1,this,function(){var g=this.get_page();if(0===g)return this.pstart;if(1===g)return E("Read pg1/01 (mac[0])",1048576),this.mac[0];if(2===g)return this.pstart;
353
- E("Read pg"+g+"/01");h(!1);return 0});b.register_write(this.port|1,this,function(g){var f=this.get_page();0===f?(E("start page: "+B(g,2),1048576),this.pstart=g):1===f?(E("mac[0] = "+B(g),1048576),this.mac[0]=g):3===f?E("Unimplemented: Write pg3/01 (9346CR): "+B(g),1048576):(E("Write pg"+f+"/01: "+B(g),1048576),h(!1))});b.register_read(this.port|2,this,function(){var g=this.get_page();if(0===g)return this.pstop;if(1===g)return E("Read pg1/02 (mac[1])",1048576),this.mac[1];if(2===g)return this.pstop;
354
- E("Read pg"+g+"/02",1048576);h(!1);return 0});b.register_write(this.port|2,this,function(g){var f=this.get_page();0===f?(E("stop page: "+B(g,2),1048576),g>this.memory.length>>8&&(g=this.memory.length>>8,E("XXX: Adjusting stop page to "+B(g),1048576)),this.pstop=g):1===f?(E("mac[1] = "+B(g),1048576),this.mac[1]=g):(E("Write pg"+f+"/02: "+B(g),1048576),h(!1))});b.register_read(this.port|7,this,function(){var g=this.get_page();if(0===g)return E("Read isr: "+B(this.isr,2),1048576),this.isr;if(1===g)return E("Read curpg: "+
355
- B(this.curpg,2),1048576),this.curpg;h(!1);return 0});b.register_write(this.port|7,this,function(g){var f=this.get_page();0===f?(E("Write isr: "+B(g,2),1048576),this.isr&=~g,this.update_irq()):1===f?(E("Write curpg: "+B(g,2),1048576),this.curpg=g):h(!1)});b.register_write(this.port|13,this,function(g){var f=this.get_page();0===f?(this.txcr=g,E("Write tx config: "+B(g,2),1048576)):E("Unimplemented: Write pg"+f+"/0d "+B(g,2),1048576)});b.register_write(this.port|14,this,function(g){var f=this.get_page();
356
- 0===f?(E("Write data configuration: "+B(g,2),1048576),this.dcfg=g):E("Unimplemented: Write pg"+f+"/0e "+B(g,2),1048576)});b.register_read(this.port|10,this,function(){var g=this.get_page();if(0===g)return E("Read pg0/0a",1048576),80;if(1===g)return E("Read mar2",1048576),this.mar[2];h(!1,"TODO");return 0});b.register_write(this.port|10,this,function(g){var f=this.get_page();0===f?(E("Write remote byte count low: "+B(g,2),1048576),this.rcnt=this.rcnt&65280|g&255):E("Unimplemented: Write pg"+f+"/0a "+
357
- B(g,2),1048576)});b.register_read(this.port|11,this,function(){var g=this.get_page();if(0===g)return E("Read pg0/0b",1048576),67;if(1===g)return E("Read mar3",1048576),this.mar[3];h(!1,"TODO");return 0});b.register_write(this.port|11,this,function(g){var f=this.get_page();0===f?(E("Write remote byte count high: "+B(g,2),1048576),this.rcnt=this.rcnt&255|g<<8&65280):E("Unimplemented: Write pg"+f+"/0b "+B(g,2),1048576)});b.register_read(this.port|8,this,function(){var g=this.get_page();if(0===g)return E("Read remote start address low",
358
- 1048576),this.rsar&255;if(1===g)return E("Read mar0",1048576),this.mar[0];E("Unimplemented: Read pg"+g+"/08",1048576);h(!1);return 0});b.register_write(this.port|8,this,function(g){var f=this.get_page();0===f?(E("Write remote start address low: "+B(g,2),1048576),this.rsar=this.rsar&65280|g&255):E("Unimplemented: Write pg"+f+"/08 "+B(g,2),1048576)});b.register_read(this.port|9,this,function(){var g=this.get_page();if(0===g)return E("Read remote start address high",1048576),this.rsar>>8&255;if(1===
359
- g)return E("Read mar1",1048576),this.mar[1];E("Unimplemented: Read pg"+g+"/09",1048576);h(!1);return 0});b.register_write(this.port|9,this,function(g){var f=this.get_page();0===f?(E("Write remote start address low: "+B(g,2),1048576),this.rsar=this.rsar&255|g<<8&65280):E("Unimplemented: Write pg"+f+"/09 "+B(g,2),1048576)});b.register_write(this.port|15,this,function(g){var f=this.get_page();0===f?(E("Write interrupt mask register: "+B(g,2)+" isr="+B(this.isr,2),1048576),this.imr=g,this.update_irq()):
360
- E("Unimplemented: Write pg"+f+"/0f "+B(g,2),1048576)});b.register_read(this.port|3,this,function(){var g=this.get_page();if(0===g)return E("Read boundary: "+B(this.boundary,2),1048576),this.boundary;if(1===g)return E("Read pg1/03 (mac[2])",1048576),this.mac[2];3===g?E("Unimplemented: Read pg3/03 (CONFIG0)",1048576):(E("Read pg"+g+"/03",1048576),h(!1));return 0});b.register_write(this.port|3,this,function(g){var f=this.get_page();0===f?(E("Write boundary: "+B(g,2),1048576),this.boundary=g):1===f?(E("mac[2] = "+
361
- B(g),1048576),this.mac[2]=g):(E("Write pg"+f+"/03: "+B(g),1048576),h(!1))});b.register_read(this.port|4,this,function(){var g=this.get_page();if(0===g)return this.tsr;if(1===g)return E("Read pg1/04 (mac[3])",1048576),this.mac[3];E("Read pg"+g+"/04",1048576);h(!1);return 0});b.register_write(this.port|4,this,function(g){var f=this.get_page();0===f?(E("Write tpsr: "+B(g,2),1048576),this.tpsr=g):1===f?(E("mac[3] = "+B(g),1048576),this.mac[3]=g):(E("Write pg"+f+"/04: "+B(g),1048576),h(!1))});b.register_read(this.port|
362
- 5,this,function(){var g=this.get_page();if(0===g)return E("Unimplemented: Read pg0/05 (NCR: Number of Collisions Register)",1048576),0;if(1===g)return E("Read pg1/05 (mac[4])",1048576),this.mac[4];3===g?E("Unimplemented: Read pg3/05 (CONFIG2)",1048576):(E("Read pg"+g+"/05",1048576),h(!1));return 0});b.register_write(this.port|5,this,function(g){var f=this.get_page();0===f?(E("Write tcnt low: "+B(g,2),1048576),this.tcnt=this.tcnt&-256|g):1===f?(E("mac[4] = "+B(g),1048576),this.mac[4]=g):3===f?E("Unimplemented: Write pg3/05 (CONFIG2): "+
363
- B(g),1048576):(E("Write pg"+f+"/05: "+B(g),1048576),h(!1))});b.register_read(this.port|6,this,function(){var g=this.get_page();if(0===g)return h(!1,"TODO"),0;if(1===g)return E("Read pg1/06 (mac[5])",1048576),this.mac[5];3===g?E("Unimplemented: Read pg3/06 (CONFIG3)",1048576):(E("Read pg"+g+"/06",1048576),h(!1));return 0});b.register_write(this.port|6,this,function(g){var f=this.get_page();0===f?(E("Write tcnt high: "+B(g,2),1048576),this.tcnt=this.tcnt&255|g<<8):1===f?(E("mac[5] = "+B(g),1048576),
364
- this.mac[5]=g):3===f?E("Unimplemented: Write pg3/06 (CONFIG3): "+B(g),1048576):(E("Write pg"+f+"/06: "+B(g),1048576),h(!1))});b.register_read(this.port|12,this,function(){var g=this.get_page();if(0===g)return 9;if(1===g)return E("Read mar4",1048576),this.mar[4];E("Unimplemented: Read pg"+g+"/0c",1048576);h(!1);return 0});b.register_write(this.port|12,this,function(g){var f=this.get_page();0===f?(E("RX configuration reg write: "+B(g,2),1048576),this.rxcr=g):E("Unimplemented: Write pg"+f+"/0c: "+B(g),
365
- 1048576)});b.register_read(this.port|16,this,this.data_port_read8,this.data_port_read16,this.data_port_read32);b.register_write(this.port|16,this,this.data_port_write16,this.data_port_write16,this.data_port_write32);a.devices.pci.register_device(this)}Va.prototype.get_state=function(){var a=[];a[0]=this.isr;a[1]=this.imr;a[2]=this.cr;a[3]=this.dcfg;a[4]=this.rcnt;a[5]=this.tcnt;a[6]=this.tpsr;a[7]=this.rsar;a[8]=this.pstart;a[9]=this.curpg;a[10]=this.boundary;a[11]=this.pstop;a[12]=this.rxcr;a[13]=
366
- this.txcr;a[14]=this.tsr;a[15]=this.mac;a[16]=this.memory;return a};Va.prototype.set_state=function(a){this.isr=a[0];this.imr=a[1];this.cr=a[2];this.dcfg=a[3];this.rcnt=a[4];this.tcnt=a[5];this.tpsr=a[6];this.rsar=a[7];this.pstart=a[8];this.curpg=a[9];this.boundary=a[10];this.pstop=a[11];this.rxcr=a[12];this.txcr=a[13];this.tsr=a[14];this.preserve_mac_from_state_image?(this.mac=a[15],this.memory=a[16]):this.mac_address_translation&&(this.mac_address_in_state=a[15],this.memory=a[16],E("Using mac address translation guest_os_mac="+
367
- Ua(this.mac_address_in_state)+" real_mac="+Ua(this.mac),1048576));this.bus.send("net"+this.id+"-mac",Ua(this.mac))};Va.prototype.do_interrupt=function(a){E("Do interrupt "+B(a,2),1048576);this.isr|=a;this.update_irq()};Va.prototype.update_irq=function(){this.imr&this.isr?this.pci.raise_irq(this.pci_id):this.pci.lower_irq(this.pci_id)};Va.prototype.data_port_write=function(a){if(16>=this.rsar||16384<=this.rsar&&32768>this.rsar)this.memory[this.rsar]=a;this.rsar++;this.rcnt--;this.rsar>=this.pstop<<
368
- 8&&(this.rsar+=this.pstart-this.pstop<<8);0===this.rcnt&&this.do_interrupt(64)};Va.prototype.data_port_write16=function(a){this.data_port_write(a);this.dcfg&1&&this.data_port_write(a>>8)};Va.prototype.data_port_write32=function(a){this.data_port_write(a);this.data_port_write(a>>8);this.data_port_write(a>>16);this.data_port_write(a>>24)};Va.prototype.data_port_read=function(){let a=0;32768>this.rsar&&(a=this.memory[this.rsar]);this.rsar++;this.rcnt--;this.rsar>=this.pstop<<8&&(this.rsar+=this.pstart-
369
- this.pstop<<8);0===this.rcnt&&this.do_interrupt(64);return a};Va.prototype.data_port_read8=function(){return this.data_port_read16()&255};Va.prototype.data_port_read16=function(){return this.dcfg&1?this.data_port_read()|this.data_port_read()<<8:this.data_port_read()};Va.prototype.data_port_read32=function(){return this.data_port_read()|this.data_port_read()<<8|this.data_port_read()<<16|this.data_port_read()<<24};Va.prototype.receive=function(a){if(!(this.cr&1)&&(this.bus.send("eth-receive-end",[a.length]),
370
- this.rxcr&16||this.rxcr&4&&255===a[0]&&255===a[1]&&255===a[2]&&255===a[3]&&255===a[4]&&255===a[5]||!(this.rxcr&8&&1===(a[0]&1)||a[0]!==this.mac[0]||a[1]!==this.mac[1]||a[2]!==this.mac[2]||a[3]!==this.mac[3]||a[4]!==this.mac[4]||a[5]!==this.mac[5]))){this.mac_address_in_state&&(a=new Uint8Array(a),Ta(a,this.mac,this.mac_address_in_state));var b=this.curpg<<8,c=Math.max(60,a.length)+4,d=b+4,e=this.curpg+1+(c>>8),g=b+c,f=1+(c>>8),l=this.boundary>this.curpg?this.boundary-this.curpg:this.pstop-this.curpg+
371
- this.boundary-this.pstart;l<f&&0!==this.boundary?E("Buffer full, dropping packet pstart="+B(this.pstart)+" pstop="+B(this.pstop)+" curpg="+B(this.curpg)+" needed="+B(f)+" boundary="+B(this.boundary)+" available="+B(l),1048576):(g>this.pstop<<8?(h(60<=a.length),g=(this.pstop<<8)-d,h(0<=g),this.memory.set(a.subarray(0,g),d),this.memory.set(a.subarray(g),this.pstart<<8),E("rcv cut="+B(g),1048576)):(this.memory.set(a,d),60>a.length&&this.memory.fill(0,d+a.length,d+60)),e>=this.pstop&&(e+=this.pstart-
372
- this.pstop),this.memory[b]=1,this.memory[b+1]=e,this.memory[b+2]=c,this.memory[b+3]=c>>8,this.curpg=e,E("rcv offset="+B(b)+" len="+B(c)+" next="+B(e),1048576),this.do_interrupt(1))}};Va.prototype.get_page=function(){return this.cr>>6&3};var Wa=new Uint8Array(256),Xa=[],Ya=[],Za=[],ab=new Uint8Array(256),bb=[];function Q(a,b){this.cpu=a;this.bus=b;this.write_buffer=new sa(64);this.read_buffer=new sa(64);this.mixer_current_address=this.command_size=this.command=this.read_buffer_lastvalue=0;this.mixer_registers=
373
- new Uint8Array(256);this.mixer_reset();this.dummy_speaker_enabled=!1;this.test_register=0;this.dsp_signed=this.dsp_16bit=this.dsp_stereo=this.dsp_highspeed=!1;this.dac_buffers=[new ta(65536),new ta(65536)];this.dma=a.devices.dma;this.dma_channel=this.dma_irq=this.dma_bytes_block=this.dma_bytes_left=this.dma_bytes_count=this.dma_sample_count=0;this.dma_channel_8bit=1;this.dma_channel_16bit=5;this.dma_autoinit=!1;this.dma_buffer=new ArrayBuffer(65536);this.dma_buffer_int8=new Int8Array(this.dma_buffer);
374
- this.dma_buffer_uint8=new Uint8Array(this.dma_buffer);this.dma_buffer_int16=new Int16Array(this.dma_buffer);this.dma_buffer_uint16=new Uint16Array(this.dma_buffer);this.dma_syncbuffer=new k.SyncBuffer(this.dma_buffer);this.dma_paused=this.dma_waiting_transfer=!1;this.sampling_rate=22050;b.send("dac-tell-sampling-rate",this.sampling_rate);this.bytes_per_sample=1;this.e2_value=170;this.e2_count=0;this.asp_registers=new Uint8Array(256);this.mpu_read_buffer=new sa(64);this.fm_current_address1=this.fm_current_address0=
375
- this.mpu_read_buffer_lastvalue=0;this.fm_waveform_select_enable=!1;this.irq=5;this.irq_triggered=new Uint8Array(16);a.io.register_read_consecutive(544,this,this.port2x0_read,this.port2x1_read,this.port2x2_read,this.port2x3_read);a.io.register_read_consecutive(904,this,this.port2x0_read,this.port2x1_read);a.io.register_read_consecutive(548,this,this.port2x4_read,this.port2x5_read);a.io.register_read(550,this,this.port2x6_read);a.io.register_read(551,this,this.port2x7_read);a.io.register_read(552,this,
376
- this.port2x8_read);a.io.register_read(553,this,this.port2x9_read);a.io.register_read(554,this,this.port2xA_read);a.io.register_read(555,this,this.port2xB_read);a.io.register_read(556,this,this.port2xC_read);a.io.register_read(557,this,this.port2xD_read);a.io.register_read_consecutive(558,this,this.port2xE_read,this.port2xF_read);a.io.register_write_consecutive(544,this,this.port2x0_write,this.port2x1_write,this.port2x2_write,this.port2x3_write);a.io.register_write_consecutive(904,this,this.port2x0_write,
377
- this.port2x1_write);a.io.register_write_consecutive(548,this,this.port2x4_write,this.port2x5_write);a.io.register_write(550,this,this.port2x6_write);a.io.register_write(551,this,this.port2x7_write);a.io.register_write_consecutive(552,this,this.port2x8_write,this.port2x9_write);a.io.register_write(554,this,this.port2xA_write);a.io.register_write(555,this,this.port2xB_write);a.io.register_write(556,this,this.port2xC_write);a.io.register_write(557,this,this.port2xD_write);a.io.register_write(558,this,
378
- this.port2xE_write);a.io.register_write(559,this,this.port2xF_write);a.io.register_read_consecutive(816,this,this.port3x0_read,this.port3x1_read);a.io.register_write_consecutive(816,this,this.port3x0_write,this.port3x1_write);this.dma.on_unmask(this.dma_on_unmask,this);b.register("dac-request-data",function(){this.dac_handle_request()},this);b.register("speaker-has-initialized",function(){this.mixer_reset()},this);b.send("speaker-confirm-initialized");this.dsp_reset()}Q.prototype.dsp_reset=function(){this.write_buffer.clear();
379
- this.read_buffer.clear();this.command_size=this.command=0;this.dummy_speaker_enabled=!1;this.test_register=0;this.dsp_signed=this.dsp_16bit=this.dsp_stereo=this.dsp_highspeed=!1;this.dac_buffers[0].clear();this.dac_buffers[1].clear();this.dma_channel=this.dma_irq=this.dma_bytes_block=this.dma_bytes_left=this.dma_bytes_count=this.dma_sample_count=0;this.dma_autoinit=!1;this.dma_buffer_uint8.fill(0);this.dma_paused=this.dma_waiting_transfer=!1;this.e2_value=170;this.e2_count=0;this.sampling_rate=22050;
380
- this.bytes_per_sample=1;this.lower_irq(1);this.irq_triggered.fill(0);this.asp_registers.fill(0);this.asp_registers[5]=1;this.asp_registers[9]=248};Q.prototype.get_state=function(){var a=[];a[2]=this.read_buffer_lastvalue;a[3]=this.command;a[4]=this.command_size;a[5]=this.mixer_current_address;a[6]=this.mixer_registers;a[7]=this.dummy_speaker_enabled;a[8]=this.test_register;a[9]=this.dsp_highspeed;a[10]=this.dsp_stereo;a[11]=this.dsp_16bit;a[12]=this.dsp_signed;a[15]=this.dma_sample_count;a[16]=this.dma_bytes_count;
381
- a[17]=this.dma_bytes_left;a[18]=this.dma_bytes_block;a[19]=this.dma_irq;a[20]=this.dma_channel;a[21]=this.dma_channel_8bit;a[22]=this.dma_channel_16bit;a[23]=this.dma_autoinit;a[24]=this.dma_buffer_uint8;a[25]=this.dma_waiting_transfer;a[26]=this.dma_paused;a[27]=this.sampling_rate;a[28]=this.bytes_per_sample;a[29]=this.e2_value;a[30]=this.e2_count;a[31]=this.asp_registers;a[33]=this.mpu_read_buffer_last_value;a[34]=this.irq;a[35]=this.irq_triggered;return a};Q.prototype.set_state=function(a){this.read_buffer_lastvalue=
382
- a[2];this.command=a[3];this.command_size=a[4];this.mixer_current_address=a[5];this.mixer_registers=a[6];this.mixer_full_update();this.dummy_speaker_enabled=a[7];this.test_register=a[8];this.dsp_highspeed=a[9];this.dsp_stereo=a[10];this.dsp_16bit=a[11];this.dsp_signed=a[12];this.dma_sample_count=a[15];this.dma_bytes_count=a[16];this.dma_bytes_left=a[17];this.dma_bytes_block=a[18];this.dma_irq=a[19];this.dma_channel=a[20];this.dma_channel_8bit=a[21];this.dma_channel_16bit=a[22];this.dma_autoinit=a[23];
383
- this.dma_buffer_uint8=a[24];this.dma_waiting_transfer=a[25];this.dma_paused=a[26];this.sampling_rate=a[27];this.bytes_per_sample=a[28];this.e2_value=a[29];this.e2_count=a[30];this.asp_registers=a[31];this.mpu_read_buffer_last_value=a[33];this.irq=a[34];this.irq_triggered=a[35];this.dma_buffer=this.dma_buffer_uint8.buffer;this.dma_buffer_int8=new Int8Array(this.dma_buffer);this.dma_buffer_int16=new Int16Array(this.dma_buffer);this.dma_buffer_uint16=new Uint16Array(this.dma_buffer);this.dma_syncbuffer=
384
- new k.SyncBuffer(this.dma_buffer);this.dma_paused?this.bus.send("dac-disable"):this.bus.send("dac-enable")};Q.prototype.port2x0_read=function(){E("220 read: fm music status port (unimplemented)",8388608);return 255};Q.prototype.port2x1_read=function(){E("221 read: fm music data port (write only)",8388608);return 255};Q.prototype.port2x2_read=function(){E("222 read: advanced fm music status port (unimplemented)",8388608);return 255};Q.prototype.port2x3_read=function(){E("223 read: advanced music data port (write only)",
385
- 8388608);return 255};Q.prototype.port2x4_read=function(){E("224 read: mixer address port",8388608);return this.mixer_current_address};Q.prototype.port2x5_read=function(){E("225 read: mixer data port",8388608);return this.mixer_read(this.mixer_current_address)};Q.prototype.port2x6_read=function(){E("226 read: (write only)",8388608);return 255};Q.prototype.port2x7_read=function(){E("227 read: undocumented",8388608);return 255};Q.prototype.port2x8_read=function(){E("228 read: fm music status port (unimplemented)",
386
- 8388608);return 255};Q.prototype.port2x9_read=function(){E("229 read: fm music data port (write only)",8388608);return 255};Q.prototype.port2xA_read=function(){E("22A read: read data",8388608);this.read_buffer.length&&(this.read_buffer_lastvalue=this.read_buffer.shift());E(" <- "+this.read_buffer_lastvalue+" "+B(this.read_buffer_lastvalue)+" '"+String.fromCharCode(this.read_buffer_lastvalue)+"'",8388608);return this.read_buffer_lastvalue};Q.prototype.port2xB_read=function(){E("22B read: undocumented",
387
- 8388608);return 255};Q.prototype.port2xC_read=function(){E("22C read: write-buffer status",8388608);return 127};Q.prototype.port2xD_read=function(){E("22D read: undocumented",8388608);return 255};Q.prototype.port2xE_read=function(){E("22E read: read-buffer status / irq 8bit ack.",8388608);this.irq_triggered[1]&&this.lower_irq(1);return(this.read_buffer.length&&!this.dsp_highspeed)<<7|127};Q.prototype.port2xF_read=function(){E("22F read: irq 16bit ack",8388608);this.lower_irq(2);return 0};Q.prototype.port2x0_write=
388
- function(a){E("220 write: (unimplemented) fm register 0 address = "+B(a),8388608);this.fm_current_address0=0};Q.prototype.port2x1_write=function(a){E("221 write: (unimplemented) fm register 0 data = "+B(a),8388608);var b=bb[this.fm_current_address0];b||(b=this.fm_default_write);b.call(this,a,0,this.fm_current_address0)};Q.prototype.port2x2_write=function(a){E("222 write: (unimplemented) fm register 1 address = "+B(a),8388608);this.fm_current_address1=0};Q.prototype.port2x3_write=function(a){E("223 write: (unimplemented) fm register 1 data ="+
389
- B(a),8388608);var b=bb[this.fm_current_address1];b||(b=this.fm_default_write);b.call(this,a,1,this.fm_current_address1)};Q.prototype.port2x4_write=function(a){E("224 write: mixer address = "+B(a),8388608);this.mixer_current_address=a};Q.prototype.port2x5_write=function(a){E("225 write: mixer data = "+B(a),8388608);this.mixer_write(this.mixer_current_address,a)};Q.prototype.port2x6_write=function(a){E("226 write: reset = "+B(a),8388608);this.dsp_highspeed?(E(" -> exit highspeed",8388608),this.dsp_highspeed=
390
- !1):a&&(E(" -> reset",8388608),this.dsp_reset());this.read_buffer.clear();this.read_buffer.push(170)};Q.prototype.port2x7_write=function(){E("227 write: undocumented",8388608)};Q.prototype.port2x8_write=function(){E("228 write: fm music register port (unimplemented)",8388608)};Q.prototype.port2x9_write=function(){E("229 write: fm music data port (unimplemented)",8388608)};Q.prototype.port2xA_write=function(){E("22A write: dsp read data port (read only)",8388608)};Q.prototype.port2xB_write=function(){E("22B write: undocumented",
391
- 8388608)};Q.prototype.port2xC_write=function(a){E("22C write: write command/data",8388608);0===this.command?(E("22C write: command = "+B(a),8388608),this.command=a,this.write_buffer.clear(),this.command_size=Wa[a]):(E("22C write: data: "+B(a),8388608),this.write_buffer.push(a));this.write_buffer.length>=this.command_size&&this.command_do()};Q.prototype.port2xD_write=function(){E("22D write: undocumented",8388608)};Q.prototype.port2xE_write=function(){E("22E write: dsp read buffer status (read only)",
392
- 8388608)};Q.prototype.port2xF_write=function(){E("22F write: undocumented",8388608)};Q.prototype.port3x0_read=function(){E("330 read: mpu data",8388608);this.mpu_read_buffer.length&&(this.mpu_read_buffer_lastvalue=this.mpu_read_buffer.shift());E(" <- "+B(this.mpu_read_buffer_lastvalue),8388608);return this.mpu_read_buffer_lastvalue};Q.prototype.port3x0_write=function(a){E("330 write: mpu data (unimplemented) : "+B(a),8388608)};Q.prototype.port3x1_read=function(){E("331 read: mpu status",8388608);
393
- return 0|128*!this.mpu_read_buffer.length};Q.prototype.port3x1_write=function(a){E("331 write: mpu command: "+B(a),8388608);255===a&&(this.mpu_read_buffer.clear(),this.mpu_read_buffer.push(254))};Q.prototype.command_do=function(){var a=Xa[this.command];a||(a=this.dsp_default_handler);a.call(this);this.command_size=this.command=0;this.write_buffer.clear()};Q.prototype.dsp_default_handler=function(){E("Unhandled command: "+B(this.command),8388608)};function R(a,b,c){c||(c=Q.prototype.dsp_default_handler);
394
- for(var d=0;d<a.length;d++)Wa[a[d]]=b,Xa[a[d]]=c}function cb(a){for(var b=[],c=0;16>c;c++)b.push(a+c);return b}R([14],2,function(){this.asp_registers[this.write_buffer.shift()]=this.write_buffer.shift()});R([15],1,function(){this.read_buffer.clear();this.read_buffer.push(this.asp_registers[this.write_buffer.shift()])});R([16],1,function(){var a=this.write_buffer.shift();a=db(a/127.5+-1,-1,1);this.dac_buffers[0].push(a);this.dac_buffers[1].push(a);this.bus.send("dac-enable")});R([20,21],2,function(){this.dma_irq=
395
- 1;this.dma_channel=this.dma_channel_8bit;this.dsp_highspeed=this.dsp_16bit=this.dsp_signed=this.dma_autoinit=!1;this.dma_transfer_size_set();this.dma_transfer_start()});R([22],2);R([23],2);R([28],0,function(){this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dma_autoinit=!0;this.dsp_highspeed=this.dsp_16bit=this.dsp_signed=!1;this.dma_transfer_start()});R([31],0);R([32],0,function(){this.read_buffer.clear();this.read_buffer.push(127)});R([36],2);R([44],0);R([48],0);R([49],0);R([52],0);R([53],
396
- 0);R([54],0);R([55],0);R([56],0);R([64],1,function(){this.sampling_rate_change(1E6/(256-this.write_buffer.shift())/this.get_channel_count())});R([65,66],2,function(){this.sampling_rate_change(this.write_buffer.shift()<<8|this.write_buffer.shift())});R([72],2,function(){this.dma_transfer_size_set()});R([116],2);R([117],2);R([118],2);R([119],2);R([125],0);R([127],0);R([128],2);R([144],0,function(){this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dma_autoinit=!0;this.dsp_signed=!1;this.dsp_highspeed=
397
- !0;this.dsp_16bit=!1;this.dma_transfer_start()});R([145],0);R([152],0);R([153],0);R([160],0);R([168],0);R(cb(176),3,function(){if(this.command&8)this.dsp_default_handler();else{var a=this.write_buffer.shift();this.dma_irq=2;this.dma_channel=this.dma_channel_16bit;this.dma_autoinit=!!(this.command&4);this.dsp_signed=!!(a&16);this.dsp_stereo=!!(a&32);this.dsp_16bit=!0;this.dma_transfer_size_set();this.dma_transfer_start()}});R(cb(192),3,function(){if(this.command&8)this.dsp_default_handler();else{var a=
398
- this.write_buffer.shift();this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dma_autoinit=!!(this.command&4);this.dsp_signed=!!(a&16);this.dsp_stereo=!!(a&32);this.dsp_16bit=!1;this.dma_transfer_size_set();this.dma_transfer_start()}});R([208],0,function(){this.dma_paused=!0;this.bus.send("dac-disable")});R([209],0,function(){this.dummy_speaker_enabled=!0});R([211],0,function(){this.dummy_speaker_enabled=!1});R([212],0,function(){this.dma_paused=!1;this.bus.send("dac-enable")});R([213],0,function(){this.dma_paused=
399
- !0;this.bus.send("dac-disable")});R([214],0,function(){this.dma_paused=!1;this.bus.send("dac-enable")});R([216],0,function(){this.read_buffer.clear();this.read_buffer.push(255*this.dummy_speaker_enabled)});R([217,218],0,function(){this.dma_autoinit=!1});R([224],1,function(){this.read_buffer.clear();this.read_buffer.push(~this.write_buffer.shift())});R([225],0,function(){this.read_buffer.clear();this.read_buffer.push(4);this.read_buffer.push(5)});R([226],1);R([227],0,function(){this.read_buffer.clear();
400
- for(var a=0;44>a;a++)this.read_buffer.push("COPYRIGHT (C) CREATIVE TECHNOLOGY LTD, 1992.".charCodeAt(a));this.read_buffer.push(0)});R([228],1,function(){this.test_register=this.write_buffer.shift()});R([232],0,function(){this.read_buffer.clear();this.read_buffer.push(this.test_register)});R([242,243],0,function(){this.raise_irq()});var eb=new Uint8Array(256);eb[14]=255;eb[15]=7;eb[55]=56;R([249],1,function(){var a=this.write_buffer.shift();E("dsp 0xf9: unknown function. input: "+a,8388608);this.read_buffer.clear();
401
- this.read_buffer.push(eb[a])});Q.prototype.mixer_read=function(a){var b=Ya[a];b?b=b.call(this):(b=this.mixer_registers[a],E("unhandled mixer register read. addr:"+B(a)+" data:"+B(b),8388608));return b};Q.prototype.mixer_write=function(a,b){var c=Za[a];c?c.call(this,b):E("unhandled mixer register write. addr:"+B(a)+" data:"+B(b),8388608)};Q.prototype.mixer_default_read=function(){E("mixer register read. addr:"+B(this.mixer_current_address),8388608);return this.mixer_registers[this.mixer_current_address]};
402
- Q.prototype.mixer_default_write=function(a){E("mixer register write. addr:"+B(this.mixer_current_address)+" data:"+B(a),8388608);this.mixer_registers[this.mixer_current_address]=a};Q.prototype.mixer_reset=function(){this.mixer_registers[4]=204;this.mixer_registers[34]=204;this.mixer_registers[38]=204;this.mixer_registers[40]=0;this.mixer_registers[46]=0;this.mixer_registers[10]=0;this.mixer_registers[48]=192;this.mixer_registers[49]=192;this.mixer_registers[50]=192;this.mixer_registers[51]=192;this.mixer_registers[52]=
403
- 192;this.mixer_registers[53]=192;this.mixer_registers[54]=0;this.mixer_registers[55]=0;this.mixer_registers[56]=0;this.mixer_registers[57]=0;this.mixer_registers[59]=0;this.mixer_registers[60]=31;this.mixer_registers[61]=21;this.mixer_registers[62]=11;this.mixer_registers[63]=0;this.mixer_registers[64]=0;this.mixer_registers[65]=0;this.mixer_registers[66]=0;this.mixer_registers[67]=0;this.mixer_registers[68]=128;this.mixer_registers[69]=128;this.mixer_registers[70]=128;this.mixer_registers[71]=128;
404
- this.mixer_full_update()};Q.prototype.mixer_full_update=function(){for(var a=1;a<this.mixer_registers.length;a++)ab[a]||this.mixer_write(a,this.mixer_registers[a])};function fb(a,b){b||(b=Q.prototype.mixer_default_read);Ya[a]=b}function gb(a,b){b||(b=Q.prototype.mixer_default_write);Za[a]=b}function lb(a,b,c){ab[a]=1;Ya[a]=function(){return this.mixer_registers[b]&240|this.mixer_registers[c]>>>4};Za[a]=function(d){this.mixer_registers[a]=d;var e=d<<4&240|this.mixer_registers[c]&15;this.mixer_write(b,
405
- d&240|this.mixer_registers[b]&15);this.mixer_write(c,e)}}function mb(a,b,c){Ya[a]=Q.prototype.mixer_default_read;Za[a]=function(d){this.mixer_registers[a]=d;this.bus.send("mixer-volume",[b,c,(d>>>2)-62])}}fb(0,function(){this.mixer_reset();return 0});gb(0);lb(4,50,51);lb(34,48,49);lb(38,52,53);lb(40,54,55);lb(46,56,57);mb(48,0,0);mb(49,0,1);mb(50,2,0);mb(51,2,1);fb(59);gb(59,function(a){this.mixer_registers[59]=a;this.bus.send("mixer-volume",[1,2,6*(a>>>6)-18])});fb(65);gb(65,function(a){this.mixer_registers[65]=
406
- a;this.bus.send("mixer-gain-left",6*(a>>>6))});fb(66);gb(66,function(a){this.mixer_registers[66]=a;this.bus.send("mixer-gain-right",6*(a>>>6))});fb(68);gb(68,function(a){this.mixer_registers[68]=a;a>>>=3;this.bus.send("mixer-treble-left",a-(16>a?14:16))});fb(69);gb(69,function(a){this.mixer_registers[69]=a;a>>>=3;this.bus.send("mixer-treble-right",a-(16>a?14:16))});fb(70);gb(70,function(a){this.mixer_registers[70]=a;a>>>=3;this.bus.send("mixer-bass-right",a-(16>a?14:16))});fb(71);gb(71,function(a){this.mixer_registers[71]=
407
- a;a>>>=3;this.bus.send("mixer-bass-right",a-(16>a?14:16))});fb(128,function(){switch(this.irq){case 2:return 1;case 5:return 2;case 7:return 4;case 10:return 8;default:return 0}});gb(128,function(a){a&1&&(this.irq=2);a&2&&(this.irq=5);a&4&&(this.irq=7);a&8&&(this.irq=10)});fb(129,function(){var a=0;switch(this.dma_channel_8bit){case 0:a|=1;break;case 1:a|=2;break;case 3:a|=8}switch(this.dma_channel_16bit){case 5:a|=32;break;case 6:a|=64;break;case 7:a|=128}return a});gb(129,function(a){a&1&&(this.dma_channel_8bit=
408
- 0);a&2&&(this.dma_channel_8bit=1);a&8&&(this.dma_channel_8bit=3);a&32&&(this.dma_channel_16bit=5);a&64&&(this.dma_channel_16bit=6);a&128&&(this.dma_channel_16bit=7)});fb(130,function(){for(var a=32,b=0;16>b;b++)a|=b*this.irq_triggered[b];return a});Q.prototype.fm_default_write=function(a,b,c){E("unhandled fm register write. addr:"+b+"|"+B(c)+" data:"+B(a),8388608)};function nb(a,b){b||(b=Q.prototype.fm_default_write);for(var c=0;c<a.length;c++)bb[a[c]]=b}function ob(a,b){for(var c=[];a<=b;a++)c.push(a);
409
- return c}var pb=new Uint8Array(32);pb[0]=0;pb[1]=1;pb[2]=2;pb[3]=3;pb[4]=4;pb[5]=5;pb[8]=6;pb[9]=7;pb[10]=8;pb[11]=9;pb[12]=10;pb[13]=11;pb[16]=12;pb[17]=13;pb[18]=14;pb[19]=15;pb[20]=16;pb[21]=17;nb([1],function(a,b){this.fm_waveform_select_enable[b]=a&1;this.fm_update_waveforms()});nb([2]);nb([3]);nb([4],function(){});nb([5],function(a,b,c){0===b&&this.fm_default_write(a,b,c)});nb([8],function(){});nb(ob(32,53),function(){});nb(ob(64,85),function(){});nb(ob(96,117),function(){});nb(ob(128,149),
410
- function(){});nb(ob(160,168),function(){});nb(ob(176,184),function(){});nb([189],function(){});nb(ob(192,200),function(){});nb(ob(224,245),function(){});Q.prototype.fm_update_waveforms=function(){};Q.prototype.sampling_rate_change=function(a){this.sampling_rate=a;this.bus.send("dac-tell-sampling-rate",a)};Q.prototype.get_channel_count=function(){return this.dsp_stereo?2:1};Q.prototype.dma_transfer_size_set=function(){this.dma_sample_count=1+(this.write_buffer.shift()<<0)+(this.write_buffer.shift()<<
411
- 8)};Q.prototype.dma_transfer_start=function(){E("begin dma transfer",8388608);this.bytes_per_sample=1;this.dsp_16bit&&(this.bytes_per_sample*=2);this.dma_bytes_count=this.dma_sample_count*this.bytes_per_sample;this.dma_bytes_block=1024*this.bytes_per_sample;this.dma_bytes_block=Math.min(Math.max(this.dma_bytes_count>>2&-4,32),this.dma_bytes_block);this.dma_waiting_transfer=!0;this.dma.channel_mask[this.dma_channel]||this.dma_on_unmask(this.dma_channel)};Q.prototype.dma_on_unmask=function(a){a===this.dma_channel&&
412
- this.dma_waiting_transfer&&(this.dma_waiting_transfer=!1,this.dma_bytes_left=this.dma_bytes_count,this.dma_paused=!1,this.bus.send("dac-enable"))};Q.prototype.dma_transfer_next=function(){E("dma transfering next block",8388608);var a=Math.min(this.dma_bytes_left,this.dma_bytes_block),b=Math.floor(a/this.bytes_per_sample);this.dma.do_write(this.dma_syncbuffer,0,a,this.dma_channel,c=>{E("dma block transfer "+(c?"unsuccessful":"successful"),8388608);c||(this.dma_to_dac(b),this.dma_bytes_left-=a,this.dma_bytes_left||
413
- (this.raise_irq(this.dma_irq),this.dma_autoinit&&(this.dma_bytes_left=this.dma_bytes_count)))})};Q.prototype.dma_to_dac=function(a){var b=this.dsp_16bit?32767.5:127.5,c=this.dsp_signed?0:-1,d=this.dsp_stereo?1:2;var e=this.dsp_16bit?this.dsp_signed?this.dma_buffer_int16:this.dma_buffer_uint16:this.dsp_signed?this.dma_buffer_int8:this.dma_buffer_uint8;for(var g=0,f=0;f<a;f++)for(var l=db(e[f]/b+c,-1,1),n=0;n<d;n++)this.dac_buffers[g].push(l),g^=1;this.dac_send()};Q.prototype.dac_handle_request=function(){!this.dma_bytes_left||
414
- this.dma_paused?this.dac_send():this.dma_transfer_next()};Q.prototype.dac_send=function(){if(this.dac_buffers[0].length){var a=this.dac_buffers[0].shift_block(this.dac_buffers[0].length),b=this.dac_buffers[1].shift_block(this.dac_buffers[1].length);this.bus.send("dac-send-data",[a,b],[a.buffer,b.buffer])}};Q.prototype.raise_irq=function(a){E("raise irq",8388608);this.irq_triggered[a]=1;this.cpu.device_raise_irq(this.irq)};Q.prototype.lower_irq=function(a){E("lower irq",8388608);this.irq_triggered[a]=
415
- 0;this.cpu.device_lower_irq(this.irq)};function db(a,b,c){return(a<b)*b+(a>c)*c+(b<=a&&a<=c)*a}function fa(a,b){this.cpu=a;this.pci=a.devices.pci;this.device_id=b.device_id;this.pci_space=[244,26,b.device_id&255,b.device_id>>8,7,5,16,0,1,0,2,0,0,0,0,0,1,168,0,0,0,16,191,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,26,b.subsystem_device_id&255,b.subsystem_device_id>>8,0,0,0,0,64,0,0,0,0,0,0,0,0,1,0,0];this.pci_space=this.pci_space.concat(k.zeros(256-this.pci_space.length));this.pci_id=b.pci_id;
416
- this.pci_bars=[];this.name=b.name;this.driver_feature_select=this.device_feature_select=0;this.device_feature=new Uint32Array(4);this.driver_feature=new Uint32Array(4);for(var c of b.common.features)h(0<=c,"VirtIO device<"+this.name+"> feature bit numbers must be non-negative"),h(128>c,"VirtIO device<"+this.name+"> feature bit numbers assumed less than 128 in implementation"),this.device_feature[c>>>5]|=1<<(c&31),this.driver_feature[c>>>5]|=1<<(c&31);h(b.common.features.includes(32),"VirtIO device<"+
417
- this.name+"> only non-transitional devices are supported");this.features_ok=!0;this.device_status=0;this.config_has_changed=!1;this.config_generation=0;this.queues=[];for(var d of b.common.queues)this.queues.push(new W(a,this,d));this.queue_select=0;this.queue_selected=this.queues[0];this.isr_status=0;c=new Set;for(var e of this.queues.map(g=>g.notify_offset))d=b.notification.single_handler?0:e,c.add(d),h(b.notification.handlers[d],"VirtIO device<"+this.name+"> every queue's notifier must exist");
418
- for(const [g,f]of b.notification.handlers.entries())h(!f||c.has(g),"VirtIO device<"+this.name+"> no defined notify handler should be unused");e=[];e.push(this.create_common_capability(b.common));e.push(this.create_notification_capability(b.notification));e.push(this.create_isr_capability(b.isr_status));b.device_specific&&e.push(this.create_device_specific_capability(b.device_specific));this.init_capabilities(e);a.devices.pci.register_device(this);this.reset()}fa.prototype.create_common_capability=
419
- function(a){return{type:1,bar:0,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:[{bytes:4,name:"device_feature_select",read:()=>this.device_feature_select,write:b=>{this.device_feature_select=b}},{bytes:4,name:"device_feature",read:()=>this.device_feature[this.device_feature_select]||0,write:()=>{}},{bytes:4,name:"driver_feature_select",read:()=>this.driver_feature_select,write:b=>{this.driver_feature_select=b}},{bytes:4,name:"driver_feature",read:()=>this.driver_feature[this.driver_feature_select]||
420
- 0,write:b=>{const c=this.device_feature[this.driver_feature_select];this.driver_feature_select<this.driver_feature.length&&(this.driver_feature[this.driver_feature_select]=b&c);this.features_ok=this.features_ok&&!(b&~c)}},{bytes:2,name:"msix_config",read:()=>{E("No msi-x capability supported.",2097152);return 65535},write:()=>{E("No msi-x capability supported.",2097152)}},{bytes:2,name:"num_queues",read:()=>this.queues.length,write:()=>{}},{bytes:1,name:"device_status",read:()=>this.device_status,
421
- write:b=>{0===b?(E("Reset device<"+this.name+">",2097152),this.reset()):b&128?E("Warning: Device<"+this.name+"> status failed",2097152):E("Device<"+this.name+"> status: "+(b&1?"ACKNOWLEDGE ":"")+(b&2?"DRIVER ":"")+(b&4?"DRIVER_OK":"")+(b&8?"FEATURES_OK ":"")+(b&64?"DEVICE_NEEDS_RESET":""),2097152);b&~this.device_status&4&&this.device_status&64&&this.notify_config_changes();this.features_ok||(b&8&&E("Removing FEATURES_OK",2097152),b&=-9);this.device_status=b;if(b&~this.device_status&4)a.on_driver_ok()}},
422
- {bytes:1,name:"config_generation",read:()=>this.config_generation,write:()=>{}},{bytes:2,name:"queue_select",read:()=>this.queue_select,write:b=>{this.queue_select=b;this.queue_selected=this.queue_select<this.queues.length?this.queues[this.queue_select]:null}},{bytes:2,name:"queue_size",read:()=>this.queue_selected?this.queue_selected.size:0,write:b=>{this.queue_selected&&(b&b-1&&(E("Warning: dev<"+this.name+"> Given queue size was not a power of 2. Rounding up to next power of 2.",2097152),b=1<<
423
- k.int_log2(b-1)+1),b>this.queue_selected.size_supported&&(E("Warning: dev<"+this.name+"> Trying to set queue size greater than supported. Clamping to supported size.",2097152),b=this.queue_selected.size_supported),this.queue_selected.set_size(b))}},{bytes:2,name:"queue_msix_vector",read:()=>{E("No msi-x capability supported.",2097152);return 65535},write:()=>{E("No msi-x capability supported.",2097152)}},{bytes:2,name:"queue_enable",read:()=>this.queue_selected?this.queue_selected.enabled|0:0,write:b=>
424
- {this.queue_selected&&(1===b?this.queue_selected.is_configured()?this.queue_selected.enable():E("Driver bug: tried enabling unconfigured queue",2097152):0===b&&E("Driver bug: tried writing 0 to queue_enable",2097152))}},{bytes:2,name:"queue_notify_off",read:()=>this.queue_selected?this.queue_selected.notify_offset:0,write:()=>{}},{bytes:4,name:"queue_desc (low dword)",read:()=>this.queue_selected?this.queue_selected.desc_addr:0,write:b=>{this.queue_selected&&(this.queue_selected.desc_addr=b)}},{bytes:4,
425
- name:"queue_desc (high dword)",read:()=>0,write:b=>{0!==b&&E("Warning: High dword of 64 bit queue_desc ignored:"+b,2097152)}},{bytes:4,name:"queue_avail (low dword)",read:()=>this.queue_selected?this.queue_selected.avail_addr:0,write:b=>{this.queue_selected&&(this.queue_selected.avail_addr=b)}},{bytes:4,name:"queue_avail (high dword)",read:()=>0,write:b=>{0!==b&&E("Warning: High dword of 64 bit queue_avail ignored:"+b,2097152)}},{bytes:4,name:"queue_used (low dword)",read:()=>this.queue_selected?
426
- this.queue_selected.used_addr:0,write:b=>{this.queue_selected&&(this.queue_selected.used_addr=b)}},{bytes:4,name:"queue_used (high dword)",read:()=>0,write:b=>{0!==b&&E("Warning: High dword of 64 bit queue_used ignored:"+b,2097152)}}]}};fa.prototype.create_notification_capability=function(a){const b=[];let c;a.single_handler?(h(1===a.handlers.length,"VirtIO device<"+this.name+"> too many notify handlers specified: expected single handler"),c=0):c=2;for(const [d,e]of a.handlers.entries())b.push({bytes:2,
427
- name:"notify"+d,read:()=>65535,write:e||(()=>{})});return{type:2,bar:1,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array([c&255,c>>8&255,c>>16&255,c>>24]),struct:b}};fa.prototype.create_isr_capability=function(a){return{type:3,bar:2,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:[{bytes:1,name:"isr_status",read:()=>{const b=this.isr_status;this.lower_irq();return b},write:()=>{}}]}};fa.prototype.create_device_specific_capability=function(a){h(~a.offset&3,"VirtIO device<"+
428
- this.name+"> device specific cap offset must be 4-byte aligned");return{type:4,bar:3,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:a.struct}};fa.prototype.init_capabilities=function(a){let b=this.pci_space[52]=64;var c=b;for(const e of a){a=16+e.extra.length;c=b;b=c+a;h(256>=b,"VirtIO device<"+this.name+"> can't fit all capabilities into 256byte configspace");h(0<=e.bar&&6>e.bar,"VirtIO device<"+this.name+"> capability invalid bar number");var d=e.struct.reduce((g,f)=>g+
429
- f.bytes,0);d+=e.offset;d=16>d?16:1<<k.int_log2(d-1)+1;h(0===(e.port&d-1),"VirtIO device<"+this.name+"> capability port should be aligned to pci bar size");this.pci_bars[e.bar]={size:d};this.pci_space[c]=9;this.pci_space[c+1]=b;this.pci_space[c+2]=a;this.pci_space[c+3]=e.type;this.pci_space[c+4]=e.bar;this.pci_space[c+5]=0;this.pci_space[c+6]=0;this.pci_space[c+7]=0;this.pci_space[c+8]=e.offset&255;this.pci_space[c+9]=e.offset>>>8&255;this.pci_space[c+10]=e.offset>>>16&255;this.pci_space[c+11]=e.offset>>>
430
- 24;this.pci_space[c+12]=d&255;this.pci_space[c+13]=d>>>8&255;this.pci_space[c+14]=d>>>16&255;this.pci_space[c+15]=d>>>24;for(const [g,f]of e.extra.entries())this.pci_space[c+16+g]=f;c=16+4*e.bar;this.pci_space[c]=e.port&254|!e.use_mmio;this.pci_space[c+1]=e.port>>>8&255;this.pci_space[c+2]=e.port>>>16&255;this.pci_space[c+3]=e.port>>>24&255;c=e.port+e.offset;for(const g of e.struct){let f=g.read;a=g.write;f=()=>{const l=g.read();E("Device<"+this.name+"> cap["+e.type+"] read["+g.name+"] => "+B(l,8*
431
- g.bytes),2097152);return l};a=l=>{E("Device<"+this.name+"> cap["+e.type+"] write["+g.name+"] <= "+B(l,8*g.bytes),2097152);g.write(l)};if(e.use_mmio)h(!1,"VirtIO device <"+this.name+"> mmio capability not implemented.");else{d=function(n){E("Warning: 8-bit read from 16-bit virtio port",2097152);return f(n&-2)>>((n&1)<<3)&255};const l=function(n){E("Warning: 8-bit read from 32-bit virtio port",2097152);return f(n&-4)>>((n&3)<<3)&255};switch(g.bytes){case 4:this.cpu.io.register_read(c,this,l,void 0,
432
- f);this.cpu.io.register_read(c+1,this,l);this.cpu.io.register_read(c+2,this,l);this.cpu.io.register_read(c+3,this,l);this.cpu.io.register_write(c,this,void 0,void 0,a);break;case 2:this.cpu.io.register_read(c,this,d,f);this.cpu.io.register_read(c+1,this,d);this.cpu.io.register_write(c,this,void 0,a);break;case 1:this.cpu.io.register_read(c,this,f);this.cpu.io.register_write(c,this,a);break;default:h(!1,"VirtIO device <"+this.name+"> invalid capability field width of "+g.bytes+" bytes")}}c+=g.bytes}}h(256>=
320
+ 512}};R.prototype.data_allocate=function(a){this.data_allocate_noclear(a);for(var b=0;b<a+3>>2;b++)this.data32[b]=0};R.prototype.data_allocate_noclear=function(a){this.data.length<a&&(this.data=new Uint8Array(a+3&-4),this.data16=new Uint16Array(this.data.buffer),this.data32=new Int32Array(this.data.buffer));this.data_length=a;this.data_pointer=0};R.prototype.data_set=function(a){this.data_allocate_noclear(a.length);this.data.set(a)};R.prototype.report_read_start=function(){this.bus.send("ide-read-start")};
321
+ R.prototype.report_read_end=function(a){this.bus.send("ide-read-end",[this.nr,a,a/this.sector_size|0])};R.prototype.report_write=function(a){this.bus.send("ide-write-end",[this.nr,a,a/this.sector_size|0])};R.prototype.read_buffer=function(a,b,c){const d=this.last_io_id++;this.in_progress_io_ids.add(d);this.buffer.get(a,b,e=>{if(this.cancelled_io_ids.delete(d))m(!this.in_progress_io_ids.has(d));else{var f=this.in_progress_io_ids.delete(d);m(f);c(e)}})};R.prototype.cancel_io_operations=function(){for(const a of this.in_progress_io_ids)this.cancelled_io_ids.add(a);
322
+ this.in_progress_io_ids.clear()};R.prototype.get_state=function(){var a=[];a[0]=this.bytecount;a[1]=this.cylinder_count;a[2]=this.cylinder_high;a[3]=this.cylinder_low;a[4]=this.data_pointer;a[5]=0;a[6]=0;a[7]=0;a[8]=0;a[9]=this.drive_head;a[10]=this.error;a[11]=this.head;a[12]=this.head_count;a[13]=this.is_atapi;a[14]=this.is_lba;a[15]=this.lba_count;a[16]=this.data;a[17]=this.data_length;a[18]=this.sector;a[19]=this.sector_count;a[20]=this.sector_size;a[21]=this.sectors_per_drq;a[22]=this.sectors_per_track;
323
+ a[23]=this.status;a[24]=this.write_dest;a[25]=this.current_command;a[26]=this.data_end;a[27]=this.current_atapi_command;a[28]=this.buffer;return a};R.prototype.set_state=function(a){this.bytecount=a[0];this.cylinder_count=a[1];this.cylinder_high=a[2];this.cylinder_low=a[3];this.data_pointer=a[4];this.drive_head=a[9];this.error=a[10];this.head=a[11];this.head_count=a[12];this.is_atapi=a[13];this.is_lba=a[14];this.lba_count=a[15];this.data=a[16];this.data_length=a[17];this.sector=a[18];this.sector_count=
324
+ a[19];this.sector_size=a[20];this.sectors_per_drq=a[21];this.sectors_per_track=a[22];this.status=a[23];this.write_dest=a[24];this.current_command=a[25];this.data_end=a[26];this.current_atapi_command=a[27];this.data16=new Uint16Array(this.data.buffer);this.data32=new Int32Array(this.data.buffer);this.buffer&&this.buffer.set_state(a[28])};function Tb(a,b,c){this.bus=b;this.id=a.devices.net?1:0;this.status=this.pairs=1;this.preserve_mac_from_state_image=c;this.mac=new Uint8Array([0,34,21,255*Math.random()|
325
+ 0,255*Math.random()|0,255*Math.random()|0]);this.bus.send("net"+this.id+"-mac",ob(this.mac));b=[];for(c=0;c<this.pairs;++c)b.push({size_supported:1024,notify_offset:0}),b.push({size_supported:1024,notify_offset:1});b.push({size_supported:16,notify_offset:2});this.virtio=new xb(a,{name:"virtio-net",pci_id:80,device_id:4161,subsystem_device_id:1,common:{initial_port:51200,queues:b,features:[5,16,22,3,17,23,32],on_driver_ok:()=>{}},notification:{initial_port:51456,single_handler:!1,handlers:[()=>{},
326
+ d=>{const e=this.virtio.queues[d];for(;e.has_request();){const f=e.pop_request(),h=new Uint8Array(f.length_readable);f.get_next_blob(h);this.bus.send("net"+this.id+"-send",h.subarray(12));this.bus.send("eth-transmit-end",[h.length-12]);this.virtio.queues[d].push_reply(f)}this.virtio.queues[d].flush_replies()},d=>{if(d!==2*this.pairs)m(!1,"VirtioNet Notified for wrong queue: "+d+" (expected queue_id of 3)");else for(var e=this.virtio.queues[d];e.has_request();){const l=e.pop_request();var f=new Uint8Array(l.length_readable);
327
+ l.get_next_blob(f);var h=O.Unmarshall(["b","b"],f,{offset:0});const n=h[0];h=h[1];switch(n<<8|h){case 1024:f=O.Unmarshall(["h"],f,{offset:2});m(1===f[0]);this.Send(d,l,new Uint8Array([0]));break;case 257:this.mac=f.subarray(2,8);this.Send(d,l,new Uint8Array([0]));this.bus.send("net"+this.id+"-mac",ob(this.mac));break;default:m(!1," VirtioNet received unknown command: "+n+":"+h);this.Send(d,l,new Uint8Array([1]));return}}}]},isr_status:{initial_port:50944},device_specific:{initial_port:50688,struct:[0,
328
+ 1,2,3,4,5].map((d,e)=>({bytes:1,name:"mac_"+e,read:()=>this.mac[e],write:()=>{}})).concat([{bytes:2,name:"status",read:()=>this.status,write:()=>{}},{bytes:2,name:"max_pairs",read:()=>this.pairs,write:()=>{}},{bytes:2,name:"mtu",read:()=>1500,write:()=>{}}])}});this.bus.register("net"+this.id+"-receive",d=>{this.bus.send("eth-receive-end",[d.length]);const e=new Uint8Array(12+d.byteLength);(new DataView(e.buffer,e.byteOffset,e.byteLength)).setInt16(10,1);e.set(d,12);d=this.virtio.queues[0];d.has_request()?
329
+ (d=d.pop_request(),d.set_next_blob(e),this.virtio.queues[0].push_reply(d),this.virtio.queues[0].flush_replies()):console.log("No buffer to write into!")},this)}Tb.prototype.get_state=function(){const a=[];a[0]=this.virtio;a[1]=this.id;a[2]=this.mac;return a};Tb.prototype.set_state=function(a){this.virtio.set_state(a[0]);this.id=a[1];this.preserve_mac_from_state_image&&(this.mac=a[2],this.bus.send("net"+this.id+"-mac",ob(this.mac)))};Tb.prototype.reset=function(){this.virtio.reset()};Tb.prototype.Send=
330
+ function(a,b,c){b.set_next_blob(c);this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};Tb.prototype.Ack=function(a,b){this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};function Ub(){var a,b=0,c=0;this.put_char=function(d,e,f){m(0<=d&&d<c);m(0<=e&&e<b);a[d*b+e]=f};this.destroy=function(){};this.pause=function(){};this.continue=function(){};this.set_mode=function(){};this.set_font_bitmap=function(){};this.set_font_page=function(){};this.clear_screen=function(){};
331
+ this.set_size_text=function(d,e){if(d!==b||e!==c)a=new Uint8Array(d*e),b=d,c=e};this.set_size_graphical=function(){};this.set_scale=function(){};this.update_cursor_scanline=function(){};this.update_cursor=function(){};this.update_buffer=function(){};this.get_text_screen=function(){for(var d=[],e=0;e<c;e++)d.push(this.get_text_row(e));return d};this.get_text_row=function(d){d*=b;return String.fromCharCode.apply(String,a.subarray(d,d+b))};this.set_size_text(80,25)}const Vb=Uint32Array.from([655360,
332
+ 655360,720896,753664]),Wb=Uint32Array.from([131072,65536,32768,32768]);function W(a,b,c,d){this.cpu=a;this.bus=b;this.screen=c;this.vga_memory_size=d;this.cursor_address=0;this.cursor_scanline_start=14;this.cursor_scanline_end=15;this.max_cols=80;this.max_rows=25;this.virtual_height=this.virtual_width=this.screen_height=this.screen_width=0;this.layers=[];this.start_address_latched=this.start_address=0;this.crtc=new Uint8Array(25);this.line_compare=this.offset_register=this.preset_row_scan=this.underline_location_register=
333
+ this.vertical_blank_start=this.vertical_display_enable_end=this.horizontal_blank_start=this.horizontal_display_enable_end=this.crtc_mode=0;this.graphical_mode=!1;this.vga256_palette=new Int32Array(256);this.latch_dword=0;this.svga_version=45253;this.svga_height=this.svga_width=0;this.svga_enabled=!1;this.svga_bpp=32;this.svga_offset_y=this.svga_offset_x=this.svga_offset=this.svga_bank_offset=0;this.vga_memory_size=void 0===this.vga_memory_size||262144>this.vga_memory_size?262144:268435456<this.vga_memory_size?
334
+ 268435456:na(this.vga_memory_size);D("effective vga memory size: "+this.vga_memory_size,256);this.pci_space=[52,18,17,17,3,1,0,0,0,0,0,3,0,0,0,0,8,14680064,57344,224,0,0,0,0,0,0,191,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,26,0,17,0,0,190,254,0,0,0,0,0,0,0,0,0,0,0,0];this.pci_id=144;this.pci_bars=[{size:this.vga_memory_size}];this.pci_rom_size=65536;this.pci_rom_address=4272947200;this.name="vga";this.dac_state=this.dac_color_index_read=this.dac_color_index_write=this.index_crtc=0;this.dac_mask=255;
335
+ this.dac_map=new Uint8Array(16);this.attribute_controller_index=-1;this.palette_source=32;this.color_select=this.horizontal_panning=this.color_plane_enable=this.attribute_mode=0;this.sequencer_index=-1;this.plane_write_bm=15;this.clocking_mode=this.sequencer_memory_mode=0;this.graphics_index=-1;this.planar_rotate_reg=this.planar_mode=this.plane_read=this.character_map_select=0;this.planar_bitmap=255;this.max_scan_line=this.color_dont_care=this.color_compare=this.miscellaneous_graphics_register=this.planar_setreset_enable=
336
+ this.planar_setreset=0;this.port_3DA_value=this.miscellaneous_output_register=255;this.font_page_ab_enabled=!1;b=a.io;b.register_write(960,this,this.port3C0_write);b.register_read(960,this,this.port3C0_read,this.port3C0_read16);b.register_read(961,this,this.port3C1_read);b.register_write(962,this,this.port3C2_write);b.register_write_consecutive(964,this,this.port3C4_write,this.port3C5_write);b.register_read(964,this,this.port3C4_read);b.register_read(965,this,this.port3C5_read);b.register_write_consecutive(974,
337
+ this,this.port3CE_write,this.port3CF_write);b.register_read(974,this,this.port3CE_read);b.register_read(975,this,this.port3CF_read);b.register_read(966,this,this.port3C6_read);b.register_write(966,this,this.port3C6_write);b.register_write(967,this,this.port3C7_write);b.register_read(967,this,this.port3C7_read);b.register_write(968,this,this.port3C8_write);b.register_read(968,this,this.port3C8_read);b.register_write(969,this,this.port3C9_write);b.register_read(969,this,this.port3C9_read);b.register_read(972,
338
+ this,this.port3CC_read);b.register_write(980,this,this.port3D4_write,this.port3D4_write16);b.register_write(981,this,this.port3D5_write,this.port3D5_write16);b.register_read(980,this,this.port3D4_read);b.register_read(981,this,this.port3D5_read,this.port3D5_read16);b.register_write(948,this,this.port3D4_write,this.port3D4_write16);b.register_write(949,this,this.port3D5_write,this.port3D5_write16);b.register_read(948,this,this.port3D4_read);b.register_read(949,this,this.port3D5_read,this.port3D5_read16);
339
+ b.register_read(970,this,function(){D("3CA read",256);return 0});b.register_read(986,this,this.port3DA_read);b.register_read(954,this,this.port3DA_read);this.dispi_index=-1;this.dispi_enable_value=0;b.register_write(462,this,void 0,this.port1CE_write);b.register_write(463,this,void 0,this.port1CF_write);b.register_read(463,this,void 0,this.port1CF_read);c=a.svga_allocate_memory(this.vga_memory_size)>>>0;this.svga_memory=k(Uint8Array,a.wasm_memory,c,this.vga_memory_size);this.diff_addr_min=this.vga_memory_size;
340
+ this.diff_addr_max=0;this.diff_plot_min=this.vga_memory_size;this.diff_plot_max=0;this.image_data=null;this.vga_memory=new Uint8Array(262144);this.plane0=new Uint8Array(this.vga_memory.buffer,0,65536);this.plane1=new Uint8Array(this.vga_memory.buffer,65536,65536);this.plane2=new Uint8Array(this.vga_memory.buffer,131072,65536);this.plane3=new Uint8Array(this.vga_memory.buffer,196608,65536);this.pixel_buffer=new Uint8Array(524288);b.mmap_register(655360,131072,e=>this.vga_memory_read(e),(e,f)=>this.vga_memory_write(e,
341
+ f));a.devices.pci.register_device(this)}W.prototype.get_state=function(){var a=[];a[0]=this.vga_memory_size;a[1]=this.cursor_address;a[2]=this.cursor_scanline_start;a[3]=this.cursor_scanline_end;a[4]=this.max_cols;a[5]=this.max_rows;a[6]=this.vga_memory;a[7]=this.dac_state;a[8]=this.start_address;a[9]=this.graphical_mode;a[10]=this.vga256_palette;a[11]=this.latch_dword;a[12]=this.color_compare;a[13]=this.color_dont_care;a[14]=this.miscellaneous_graphics_register;a[15]=this.svga_width;a[16]=this.svga_height;
342
+ a[17]=this.crtc_mode;a[18]=this.svga_enabled;a[19]=this.svga_bpp;a[20]=this.svga_bank_offset;a[21]=this.svga_offset;a[22]=this.index_crtc;a[23]=this.dac_color_index_write;a[24]=this.dac_color_index_read;a[25]=this.dac_map;a[26]=this.sequencer_index;a[27]=this.plane_write_bm;a[28]=this.sequencer_memory_mode;a[29]=this.graphics_index;a[30]=this.plane_read;a[31]=this.planar_mode;a[32]=this.planar_rotate_reg;a[33]=this.planar_bitmap;a[34]=this.max_scan_line;a[35]=this.miscellaneous_output_register;a[36]=
343
+ this.port_3DA_value;a[37]=this.dispi_index;a[38]=this.dispi_enable_value;a[39]=this.svga_memory;a[41]=this.attribute_controller_index;a[42]=this.offset_register;a[43]=this.planar_setreset;a[44]=this.planar_setreset_enable;a[45]=this.start_address_latched;a[46]=this.crtc;a[47]=this.horizontal_display_enable_end;a[48]=this.horizontal_blank_start;a[49]=this.vertical_display_enable_end;a[50]=this.vertical_blank_start;a[51]=this.underline_location_register;a[52]=this.preset_row_scan;a[53]=this.offset_register;
344
+ a[54]=this.palette_source;a[55]=this.attribute_mode;a[56]=this.color_plane_enable;a[57]=this.horizontal_panning;a[58]=this.color_select;a[59]=this.clocking_mode;a[60]=this.line_compare;a[61]=this.pixel_buffer;a[62]=this.dac_mask;a[63]=this.character_map_select;a[64]=this.font_page_ab_enabled;return a};W.prototype.set_state=function(a){this.vga_memory_size=a[0];this.cursor_address=a[1];this.cursor_scanline_start=a[2];this.cursor_scanline_end=a[3];this.max_cols=a[4];this.max_rows=a[5];a[6]&&this.vga_memory.set(a[6]);
345
+ this.dac_state=a[7];this.start_address=a[8];this.graphical_mode=a[9];this.vga256_palette=a[10];this.latch_dword=a[11];this.color_compare=a[12];this.color_dont_care=a[13];this.miscellaneous_graphics_register=a[14];this.svga_width=a[15];this.svga_height=a[16];this.crtc_mode=a[17];this.svga_enabled=a[18];this.svga_bpp=a[19];this.svga_bank_offset=a[20];this.svga_offset=a[21];this.index_crtc=a[22];this.dac_color_index_write=a[23];this.dac_color_index_read=a[24];this.dac_map=a[25];this.sequencer_index=
346
+ a[26];this.plane_write_bm=a[27];this.sequencer_memory_mode=a[28];this.graphics_index=a[29];this.plane_read=a[30];this.planar_mode=a[31];this.planar_rotate_reg=a[32];this.planar_bitmap=a[33];this.max_scan_line=a[34];this.miscellaneous_output_register=a[35];this.port_3DA_value=a[36];this.dispi_index=a[37];this.dispi_enable_value=a[38];this.svga_memory.set(a[39]);this.attribute_controller_index=a[41];this.offset_register=a[42];this.planar_setreset=a[43];this.planar_setreset_enable=a[44];this.start_address_latched=
347
+ a[45];this.crtc.set(a[46]);this.horizontal_display_enable_end=a[47];this.horizontal_blank_start=a[48];this.vertical_display_enable_end=a[49];this.vertical_blank_start=a[50];this.underline_location_register=a[51];this.preset_row_scan=a[52];this.offset_register=a[53];this.palette_source=a[54];this.attribute_mode=a[55];this.color_plane_enable=a[56];this.horizontal_panning=a[57];this.color_select=a[58];this.clocking_mode=a[59];this.line_compare=a[60];a[61]&&this.pixel_buffer.set(a[61]);this.dac_mask=
348
+ void 0===a[62]?255:a[62];this.character_map_select=void 0===a[63]?0:a[63];this.font_page_ab_enabled=void 0===a[64]?0:a[64];this.screen.set_mode(this.graphical_mode);this.graphical_mode?(this.screen_height=this.screen_width=0,this.svga_enabled?(this.set_size_graphical(this.svga_width,this.svga_height,this.svga_width,this.svga_height,this.svga_bpp),this.update_layers()):(this.update_vga_size(),this.update_layers(),this.complete_replot())):(this.set_font_bitmap(!0),this.set_size_text(this.max_cols,this.max_rows),
349
+ this.set_font_page(),this.update_cursor_scanline(),this.update_cursor());this.complete_redraw()};W.prototype.vga_memory_read=function(a){if(this.svga_enabled)return this.cpu.read8((a-655360|this.svga_bank_offset)+3758096384|0);var b=this.miscellaneous_graphics_register>>2&3;a-=Vb[b];if(0>a||a>=Wb[b])return D("vga read outside memory space: addr:"+z(a),256),0;this.latch_dword=this.plane0[a];this.latch_dword|=this.plane1[a]<<8;this.latch_dword|=this.plane2[a]<<16;this.latch_dword|=this.plane3[a]<<24;
350
+ if(this.planar_mode&8)return b=255,this.color_dont_care&1&&(b&=this.plane0[a]^~(this.color_compare&1?255:0)),this.color_dont_care&2&&(b&=this.plane1[a]^~(this.color_compare&2?255:0)),this.color_dont_care&4&&(b&=this.plane2[a]^~(this.color_compare&4?255:0)),this.color_dont_care&8&&(b&=this.plane3[a]^~(this.color_compare&8?255:0)),b;b=this.plane_read;this.graphical_mode?this.sequencer_memory_mode&8?(b=a&3,a&=-4):this.planar_mode&16&&(b=a&1,a&=-2):b&=3;return this.vga_memory[b<<16|a]};W.prototype.vga_memory_write=
351
+ function(a,b){if(this.svga_enabled)this.cpu.write8((a-655360|this.svga_bank_offset)+3758096384|0,b);else{var c=this.miscellaneous_graphics_register>>2&3;a-=Vb[c];0>a||a>=Wb[c]?D("vga write outside memory space: addr:"+z(a)+", value:"+z(b),256):this.graphical_mode?this.vga_memory_write_graphical(a,b):this.plane_write_bm&3?this.vga_memory_write_text_mode(a,b):this.plane_write_bm&4&&(this.plane2[a]=b)}};W.prototype.vga_memory_write_graphical=function(a,b){var c=this.planar_mode&3,d=this.apply_feed(this.planar_bitmap),
352
+ e=this.apply_expand(this.planar_setreset),f=this.apply_expand(this.planar_setreset_enable);switch(c){case 0:b=this.apply_rotate(b);var h=this.apply_feed(b);h=this.apply_setreset(h,f);h=this.apply_logical(h,this.latch_dword);h=this.apply_bitmask(h,d);break;case 1:h=this.latch_dword;break;case 2:h=this.apply_expand(b);h=this.apply_logical(h,this.latch_dword);h=this.apply_bitmask(h,d);break;case 3:b=this.apply_rotate(b),d&=this.apply_feed(b),h=this.apply_bitmask(e,d)}b=15;switch(this.sequencer_memory_mode&
353
+ 12){case 0:b=5<<(a&1);a&=-2;break;case 8:case 12:b=1<<(a&3),a&=-4}b&=this.plane_write_bm;b&1&&(this.plane0[a]=h>>0&255);b&2&&(this.plane1[a]=h>>8&255);b&4&&(this.plane2[a]=h>>16&255);b&8&&(this.plane3[a]=h>>24&255);a=this.vga_addr_to_pixel(a);this.partial_replot(a,a+7)};W.prototype.apply_feed=function(a){return a|a<<8|a<<16|a<<24};W.prototype.apply_expand=function(a){return(a&1?255:0)|(a&2?255:0)<<8|(a&4?255:0)<<16|(a&8?255:0)<<24};W.prototype.apply_rotate=function(a){return(a|a<<8)>>>(this.planar_rotate_reg&
354
+ 7)&255};W.prototype.apply_setreset=function(a,b){var c=this.apply_expand(this.planar_setreset);return(a|b&c)&(~b|c)};W.prototype.apply_logical=function(a,b){switch(this.planar_rotate_reg&24){case 8:return a&b;case 16:return a|b;case 24:return a^b}return a};W.prototype.apply_bitmask=function(a,b){return b&a|~b&this.latch_dword};W.prototype.text_mode_redraw=function(){const a=this.scan_line_to_screen_row(this.line_compare),b=Math.max(0,2*(2*this.offset_register-this.max_cols)),c=this.attribute_mode&
355
+ 8,d=this.font_page_ab_enabled?7:15,e=c?7:15,f=this.screen.FLAG_BLINKING,h=this.screen.FLAG_FONT_PAGE_B;let l=this.start_address<<1;for(let n=0;n<this.max_rows;n++){n===a&&(l=0);for(let p=0;p<this.max_cols;p++){const q=this.vga_memory[l],r=this.vga_memory[l|1],t=(c&&r&128?f:0)|(!this.font_page_ab_enabled||r&8?0:h);this.bus.send("screen-put-char",[n,p,q]);this.screen.put_char(n,p,q,t,this.vga256_palette[this.dac_mask&this.dac_map[r>>4&e]],this.vga256_palette[this.dac_mask&this.dac_map[r&d]]);l+=2}l+=
356
+ b}};W.prototype.vga_memory_write_text_mode=function(a,b){this.vga_memory[a]=b;var c=Math.max(this.max_cols,2*this.offset_register);let d;if(a>>1>=this.start_address){var e=(a>>1)-this.start_address;d=e/c|0;c=e%c}else e=a>>1,d=(e/c|0)+this.scan_line_to_screen_row(this.line_compare),c=e%c;m(0<=d&&0<=c);if(!(c>=this.max_cols||d>=this.max_rows)){a&1?(e=b,b=this.vga_memory[a&-2]):e=this.vga_memory[a|1];var f=this.attribute_mode&8;a=(f&&e&128?this.screen.FLAG_BLINKING:0)|(!this.font_page_ab_enabled||e&
357
+ 8?0:this.screen.FLAG_FONT_PAGE_B);var h=this.font_page_ab_enabled?7:15;f=f?7:15;this.bus.send("screen-put-char",[d,c,b]);this.screen.put_char(d,c,b,a,this.vga256_palette[this.dac_mask&this.dac_map[e>>4&f]],this.vga256_palette[this.dac_mask&this.dac_map[e&h]])}};W.prototype.update_cursor=function(){var a=Math.max(this.max_cols,2*this.offset_register);let b;this.cursor_address>=this.start_address?(b=(this.cursor_address-this.start_address)/a|0,a=(this.cursor_address-this.start_address)%a):(b=(this.cursor_address/
358
+ a|0)+this.scan_line_to_screen_row(this.line_compare),a=this.cursor_address%a);m(0<=b&&0<=a);this.screen.update_cursor(b,a)};W.prototype.complete_redraw=function(){D("complete redraw",256);this.graphical_mode?this.svga_enabled?this.cpu.svga_mark_dirty():(this.diff_addr_min=0,this.diff_addr_max=524288):this.text_mode_redraw()};W.prototype.complete_replot=function(){D("complete replot",256);this.graphical_mode&&!this.svga_enabled&&(this.diff_plot_min=0,this.diff_plot_max=524288,this.complete_redraw())};
359
+ W.prototype.partial_redraw=function(a,b){a<this.diff_addr_min&&(this.diff_addr_min=a);b>this.diff_addr_max&&(this.diff_addr_max=b)};W.prototype.partial_replot=function(a,b){a<this.diff_plot_min&&(this.diff_plot_min=a);b>this.diff_plot_max&&(this.diff_plot_max=b);this.partial_redraw(a,b)};W.prototype.reset_diffs=function(){this.diff_addr_min=this.vga_memory_size;this.diff_addr_max=0;this.diff_plot_min=this.vga_memory_size;this.diff_plot_max=0};W.prototype.destroy=function(){};W.prototype.vga_bytes_per_line=
360
+ function(){var a=this.offset_register<<2;this.underline_location_register&64?a<<=1:this.crtc_mode&64&&(a>>>=1);return a};W.prototype.vga_addr_shift_count=function(){var a=128+(~this.underline_location_register&this.crtc_mode&64);a-=this.underline_location_register&64;a-=this.attribute_mode&64;return a>>>6};W.prototype.vga_addr_to_pixel=function(a){var b=this.vga_addr_shift_count();if(~this.crtc_mode&3){var c=a-this.start_address;c&=this.crtc_mode<<13|-24577;c<<=b;var d=c/this.virtual_width|0;c%=this.virtual_width;
361
+ switch(this.crtc_mode&3){case 2:d=d<<1|a>>13&1;break;case 1:d=d<<1|a>>14&1;break;case 0:d=d<<2|a>>13&3}return d*this.virtual_width+c+(this.start_address<<b)}return a<<b};W.prototype.scan_line_to_screen_row=function(a){this.max_scan_line&128&&(a>>>=1);a=Math.ceil(a/(1+(this.max_scan_line&31)));this.crtc_mode&1||(a<<=1);this.crtc_mode&2||(a<<=1);return a};W.prototype.set_size_text=function(a,b){m(!this.graphical_mode);this.max_cols=a;this.max_rows=b;this.screen.set_size_text(a,b);this.bus.send("screen-set-size",
362
+ [a,b,0])};W.prototype.set_size_graphical=function(a,b,c,d,e){m(this.graphical_mode);c=Math.max(c,1);d=Math.max(d,1);if(this.screen_width!==a||this.screen_height!==b||this.virtual_width!==c||this.virtual_height!==d){this.screen_width=a;this.screen_height=b;this.virtual_width=c;this.virtual_height=d;if("undefined"!==typeof ImageData){const f=c*d,h=this.cpu.svga_allocate_dest_buffer(f)>>>0;this.dest_buffet_offset=h;this.image_data=new ImageData(new Uint8ClampedArray(this.cpu.wasm_memory.buffer,h,4*f),
363
+ c,d);this.cpu.svga_mark_dirty()}this.screen.set_size_graphical(a,b,c,d);this.bus.send("screen-set-size",[a,b,e])}};W.prototype.update_vga_size=function(){if(!this.svga_enabled){var a=Math.min(1+this.horizontal_display_enable_end,this.horizontal_blank_start),b=Math.min(1+this.vertical_display_enable_end,this.vertical_blank_start);if(a&&b)if(this.graphical_mode){a<<=3;var c=this.offset_register<<4;this.attribute_mode&64&&(a>>>=1,c>>>=1);b=this.scan_line_to_screen_row(b);var d=Wb[0];const e=this.vga_bytes_per_line();
364
+ this.set_size_graphical(a,b,c,e?Math.ceil(d/e):b,8);this.update_vertical_retrace();this.update_layers()}else this.max_scan_line&128&&(b>>>=1),c=b/(1+(this.max_scan_line&31))|0,a&&c&&this.set_size_text(a,c)}};W.prototype.update_layers=function(){this.graphical_mode||this.text_mode_redraw();if(this.svga_enabled)this.layers=[];else if(this.virtual_width&&this.screen_width)if(!this.palette_source||this.clocking_mode&32)this.layers=[],this.screen.clear_screen();else{var a=this.start_address_latched,b=
365
+ this.horizontal_panning;this.attribute_mode&64&&(b>>>=1);var c=this.preset_row_scan>>5&3,d=this.vga_addr_to_pixel(a+c);a=d/this.virtual_width|0;var e=d%this.virtual_width+b;d=this.scan_line_to_screen_row(1+this.line_compare);d=Math.min(d,this.screen_height);var f=this.screen_height-d;this.layers=[];e=-e;for(var h=0;e<this.screen_width;e+=this.virtual_width,h++)this.layers.push({image_data:this.image_data,screen_x:e,screen_y:0,buffer_x:0,buffer_y:a+h,buffer_width:this.virtual_width,buffer_height:d});
366
+ a=0;this.attribute_mode&32||(a=this.vga_addr_to_pixel(c)+b);e=-a;for(h=0;e<this.screen_width;e+=this.virtual_width,h++)this.layers.push({image_data:this.image_data,screen_x:e,screen_y:d,buffer_x:0,buffer_y:h,buffer_width:this.virtual_width,buffer_height:f})}};W.prototype.update_vertical_retrace=function(){this.port_3DA_value|=8;this.start_address_latched!==this.start_address&&(this.start_address_latched=this.start_address,this.update_layers())};W.prototype.update_cursor_scanline=function(){var a=
367
+ this.max_scan_line&31;const b=Math.min(a,this.cursor_scanline_start&31);a=Math.min(a,this.cursor_scanline_end&31);this.screen.update_cursor_scanline(b,a,!(this.cursor_scanline_start&32)&&b<a)};W.prototype.port3C0_write=function(a){if(-1===this.attribute_controller_index)D("attribute controller index register: "+z(a),256),this.attribute_controller_index=a&31,D("attribute actual index: "+z(this.attribute_controller_index),256),this.palette_source!==(a&32)&&(this.palette_source=a&32,this.update_layers());
368
+ else{if(16>this.attribute_controller_index)D("internal palette: "+z(this.attribute_controller_index)+" -> "+z(a),256),this.dac_map[this.attribute_controller_index]=a,this.attribute_mode&64||this.complete_redraw();else switch(this.attribute_controller_index){case 16:D("3C0 / attribute mode control: "+z(a),256);if(this.attribute_mode!==a){var b=this.attribute_mode;this.attribute_mode=a;const c=0!==(a&1);this.svga_enabled||this.graphical_mode===c||(this.graphical_mode=c,this.screen.set_mode(this.graphical_mode));
369
+ (b^a)&64&&this.complete_replot();this.update_vga_size();this.complete_redraw();this.set_font_bitmap(!1)}break;case 18:D("3C0 / color plane enable: "+z(a),256);this.color_plane_enable!==a&&(this.color_plane_enable=a,this.complete_redraw());break;case 19:D("3C0 / horizontal panning: "+z(a),256);this.horizontal_panning!==a&&(this.horizontal_panning=a&15,this.update_layers());break;case 20:D("3C0 / color select: "+z(a),256);this.color_select!==a&&(this.color_select=a,this.complete_redraw());break;default:D("3C0 / attribute controller write "+
370
+ z(this.attribute_controller_index)+": "+z(a),256)}this.attribute_controller_index=-1}};W.prototype.port3C0_read=function(){D("3C0 read",256);return(this.attribute_controller_index|this.palette_source)&255};W.prototype.port3C0_read16=function(){D("3C0 read16",256);return this.port3C0_read()|this.port3C1_read()<<8&65280};W.prototype.port3C1_read=function(){if(16>this.attribute_controller_index)return D("3C1 / internal palette read: "+z(this.attribute_controller_index)+" -> "+z(this.dac_map[this.attribute_controller_index]),
371
+ 256),this.dac_map[this.attribute_controller_index]&255;switch(this.attribute_controller_index){case 16:return D("3C1 / attribute mode read: "+z(this.attribute_mode),256),this.attribute_mode;case 18:return D("3C1 / color plane enable read: "+z(this.color_plane_enable),256),this.color_plane_enable;case 19:return D("3C1 / horizontal panning read: "+z(this.horizontal_panning),256),this.horizontal_panning;case 20:return D("3C1 / color select read: "+z(this.color_select),256),this.color_select;default:D("3C1 / attribute controller read "+
372
+ z(this.attribute_controller_index),256)}return 255};W.prototype.port3C2_write=function(a){D("3C2 / miscellaneous output register = "+z(a),256);this.miscellaneous_output_register=a};W.prototype.port3C4_write=function(a){this.sequencer_index=a};W.prototype.port3C4_read=function(){return this.sequencer_index};W.prototype.port3C5_write=function(a){switch(this.sequencer_index){case 1:D("clocking mode: "+z(a),256);var b=this.clocking_mode;this.clocking_mode=a;(b^a)&32&&this.update_layers();this.set_font_bitmap(!1);
373
+ break;case 2:D("plane write mask: "+z(a),256);b=this.plane_write_bm;this.plane_write_bm=a;this.graphical_mode||!(b&4)||this.plane_write_bm&4||this.set_font_bitmap(!0);break;case 3:D("character map select: "+z(a),256);b=this.character_map_select;this.character_map_select=a;this.graphical_mode||b===a||this.set_font_page();break;case 4:D("sequencer memory mode: "+z(a),256);this.sequencer_memory_mode=a;break;default:D("3C5 / sequencer write "+z(this.sequencer_index)+": "+z(a),256)}};W.prototype.port3C5_read=
374
+ function(){D("3C5 / sequencer read "+z(this.sequencer_index),256);switch(this.sequencer_index){case 1:return this.clocking_mode;case 2:return this.plane_write_bm;case 3:return this.character_map_select;case 4:return this.sequencer_memory_mode;case 6:return 18}return 0};W.prototype.port3C6_write=function(a){this.dac_mask!==a&&(this.dac_mask=a,this.complete_redraw())};W.prototype.port3C6_read=function(){return this.dac_mask};W.prototype.port3C7_write=function(a){D("3C7 write: "+z(a),256);this.dac_color_index_read=
375
+ 3*a;this.dac_state&=0};W.prototype.port3C7_read=function(){return this.dac_state};W.prototype.port3C8_write=function(a){this.dac_color_index_write=3*a;this.dac_state|=3};W.prototype.port3C8_read=function(){return this.dac_color_index_write/3&255};W.prototype.port3C9_write=function(a){var b=this.dac_color_index_write/3|0,c=this.dac_color_index_write%3,d=this.vga256_palette[b];if(0===(this.dispi_enable_value&32)){a&=63;const e=a&1;a=a<<2|e<<1|e}0===c?d=d&-16711681|a<<16:1===c?d=d&-65281|a<<8:(d=d&-256|
376
+ a,D("dac set color, index="+z(b)+" value="+z(d),256));this.vga256_palette[b]!==d&&(this.vga256_palette[b]=d,this.complete_redraw());this.dac_color_index_write++};W.prototype.port3C9_read=function(){D("3C9 read",256);var a=this.vga256_palette[this.dac_color_index_read/3|0]>>8*(2-this.dac_color_index_read%3)&255;this.dac_color_index_read++;return this.dispi_enable_value&32?a:a>>2};W.prototype.port3CC_read=function(){D("3CC read",256);return this.miscellaneous_output_register};W.prototype.port3CE_write=
377
+ function(a){this.graphics_index=a};W.prototype.port3CE_read=function(){return this.graphics_index};W.prototype.port3CF_write=function(a){switch(this.graphics_index){case 0:this.planar_setreset=a;D("plane set/reset: "+z(a),256);break;case 1:this.planar_setreset_enable=a;D("plane set/reset enable: "+z(a),256);break;case 2:this.color_compare=a;D("color compare: "+z(a),256);break;case 3:this.planar_rotate_reg=a;D("plane rotate: "+z(a),256);break;case 4:this.plane_read=a;D("plane read: "+z(a),256);break;
378
+ case 5:var b=this.planar_mode;this.planar_mode=a;D("planar mode: "+z(a),256);(b^a)&96&&this.complete_replot();break;case 6:D("miscellaneous graphics register: "+z(a),256);this.miscellaneous_graphics_register!==a&&(this.miscellaneous_graphics_register=a,this.update_vga_size());break;case 7:this.color_dont_care=a;D("color don't care: "+z(a),256);break;case 8:this.planar_bitmap=a;D("planar bitmap: "+z(a),256);break;default:D("3CF / graphics write "+z(this.graphics_index)+": "+z(a),256)}};W.prototype.port3CF_read=
379
+ function(){D("3CF / graphics read "+z(this.graphics_index),256);switch(this.graphics_index){case 0:return this.planar_setreset;case 1:return this.planar_setreset_enable;case 2:return this.color_compare;case 3:return this.planar_rotate_reg;case 4:return this.plane_read;case 5:return this.planar_mode;case 6:return this.miscellaneous_graphics_register;case 7:return this.color_dont_care;case 8:return this.planar_bitmap}return 0};W.prototype.port3D4_write=function(a){D("3D4 / crtc index: "+a,256);this.index_crtc=
380
+ a};W.prototype.port3D4_write16=function(a){this.port3D4_write(a&255);this.port3D5_write(a>>8&255)};W.prototype.port3D4_read=function(){D("3D4 read / crtc index: "+this.index_crtc,256);return this.index_crtc};W.prototype.port3D5_write=function(a){switch(this.index_crtc){case 1:D("3D5 / hdisp enable end write: "+z(a),256);this.horizontal_display_enable_end!==a&&(this.horizontal_display_enable_end=a,this.update_vga_size());break;case 2:this.horizontal_blank_start!==a&&(this.horizontal_blank_start=a,
381
+ this.update_vga_size());break;case 7:D("3D5 / overflow register write: "+z(a),256);var b=this.vertical_display_enable_end;this.vertical_display_enable_end&=255;this.vertical_display_enable_end=this.vertical_display_enable_end|a<<3&512|a<<7&256;b!==this.vertical_display_enable_end&&this.update_vga_size();this.line_compare=this.line_compare&767|a<<4&256;b=this.vertical_blank_start;this.vertical_blank_start=this.vertical_blank_start&767|a<<5&256;b!==this.vertical_blank_start&&this.update_vga_size();
382
+ this.update_layers();break;case 8:D("3D5 / preset row scan write: "+z(a),256);this.preset_row_scan=a;this.update_layers();break;case 9:D("3D5 / max scan line write: "+z(a),256);var c=this.max_scan_line;this.max_scan_line=a;this.line_compare=this.line_compare&511|a<<3&512;b=this.vertical_blank_start;this.vertical_blank_start=this.vertical_blank_start&511|a<<4&512;((c^this.max_scan_line)&159||b!==this.vertical_blank_start)&&this.update_vga_size();this.update_cursor_scanline();this.update_layers();this.set_font_bitmap(!1);
383
+ break;case 10:D("3D5 / cursor scanline start write: "+z(a),256);this.cursor_scanline_start=a;this.update_cursor_scanline();break;case 11:D("3D5 / cursor scanline end write: "+z(a),256);this.cursor_scanline_end=a;this.update_cursor_scanline();break;case 12:(this.start_address>>8&255)!==a&&(this.start_address=this.start_address&255|a<<8,this.update_layers(),~this.crtc_mode&3&&this.complete_replot());D("3D5 / start addr hi write: "+z(a)+" -> "+z(this.start_address,4),256);break;case 13:(this.start_address&
384
+ 255)!==a&&(this.start_address=this.start_address&65280|a,this.update_layers(),~this.crtc_mode&3&&this.complete_replot());D("3D5 / start addr lo write: "+z(a)+" -> "+z(this.start_address,4),256);break;case 14:D("3D5 / cursor address hi write: "+z(a),256);this.cursor_address=this.cursor_address&255|a<<8;this.update_cursor();break;case 15:D("3D5 / cursor address lo write: "+z(a),256);this.cursor_address=this.cursor_address&65280|a;this.update_cursor();break;case 18:D("3D5 / vdisp enable end write: "+
385
+ z(a),256);(this.vertical_display_enable_end&255)!==a&&(this.vertical_display_enable_end=this.vertical_display_enable_end&768|a,this.update_vga_size());break;case 19:D("3D5 / offset register write: "+z(a),256);this.offset_register!==a&&(this.offset_register=a,this.update_vga_size(),~this.crtc_mode&3&&this.complete_replot());break;case 20:D("3D5 / underline location write: "+z(a),256);this.underline_location_register!==a&&(b=this.underline_location_register,this.underline_location_register=a,this.update_vga_size(),
386
+ (b^a)&64&&this.complete_replot());break;case 21:D("3D5 / vertical blank start write: "+z(a),256);(this.vertical_blank_start&255)!==a&&(this.vertical_blank_start=this.vertical_blank_start&768|a,this.update_vga_size());break;case 23:D("3D5 / crtc mode write: "+z(a),256);this.crtc_mode!==a&&(b=this.crtc_mode,this.crtc_mode=a,this.update_vga_size(),(b^a)&67&&this.complete_replot());break;case 24:D("3D5 / line compare write: "+z(a),256);this.line_compare=this.line_compare&768|a;this.update_layers();break;
387
+ default:this.index_crtc<this.crtc.length&&(this.crtc[this.index_crtc]=a),D("3D5 / CRTC write "+z(this.index_crtc)+": "+z(a),256)}};W.prototype.port3D5_write16=function(a){D("16-bit write to 3D5: "+z(a,4),256);this.port3D5_write(a&255)};W.prototype.port3D5_read=function(){D("3D5 read "+z(this.index_crtc),256);switch(this.index_crtc){case 1:return this.horizontal_display_enable_end;case 2:return this.horizontal_blank_start;case 7:return this.vertical_display_enable_end>>7&2|this.vertical_blank_start>>
388
+ 5&8|this.line_compare>>4&16|this.vertical_display_enable_end>>3&64;case 8:return this.preset_row_scan;case 9:return this.max_scan_line;case 10:return this.cursor_scanline_start;case 11:return this.cursor_scanline_end;case 12:return this.start_address&255;case 13:return this.start_address>>8;case 14:return this.cursor_address>>8;case 15:return this.cursor_address&255;case 18:return this.vertical_display_enable_end&255;case 19:return this.offset_register;case 20:return this.underline_location_register;
389
+ case 21:return this.vertical_blank_start&255;case 23:return this.crtc_mode;case 24:return this.line_compare&255}return this.index_crtc<this.crtc.length?this.crtc[this.index_crtc]:0};W.prototype.port3D5_read16=function(){D("Warning: 16-bit read from 3D5",256);return this.port3D5_read()};W.prototype.port3DA_read=function(){D("3DA read - status 1 and clear attr index",256);var a=this.port_3DA_value;this.graphical_mode?(this.port_3DA_value^=1,this.port_3DA_value&=1):(this.port_3DA_value&1&&(this.port_3DA_value^=
390
+ 8),this.port_3DA_value^=1);this.attribute_controller_index=-1;return a};W.prototype.port1CE_write=function(a){this.dispi_index=a};W.prototype.port1CF_write=function(a){D("1CF / dispi write "+z(this.dispi_index)+": "+z(a),256);const b=this.svga_enabled;switch(this.dispi_index){case 0:45248<=a&&45253>=a?this.svga_version=a:D("Invalid version value: "+z(a),256);break;case 1:this.svga_width=a;2560<this.svga_width&&(D("svga_width reduced from "+this.svga_width+" to 2560",256),this.svga_width=2560);break;
391
+ case 2:this.svga_height=a;1600<this.svga_height&&(D("svga_height reduced from "+this.svga_height+" to 1600",256),this.svga_height=1600);break;case 3:this.svga_bpp=a;break;case 4:(this.svga_enabled=1===(a&1))&&0===(a&128)&&this.svga_memory.fill(0);this.dispi_enable_value=a;break;case 5:D("SVGA bank offset: "+z(a<<16),256);this.svga_bank_offset=a<<16;break;case 8:D("SVGA X offset: "+z(a),256);this.svga_offset_x!==a&&(this.svga_offset_x=a,this.svga_offset=this.svga_offset_y*this.svga_width+this.svga_offset_x,
392
+ this.complete_redraw());break;case 9:D("SVGA Y offset: "+z(a*this.svga_width)+" y="+z(a),256);this.svga_offset_y!==a&&(this.svga_offset_y=a,this.svga_offset=this.svga_offset_y*this.svga_width+this.svga_offset_x,this.complete_redraw());break;default:D("Unimplemented dispi write index: "+z(this.dispi_index),256)}!this.svga_enabled||this.svga_width&&this.svga_height||(D("SVGA: disabled because of invalid width/height: "+this.svga_width+"x"+this.svga_height,256),this.svga_enabled=!1);m(4!==this.svga_bpp,
393
+ "unimplemented svga bpp: 4");m(4===this.svga_bpp||8===this.svga_bpp||15===this.svga_bpp||16===this.svga_bpp||24===this.svga_bpp||32===this.svga_bpp,"unexpected svga bpp: "+this.svga_bpp);this.svga_enabled?D("SVGA: enabled, "+this.svga_width+"x"+this.svga_height+"x"+this.svga_bpp,256):D("SVGA: disabled");this.svga_enabled&&!b&&(this.svga_offset_y=this.svga_offset_x=this.svga_offset=0,this.graphical_mode=!0,this.screen.set_mode(this.graphical_mode),this.set_size_graphical(this.svga_width,this.svga_height,
394
+ this.svga_width,this.svga_height,this.svga_bpp));this.svga_enabled||(this.svga_bank_offset=0);this.update_layers()};W.prototype.port1CF_read=function(){D("1CF / dispi read "+z(this.dispi_index),256);return this.svga_register_read(this.dispi_index)};W.prototype.svga_register_read=function(a){switch(a){case 0:return this.svga_version;case 1:return this.dispi_enable_value&2?2560:this.svga_width;case 2:return this.dispi_enable_value&2?1600:this.svga_height;case 3:return this.dispi_enable_value&2?32:this.svga_bpp;
395
+ case 4:return this.dispi_enable_value;case 5:return this.svga_bank_offset>>>16;case 6:return this.screen_width?this.screen_width:1;case 8:return this.svga_offset_x;case 9:return this.svga_offset_y;case 10:return this.vga_memory_size/65536|0;default:D("Unimplemented dispi read index: "+z(this.dispi_index),256)}return 255};W.prototype.vga_replot=function(){for(var a=this.diff_plot_min&-16,b=Math.min(this.diff_plot_max|15,524287),c=this.vga_addr_shift_count(),d=~this.crtc_mode&3,e=this.planar_mode&96,
396
+ f=this.attribute_mode&64;a<=b;){var h=a>>>c;if(d){var l=a/this.virtual_width|0,n=a-this.virtual_width*l;switch(d){case 1:h=(l&1)<<13;l>>>=1;break;case 2:h=(l&1)<<14;l>>>=1;break;case 3:h=(l&3)<<13,l>>>=2}h|=(l*this.virtual_width+n>>>c)+this.start_address}l=this.plane0[h];n=this.plane1[h];var p=this.plane2[h],q=this.plane3[h];h=new Uint8Array(8);switch(e){case 0:l<<=0;n<<=1;p<<=2;q<<=3;for(var r=7;0<=r;r--)h[7-r]=l>>r&1|n>>r&2|p>>r&4|q>>r&8;break;case 32:h[0]=l>>6&3|p>>4&12;h[1]=l>>4&3|p>>2&12;h[2]=
397
+ l>>2&3|p>>0&12;h[3]=l>>0&3|p<<2&12;h[4]=n>>6&3|q>>4&12;h[5]=n>>4&3|q>>2&12;h[6]=n>>2&3|q>>0&12;h[7]=n>>0&3|q<<2&12;break;case 64:case 96:h[0]=l>>4&15,h[1]=l>>0&15,h[2]=n>>4&15,h[3]=n>>0&15,h[4]=p>>4&15,h[5]=p>>0&15,h[6]=q>>4&15,h[7]=q>>0&15}if(f)for(l=r=0;4>r;r++,a++,l+=2)this.pixel_buffer[a]=h[l]<<4|h[l+1];else for(r=0;8>r;r++,a++)this.pixel_buffer[a]=h[r]}};W.prototype.vga_redraw=function(){var a=this.diff_addr_min,b=Math.min(this.diff_addr_max,524287);const c=new Int32Array(this.cpu.wasm_memory.buffer,
398
+ this.dest_buffet_offset,this.virtual_width*this.virtual_height);var d=255,e=0;this.attribute_mode&128&&(d&=207,e|=this.color_select<<4&48);if(this.attribute_mode&64)for(;a<=b;a++){var f=this.pixel_buffer[a]&d|e;f=this.vga256_palette[f];c[a]=f&65280|f<<16|f>>16|4278190080}else for(d&=63,e|=this.color_select<<4&192;a<=b;a++)f=this.dac_map[this.pixel_buffer[a]&this.color_plane_enable]&d|e,f=this.vga256_palette[f],c[a]=f&65280|f<<16|f>>16|4278190080};W.prototype.screen_fill_buffer=function(){if(this.graphical_mode){if(0===
399
+ this.image_data.data.byteLength){var a=new Uint8ClampedArray(this.cpu.wasm_memory.buffer,this.dest_buffet_offset,4*this.virtual_width*this.virtual_height);this.image_data=new ImageData(a,this.virtual_width,this.virtual_height);this.update_layers()}if(this.svga_enabled){a=0;let d=this.svga_height;if(8===this.svga_bpp){const e=new Int32Array(this.cpu.wasm_memory.buffer,this.dest_buffet_offset,this.screen_width*this.screen_height),f=new Uint8Array(this.cpu.wasm_memory.buffer,this.svga_memory.byteOffset,
400
+ this.vga_memory_size);for(var b=0;b<e.length;b++){var c=this.vga256_palette[f[b]];e[b]=c&65280|c<<16|c>>16|4278190080}}else this.cpu.svga_fill_pixel_buffer(this.svga_bpp,this.svga_offset),b=15===this.svga_bpp?2:this.svga_bpp/8,a=((this.cpu.svga_dirty_bitmap_min_offset[0]/b|0)-this.svga_offset)/this.svga_width|0,d=(((this.cpu.svga_dirty_bitmap_max_offset[0]/b|0)-this.svga_offset)/this.svga_width|0)+1;a<d&&(a=Math.max(a,0),d=Math.min(d,this.svga_height),this.screen.update_buffer([{image_data:this.image_data,
401
+ screen_x:0,screen_y:a,buffer_x:0,buffer_y:a,buffer_width:this.svga_width,buffer_height:d-a}]))}else this.vga_replot(),this.vga_redraw(),this.screen.update_buffer(this.layers);this.reset_diffs()}this.update_vertical_retrace()};W.prototype.set_font_bitmap=function(a){const b=this.max_scan_line&31;if(b&&!this.graphical_mode){const c=!!(this.clocking_mode&8);this.screen.set_font_bitmap(b+1,!c&&!(this.clocking_mode&1),c,!!(this.attribute_mode&4),this.plane2,a)}};W.prototype.set_font_page=function(){const a=
402
+ [0,2,4,6,1,3,5,7],b=(this.character_map_select&12)>>2|(this.character_map_select&32)>>3,c=this.character_map_select&3|(this.character_map_select&16)>>2;this.font_page_ab_enabled=b!==c;this.screen.set_font_page(a[b],a[c]);this.complete_redraw()};const Xb="SWAP_IN SWAP_OUT MAJFLT MINFLT MEMFREE MEMTOT AVAIL CACHES HTLB_PGALLOC HTLB_PGFAIL".split(" ");function Yb(a,b){this.bus=b;this.zeroed=this.fp_cmd=this.actual=this.num_pages=0;this.virtio=new xb(a,{name:"virtio-balloon",pci_id:88,device_id:4165,
403
+ subsystem_device_id:5,common:{initial_port:55296,queues:[{size_supported:32,notify_offset:0},{size_supported:32,notify_offset:0},{size_supported:2,notify_offset:1},{size_supported:64,notify_offset:2}],features:[1,3,32],on_driver_ok:()=>{D("Balloon setup",2048)}},notification:{initial_port:55552,single_handler:!1,handlers:[c=>{const d=this.virtio.queues[c];for(;d.has_request();){var e=d.pop_request();const f=new Uint8Array(e.length_readable);e.get_next_blob(f);this.virtio.queues[c].push_reply(e);e=
404
+ f.byteLength/4;this.actual+=0===c?e:-e}this.virtio.queues[c].flush_replies()},c=>{var d=this.virtio.queues[c];if(d.has_request()){d=d.pop_request();const e=new Uint8Array(d.length_readable);d.get_next_blob(e);let f={};for(let h=0;h<d.length_readable;h+=10){let [l,n]=O.Unmarshall(["h","d"],e,{offset:h});f[Xb[l]]=n}this.virtio.queues[c].push_reply(d);this.stats_cb&&this.stats_cb(f)}},c=>{const d=this.virtio.queues[c];for(;d.has_request();){const f=d.pop_request();if(0<f.length_readable){var e=new Uint8Array(f.length_readable);
405
+ f.get_next_blob(e);[e]=O.Unmarshall(["w"],e,{offset:0});0===e&&(this.free_cb&&this.free_cb(this.zeroed),1<this.fp_cmd&&(this.fp_cmd=1),this.virtio.notify_config_changes())}if(0<f.length_writable)for(new Uint8Array(0),e=0;e<f.write_buffers.length;++e){let h=f.write_buffers[e];this.zeroed+=h.len;this.virtio.cpu.zero_memory(h.addr_low,h.len)}this.virtio.queues[c].push_reply(f)}this.virtio.queues[c].flush_replies()}]},isr_status:{initial_port:55040},device_specific:{initial_port:54784,struct:[{bytes:4,
406
+ name:"num_pages",read:()=>this.num_pages,write:()=>{}},{bytes:4,name:"actual",read:()=>this.actual,write:()=>{}},{bytes:4,name:"free_page_hint_cmd_id",read:()=>this.fp_cmd,write:()=>{}}]}})}Yb.prototype.Inflate=function(a){this.num_pages+=a;this.virtio.notify_config_changes()};Yb.prototype.Deflate=function(a){this.num_pages-=a;this.virtio.notify_config_changes()};Yb.prototype.Cleanup=function(a){this.fp_cmd=2;this.free_cb=a;this.zeroed=0;this.virtio.notify_config_changes()};Yb.prototype.get_state=
407
+ function(){const a=[];a[0]=this.virtio;a[1]=this.num_pages;a[2]=this.actual;return a};Yb.prototype.set_state=function(a){this.virtio.set_state(a[0]);this.num_pages=a[1];this.actual=a[2]};Yb.prototype.GetStats=function(a){this.stats_cb=a;for(a=this.virtio.queues[2];a.has_request();){const b=a.pop_request();this.virtio.queues[2].push_reply(b)}this.virtio.queues[2].flush_replies()};Yb.prototype.Reset=function(){};function Zb(a,b,c,d){D("Trying to load kernel of size "+b.byteLength);var e=new Uint8Array(b);
408
+ const f=new Uint16Array(b);var h=new Uint32Array(b),l=e[497]||4,n=f[255];if(43605!==n)D("Bad checksum1: "+z(n));else if(n=f[257]|f[258]<<16,1400005704!==n)D("Bad checksum2: "+z(n));else{n=f[259];m(514<=n);var p=e[529];m(p&1);var q=f[283],r=h[139],t=h[140],v=e[564],y=e[565],C=518<=n?h[142]:255,u=h[146],B=h[147],w=h[150],G=h[151],L=h[152];D("kernel boot protocol version: "+z(n));D("flags="+z(p)+" xflags="+z(q));D("code32_start="+z(h[133]));D("initrd_addr_max="+z(r));D("kernel_alignment="+z(t));D("relocatable="+
409
+ v);D("min_alignment="+z(y));D("cmdline max="+z(C));D("payload offset="+z(u)+" size="+z(B));D("pref_address="+z(G)+":"+z(w));D("init_size="+z(L));e[528]=255;e[529]=p&-97|128;f[274]=56832;f[253]=65535;D("heap_end_ptr="+z(56832));d+="\x00";m(d.length<C);D("cmd_line_ptr="+z(581632));h[138]=581632;for(e=0;e<d.length;e++)a[581632+e]=d.charCodeAt(e);l=512*(l+1);D("prot_mode_kernel_start="+z(l));d=new Uint8Array(b,0,l);b=new Uint8Array(b,l);e=l=0;c&&(l=67108864,e=c.byteLength,m(1048576+b.length<l),a.set(new Uint8Array(c),
410
+ l));h[134]=l;h[135]=e;m(655360>524288+d.length);a.set(d,524288);a.set(b,1048576);a=new Uint8Array(512);(new Uint16Array(a.buffer))[0]=43605;a[2]=1;c=3;a[c++]=250;a[c++]=184;a[c++]=32768;a[c++]=128;a[c++]=142;a[c++]=192;a[c++]=142;a[c++]=216;a[c++]=142;a[c++]=224;a[c++]=142;a[c++]=232;a[c++]=142;a[c++]=208;a[c++]=188;a[c++]=57344;a[c++]=224;a[c++]=234;a[c++]=0;a[c++]=0;a[c++]=32800;a[c++]=128;m(512>c);h=a[c]=0;for(b=0;b<a.length;b++)h+=a[b];a[c]=-h;return{name:"genroms/kernel.bin",data:a}}}function K(a,
411
+ b,c){this.stop_idling=c;this.wm=b;this.wasm_patch();this.create_jit_imports();this.wasm_memory=b=this.wm.exports.memory;this.memory_size=k(Uint32Array,b,812,1);this.mem8=new Uint8Array(0);this.mem32s=new Int32Array(this.mem8.buffer);this.segment_is_null=k(Uint8Array,b,724,8);this.segment_offsets=k(Int32Array,b,736,8);this.segment_limits=k(Uint32Array,b,768,8);this.segment_access_bytes=k(Uint8Array,b,512,8);this.protected_mode=k(Int32Array,b,800,1);this.idtr_size=k(Int32Array,b,564,1);this.idtr_offset=
412
+ k(Int32Array,b,568,1);this.gdtr_size=k(Int32Array,b,572,1);this.gdtr_offset=k(Int32Array,b,576,1);this.tss_size_32=k(Int32Array,b,1128,1);this.page_fault=k(Uint32Array,b,540,8);this.cr=k(Int32Array,b,580,8);this.cpl=k(Uint8Array,b,612,1);this.is_32=k(Int32Array,b,804,1);this.stack_size_32=k(Int32Array,b,808,1);this.in_hlt=k(Uint8Array,b,616,1);this.last_virt_eip=k(Int32Array,b,620,1);this.eip_phys=k(Int32Array,b,624,1);this.sysenter_cs=k(Int32Array,b,636,1);this.sysenter_esp=k(Int32Array,b,640,1);
413
+ this.sysenter_eip=k(Int32Array,b,644,1);this.prefixes=k(Int32Array,b,648,1);this.flags=k(Int32Array,b,120,1);this.flags_changed=k(Int32Array,b,100,1);this.last_op_size=k(Int32Array,b,96,1);this.last_op1=k(Int32Array,b,104,1);this.last_result=k(Int32Array,b,112,1);this.current_tsc=k(Uint32Array,b,960,2);this.devices={};this.instruction_pointer=k(Int32Array,b,556,1);this.previous_ip=k(Int32Array,b,560,1);this.apic_enabled=k(Uint8Array,b,548,1);this.acpi_enabled=k(Uint8Array,b,552,1);this.memory_map_read8=
414
+ [];this.memory_map_write8=[];this.memory_map_read32=[];this.memory_map_write32=[];this.bios={main:null,vga:null};this.instruction_counter=k(Uint32Array,b,664,1);this.reg32=k(Int32Array,b,64,8);this.fpu_st=k(Int32Array,b,1152,32);this.fpu_stack_empty=k(Uint8Array,b,816,1);this.fpu_stack_empty[0]=255;this.fpu_stack_ptr=k(Uint8Array,b,1032,1);this.fpu_stack_ptr[0]=0;this.fpu_control_word=k(Uint16Array,b,1036,1);this.fpu_control_word[0]=895;this.fpu_status_word=k(Uint16Array,b,1040,1);this.fpu_status_word[0]=
415
+ 0;this.fpu_ip=k(Int32Array,b,1048,1);this.fpu_ip[0]=0;this.fpu_ip_selector=k(Int32Array,b,1052,1);this.fpu_ip_selector[0]=0;this.fpu_opcode=k(Int32Array,b,1044,1);this.fpu_opcode[0]=0;this.fpu_dp=k(Int32Array,b,1056,1);this.fpu_dp[0]=0;this.fpu_dp_selector=k(Int32Array,b,1060,1);this.fpu_dp_selector[0]=0;this.reg_xmm32s=k(Int32Array,b,832,32);this.mxcsr=k(Int32Array,b,824,1);this.sreg=k(Uint16Array,b,668,8);this.dreg=k(Int32Array,b,684,8);this.reg_pdpte=k(Int32Array,b,968,8);this.svga_dirty_bitmap_min_offset=
416
+ k(Uint32Array,b,716,1);this.svga_dirty_bitmap_max_offset=k(Uint32Array,b,720,1);this.fw_value=[];this.fw_pointer=0;this.option_roms=[];this.io=void 0;this.bus=a;this.set_tsc(0,0);this.debug_init();this.seen_code={};this.seen_code_uncompiled={}}K.prototype.clear_opstats=function(){(new Uint8Array(this.wasm_memory.buffer,32768,131072)).fill(0);this.wm.exports.profiler_init()};K.prototype.create_jit_imports=function(){const a=Object.create(null);a.m=this.wm.exports.memory;for(const b of Object.keys(this.wm.exports))b.startsWith("_")||
417
+ b.startsWith("zstd")||b.endsWith("_js")||(a[b]=this.wm.exports[b]);this.jit_imports=a};K.prototype.wasm_patch=function(){const a=c=>this.wm.exports[c],b=c=>{const d=a(c);console.assert(d,"Missing import: "+c);return d};this.reset_cpu=b("reset_cpu");this.getiopl=b("getiopl");this.get_eflags=b("get_eflags");this.handle_irqs=b("handle_irqs");this.main_loop=b("main_loop");this.set_jit_config=b("set_jit_config");this.read8=b("read8");this.read16=b("read16");this.read32s=b("read32s");this.write8=b("write8");
418
+ this.write16=b("write16");this.write32=b("write32");this.in_mapped_range=b("in_mapped_range");this.fpu_load_tag_word=b("fpu_load_tag_word");this.fpu_load_status_word=b("fpu_load_status_word");this.fpu_get_sti_f64=b("fpu_get_sti_f64");this.translate_address_system_read=b("translate_address_system_read_js");this.get_seg_cs=b("get_seg_cs");this.get_real_eip=b("get_real_eip");this.clear_tlb=b("clear_tlb");this.full_clear_tlb=b("full_clear_tlb");this.update_state_flags=b("update_state_flags");this.set_tsc=
419
+ b("set_tsc");this.store_current_tsc=b("store_current_tsc");this.set_cpuid_level=b("set_cpuid_level");this.pic_set_irq=b("pic_set_irq");this.pic_clear_irq=b("pic_clear_irq");this.jit_force_generate_unsafe=a("jit_force_generate_unsafe");this.jit_clear_cache=b("jit_clear_cache_js");this.jit_dirty_cache=b("jit_dirty_cache");this.codegen_finalize_finished=b("codegen_finalize_finished");this.allocate_memory=b("allocate_memory");this.zero_memory=b("zero_memory");this.is_memory_zeroed=b("is_memory_zeroed");
420
+ this.svga_allocate_memory=b("svga_allocate_memory");this.svga_allocate_dest_buffer=b("svga_allocate_dest_buffer");this.svga_fill_pixel_buffer=b("svga_fill_pixel_buffer");this.svga_mark_dirty=b("svga_mark_dirty");this.get_pic_addr_master=b("get_pic_addr_master");this.get_pic_addr_slave=b("get_pic_addr_slave");this.zstd_create_ctx=b("zstd_create_ctx");this.zstd_get_src_ptr=b("zstd_get_src_ptr");this.zstd_free_ctx=b("zstd_free_ctx");this.zstd_read=b("zstd_read");this.zstd_read_free=b("zstd_read_free");
421
+ this.port20_read=b("port20_read");this.port21_read=b("port21_read");this.portA0_read=b("portA0_read");this.portA1_read=b("portA1_read");this.port20_write=b("port20_write");this.port21_write=b("port21_write");this.portA0_write=b("portA0_write");this.portA1_write=b("portA1_write");this.port4D0_read=b("port4D0_read");this.port4D1_read=b("port4D1_read");this.port4D0_write=b("port4D0_write");this.port4D1_write=b("port4D1_write")};K.prototype.jit_force_generate=function(a){this.jit_force_generate_unsafe?
422
+ this.jit_force_generate_unsafe(a):m(!1,"Not supported in this wasm build: jit_force_generate_unsafe")};K.prototype.jit_clear_func=function(a){m(0<=a&&900>a);this.wm.wasm_table.set(a+1024,null)};K.prototype.jit_clear_all_funcs=function(){const a=this.wm.wasm_table;for(let b=0;900>b;b++)a.set(1024+b,null)};K.prototype.get_state=function(){var a=[];a[0]=this.memory_size[0];a[1]=new Uint8Array([...this.segment_is_null,...this.segment_access_bytes]);a[2]=this.segment_offsets;a[3]=this.segment_limits;a[4]=
423
+ this.protected_mode[0];a[5]=this.idtr_offset[0];a[6]=this.idtr_size[0];a[7]=this.gdtr_offset[0];a[8]=this.gdtr_size[0];a[9]=this.page_fault[0];a[10]=this.cr;a[11]=this.cpl[0];a[13]=this.is_32[0];a[16]=this.stack_size_32[0];a[17]=this.in_hlt[0];a[18]=this.last_virt_eip[0];a[19]=this.eip_phys[0];a[22]=this.sysenter_cs[0];a[23]=this.sysenter_eip[0];a[24]=this.sysenter_esp[0];a[25]=this.prefixes[0];a[26]=this.flags[0];a[27]=this.flags_changed[0];a[28]=this.last_op1[0];a[30]=this.last_op_size[0];a[37]=
424
+ this.instruction_pointer[0];a[38]=this.previous_ip[0];a[39]=this.reg32;a[40]=this.sreg;a[41]=this.dreg;a[42]=this.reg_pdpte;this.store_current_tsc();a[43]=this.current_tsc;a[45]=this.devices.virtio_9p;a[46]=this.devices.apic;a[47]=this.devices.rtc;a[48]=this.devices.pci;a[49]=this.devices.dma;a[50]=this.devices.acpi;a[52]=this.devices.vga;a[53]=this.devices.ps2;a[54]=this.devices.uart0;a[55]=this.devices.fdc;a[56]=this.devices.cdrom;a[57]=this.devices.hda;a[58]=this.devices.pit;a[59]=this.devices.net;
425
+ a[60]=this.get_state_pic();a[61]=this.devices.sb16;a[62]=this.fw_value;a[63]=this.devices.ioapic;a[64]=this.tss_size_32[0];a[66]=this.reg_xmm32s;a[67]=this.fpu_st;a[68]=this.fpu_stack_empty[0];a[69]=this.fpu_stack_ptr[0];a[70]=this.fpu_control_word[0];a[71]=this.fpu_ip[0];a[72]=this.fpu_ip_selector[0];a[73]=this.fpu_dp[0];a[74]=this.fpu_dp_selector[0];a[75]=this.fpu_opcode[0];const {packed_memory:b,bitmap:c}=this.pack_memory();a[77]=b;a[78]=new Uint8Array(c.get_buffer());a[79]=this.devices.uart1;
426
+ a[80]=this.devices.uart2;a[81]=this.devices.uart3;a[82]=this.devices.virtio_console;a[83]=this.devices.virtio_net;a[84]=this.devices.virtio_balloon;return a};K.prototype.get_state_pic=function(){const a=new Uint8Array(this.wasm_memory.buffer,this.get_pic_addr_master(),13),b=new Uint8Array(this.wasm_memory.buffer,this.get_pic_addr_slave(),13),c=[],d=[];c[0]=a[0];c[1]=a[1];c[2]=a[2];c[3]=a[3];c[4]=a[4];c[5]=d;c[6]=a[6];c[7]=a[7];c[8]=a[8];c[9]=a[9];c[10]=a[10];c[11]=a[11];c[12]=a[12];d[0]=b[0];d[1]=
427
+ b[1];d[2]=b[2];d[3]=b[3];d[4]=b[4];d[5]=null;d[6]=b[6];d[7]=b[7];d[8]=b[8];d[9]=b[9];d[10]=b[10];d[11]=b[11];d[12]=b[12];return c};K.prototype.set_state=function(a){this.memory_size[0]=a[0];this.mem8.length!==this.memory_size[0]&&console.warn("Note: Memory size mismatch. we="+this.mem8.length+" state="+this.memory_size[0]);8===a[1].length?(this.segment_is_null.set(a[1]),this.segment_access_bytes.fill(242),this.segment_access_bytes[1]=250):16===a[1].length?(this.segment_is_null.set(a[1].subarray(0,
428
+ 8)),this.segment_access_bytes.set(a[1].subarray(8,16))):m("Unexpected cpu segment state length:"+a[1].length);this.segment_offsets.set(a[2]);this.segment_limits.set(a[3]);this.protected_mode[0]=a[4];this.idtr_offset[0]=a[5];this.idtr_size[0]=a[6];this.gdtr_offset[0]=a[7];this.gdtr_size[0]=a[8];this.page_fault[0]=a[9];this.cr.set(a[10]);this.cpl[0]=a[11];this.is_32[0]=a[13];this.stack_size_32[0]=a[16];this.in_hlt[0]=a[17];this.last_virt_eip[0]=a[18];this.eip_phys[0]=a[19];this.sysenter_cs[0]=a[22];
429
+ this.sysenter_eip[0]=a[23];this.sysenter_esp[0]=a[24];this.prefixes[0]=a[25];this.flags[0]=a[26];this.flags_changed[0]=a[27];this.last_op1[0]=a[28];this.last_op_size[0]=a[30];this.instruction_pointer[0]=a[37];this.previous_ip[0]=a[38];this.reg32.set(a[39]);this.sreg.set(a[40]);this.dreg.set(a[41]);a[42]&&this.reg_pdpte.set(a[42]);this.set_tsc(a[43][0],a[43][1]);this.devices.virtio_9p&&this.devices.virtio_9p.set_state(a[45]);this.devices.apic&&this.devices.apic.set_state(a[46]);this.devices.rtc&&this.devices.rtc.set_state(a[47]);
430
+ this.devices.pci&&this.devices.pci.set_state(a[48]);this.devices.dma&&this.devices.dma.set_state(a[49]);this.devices.acpi&&this.devices.acpi.set_state(a[50]);this.devices.vga&&this.devices.vga.set_state(a[52]);this.devices.ps2&&this.devices.ps2.set_state(a[53]);this.devices.uart0&&this.devices.uart0.set_state(a[54]);this.devices.fdc&&this.devices.fdc.set_state(a[55]);this.devices.cdrom&&this.devices.cdrom.set_state(a[56]);this.devices.hda&&this.devices.hda.set_state(a[57]);this.devices.pit&&this.devices.pit.set_state(a[58]);
431
+ this.devices.net&&this.devices.net.set_state(a[59]);this.set_state_pic(a[60]);this.devices.sb16&&this.devices.sb16.set_state(a[61]);this.devices.uart1&&this.devices.uart1.set_state(a[79]);this.devices.uart2&&this.devices.uart2.set_state(a[80]);this.devices.uart3&&this.devices.uart3.set_state(a[81]);this.devices.virtio_console&&this.devices.virtio_console.set_state(a[82]);this.devices.virtio_net&&this.devices.virtio_net.set_state(a[83]);this.devices.virtio_balloon&&this.devices.virtio_balloon.set_state(a[84]);
432
+ this.fw_value=a[62];this.devices.ioapic&&this.devices.ioapic.set_state(a[63]);this.tss_size_32[0]=a[64];this.reg_xmm32s.set(a[66]);this.fpu_st.set(a[67]);this.fpu_stack_empty[0]=a[68];this.fpu_stack_ptr[0]=a[69];this.fpu_control_word[0]=a[70];this.fpu_ip[0]=a[71];this.fpu_ip_selector[0]=a[72];this.fpu_dp[0]=a[73];this.fpu_dp_selector[0]=a[74];this.fpu_opcode[0]=a[75];const b=new ua(a[78].buffer);this.unpack_memory(b,a[77]);this.update_state_flags();this.full_clear_tlb();this.jit_clear_cache()};K.prototype.set_state_pic=
433
+ function(a){const b=new Uint8Array(this.wasm_memory.buffer,this.get_pic_addr_master(),13),c=new Uint8Array(this.wasm_memory.buffer,this.get_pic_addr_slave(),13);b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];const d=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];c[0]=d[0];c[1]=d[1];c[2]=d[2];c[3]=d[3];c[4]=d[4];c[6]=d[6];c[7]=d[7];c[8]=d[8];c[9]=d[9];c[10]=d[10];c[11]=d[11];c[12]=d[12]};K.prototype.pack_memory=function(){m(0===(this.mem8.length&4095));var a=this.mem8.length>>
434
+ 12,b=[];for(var c=0;c<a;c++)this.is_memory_zeroed(c<<12,4096)||b.push(c);a=new ua(a);c=new Uint8Array(b.length<<12);for(const [d,e]of b.entries())a.set(e,1),b=e<<12,b=this.mem8.subarray(b,b+4096),c.set(b,d<<12);return{bitmap:a,packed_memory:c}};K.prototype.unpack_memory=function(a,b){this.zero_memory(0,this.memory_size[0]);const c=this.memory_size[0]>>12;let d=0;for(let f=0;f<c;f++)if(a.get(f)){var e=d<<12;e=b.subarray(e,e+4096);this.mem8.set(e,f<<12);d++}};K.prototype.reboot_internal=function(){this.reset_cpu();
435
+ this.fw_value=[];this.devices.virtio_9p&&this.devices.virtio_9p.reset();this.devices.virtio_console&&this.devices.virtio_console.reset();this.devices.virtio_net&&this.devices.virtio_net.reset();this.load_bios()};K.prototype.reset_memory=function(){this.mem8.fill(0)};K.prototype.create_memory=function(a,b){a<b?(a=b,D("Rounding memory size up to "+a,2)):0>(a|0)&&(a=Math.pow(2,31)-131072,D("Rounding memory size down to "+a,2));a=(a-1|131071)+1|0;m(0<(a|0));m(0===(a&131071));console.assert(0===this.memory_size[0],
436
+ "Expected uninitialised memory");this.memory_size[0]=a;b=this.allocate_memory(a);this.mem8=k(Uint8Array,this.wasm_memory,b,a);this.mem32s=k(Uint32Array,this.wasm_memory,b,a>>2)};K.prototype.init=function(a,b){this.create_memory(a.memory_size||67108864,a.initrd?67108864:1048576);a.disable_jit&&this.set_jit_config(0,1);a.cpuid_level&&this.set_cpuid_level(a.cpuid_level);this.acpi_enabled[0]=+a.acpi;this.reset_cpu();var c=new Ia(this);this.io=c;this.bios.main=a.bios;this.bios.vga=a.vga_bios;this.load_bios();
437
+ if(a.bzimage){const e=Zb(this.mem8,a.bzimage,a.initrd,a.cmdline||"");e&&this.option_roms.push(e)}c.register_read(179,this,function(){D("port 0xB3 read");return 0});var d=0;c.register_read(146,this,function(){return d});c.register_write(146,this,function(e){d=e});c.register_read(1297,this,function(){if(this.fw_pointer<this.fw_value.length)return this.fw_value[this.fw_pointer++];m(!1,"config port: Read past value");return 0});c.register_write(1296,this,void 0,function(e){function f(n){return new Uint8Array(Int32Array.of(n).buffer)}
438
+ function h(n){return n>>8|n<<8&65280}function l(n){return n<<24|n<<8&16711680|n>>8&65280|n>>>24}D("bios config port, index="+z(e));this.fw_pointer=0;if(0===e)this.fw_value=f(1431127377);else if(1===e)this.fw_value=f(0);else if(3===e)this.fw_value=f(this.memory_size[0]);else if(5===e)this.fw_value=f(1);else if(15===e)this.fw_value=f(1);else if(13===e)this.fw_value=new Uint8Array(16);else if(25===e){e=new Int32Array(4+64*this.option_roms.length);const n=new Uint8Array(e.buffer);e[0]=l(this.option_roms.length);
439
+ for(let p=0;p<this.option_roms.length;p++){const {name:q,data:r}=this.option_roms[p],t=4+64*p;m(65536>49152+p);e[t+0>>2]=l(r.length);e[t+4>>2]=h(49152+p);m(56>q.length);for(let v=0;v<q.length;v++)n[t+8+v]=q.charCodeAt(v)}this.fw_value=n}else 32768<=e&&49152>e?this.fw_value=f(0):49152<=e&&e-49152<this.option_roms.length?this.fw_value=this.option_roms[e-49152].data:(D("Warning: Unimplemented fw index: "+z(e)),this.fw_value=f(0))});c.register_write(128,this,function(){});c.register_read(128,this,function(){return 255});
440
+ c.register_write(233,this,function(){});c.register_read(32,this,this.port20_read);c.register_read(33,this,this.port21_read);c.register_read(160,this,this.portA0_read);c.register_read(161,this,this.portA1_read);c.register_write(32,this,this.port20_write);c.register_write(33,this,this.port21_write);c.register_write(160,this,this.portA0_write);c.register_write(161,this,this.portA1_write);c.register_read(1232,this,this.port4D0_read);c.register_read(1233,this,this.port4D1_read);c.register_write(1232,this,
441
+ this.port4D0_write);c.register_write(1233,this,this.port4D1_write);this.devices={};a.load_devices&&(this.devices.pci=new mb(this),this.acpi_enabled[0]&&(this.devices.ioapic=new hb(this),this.devices.apic=new gb(this),this.devices.acpi=new ib(this)),this.devices.rtc=new Rb(this),this.fill_cmos(this.devices.rtc,a),this.devices.dma=new E(this),this.devices.vga=new W(this,b,a.screen,a.vga_memory_size||8388608),this.devices.ps2=new yb(this,b),this.devices.uart0=new lb(this,1016,b),a.uart1&&(this.devices.uart1=
442
+ new lb(this,760,b)),a.uart2&&(this.devices.uart2=new lb(this,1E3,b)),a.uart3&&(this.devices.uart3=new lb(this,744,b)),this.devices.fdc=new Q(this,a.fda,a.fdb),c=0,a.hda&&(this.devices.hda=new Sb(this,a.hda,a.hdb,!1,c++,b)),a.cdrom&&(this.devices.cdrom=new Sb(this,a.cdrom,void 0,!0,c++,b)),this.devices.pit=new jb(this,b),"ne2k"===a.net_device.type?this.devices.net=new pb(this,b,a.preserve_mac_from_state_image,a.mac_address_translation):"virtio"===a.net_device.type&&(this.devices.virtio_net=new Tb(this,
443
+ b,a.preserve_mac_from_state_image)),a.fs9p&&(this.devices.virtio_9p=new fc(a.fs9p,this,b)),a.virtio_console&&(this.devices.virtio_console=new sb(this,b)),a.virtio_balloon&&(this.devices.virtio_balloon=new Yb(this,b)),this.devices.sb16=new F(this,b));a.multiboot&&(D("loading multiboot",2),a=this.load_multiboot_option_rom(a.multiboot,a.initrd,a.cmdline))&&(this.bios.main?(D("adding option rom for multiboot",2),this.option_roms.push(a)):(D("loaded multiboot without bios",2),this.reg32[0]=this.io.port_read32(244)));
444
+ this.debug.init()};K.prototype.load_multiboot=function(a){this.bios.main&&m(!1,"load_multiboot not supported with BIOS");this.load_multiboot_option_rom(a,void 0,"")&&(D("loaded multiboot",2),this.reg32[0]=this.io.port_read32(244))};K.prototype.load_multiboot_option_rom=function(a,b,c){D("Trying multiboot from buffer of size "+a.byteLength,2);if(8192>a.byteLength){var d=new Int32Array(2048);(new Uint8Array(d.buffer)).set(new Uint8Array(a))}else d=new Int32Array(a,0,2048);for(var e=0;8192>e;e+=4){if(464367618===
445
+ d[e>>2]){var f=d[e+4>>2];if(464367618+f+d[e+8>>2]|0){D("Multiboot checksum check failed",2);continue}}else continue;D("Multiboot magic found, flags: "+z(f>>>0,8),2);m(0===(f&-65540),"TODO");var h=this;this.io.register_read(244,this,function(){return 0},function(){return 0},function(){var q=31860,r=0;if(c){r|=4;h.write32(31760,q);c+="\x00";var t=(new TextEncoder).encode(c);h.write_blob(t,q);q+=t.length}if(f&2){r|=64;t=0;h.write32(31788,0);h.write32(31792,q);var v=0;let w=!1;for(let G=0;4294967296>
446
+ G;G+=131072)w&&void 0!==h.memory_map_read8[G>>>17]?(h.write32(q,20),h.write32(q+4,v),h.write32(q+8,0),h.write32(q+12,G-v),h.write32(q+16,0),h.write32(q+20,1),q+=24,t+=24,w=!1):w||void 0!==h.memory_map_read8[G>>>17]||(v=G,w=!0);m(!w,"top of 4GB shouldn't have memory");h.write32(31788,t)}h.write32(31744,r);t=r=0;if(f&65536){D("Multiboot specifies its own address table",2);var y=d[e+12>>2];var C=d[e+16>>2];var u=d[e+20>>2];var B=d[e+24>>2];r=d[e+28>>2];D("header="+z(y,8)+" load="+z(C,8)+" load_end="+
447
+ z(u,8)+" bss_end="+z(B,8)+" entry="+z(r,8));m(C<=y);y=e-(y-C);0===u?t=void 0:(m(u>=C),t=u-C);y=new Uint8Array(a,y,t);h.write_blob(y,C);r|=0;t=Math.max(u,B)}else if(1179403647===d[0]){D("Multiboot image is in elf format",2);v=new DataView(a);const [w,G]=Pb(v,Db);console.assert(52===G);for(y of Object.keys(w))D(y+": 0x"+(w[y].toString(16)>>>0));console.assert(1179403647===w.magic,"Bad magic");console.assert(1===w.class,"Unimplemented: 64 bit elf");console.assert(1===w.data,"Unimplemented: big endian");
448
+ console.assert(1===w.version0,"Bad version0");console.assert(2===w.type,"Unimplemented type");console.assert(1===w.version1,"Bad version1");console.assert(52===w.ehsize,"Bad header size");console.assert(32===w.phentsize,"Bad program header size");console.assert(40===w.shentsize,"Bad section header size");[r]=Qb(new DataView(v.buffer,v.byteOffset+w.phoff,w.phentsize*w.phnum),Nb,w.phnum);[y]=Qb(new DataView(v.buffer,v.byteOffset+w.shoff,w.shentsize*w.shnum),Ob,w.shnum);if(ca){console.log("%d program headers:",
449
+ r.length);for(B of r)console.log("type=%s offset=%s vaddr=%s paddr=%s filesz=%s memsz=%s flags=%s align=%s",B.type.toString(16),B.offset.toString(16),B.vaddr.toString(16),B.paddr.toString(16),B.filesz.toString(16),B.memsz.toString(16),B.flags.toString(16),B.align.toString(16));console.log("%d section headers:",y.length);for(C of y)console.log("name=%s type=%s flags=%s addr=%s offset=%s size=%s link=%s info=%s addralign=%s entsize=%s",C.name.toString(16),C.type.toString(16),C.flags.toString(16),C.addr.toString(16),
450
+ C.offset.toString(16),C.size.toString(16),C.link.toString(16),C.info.toString(16),C.addralign.toString(16),C.entsize.toString(16))}B=w;C=r;r=B.entry;for(u of C)0!==u.type&&(1===u.type?(m(u.filesz<=u.memsz),u.paddr+u.memsz<h.memory_size[0]?(u.filesz&&(C=new Uint8Array(a,u.offset,u.filesz),h.write_blob(C,u.paddr)),t=Math.max(t,u.paddr+u.memsz),D("prg load "+u.paddr+" to "+(u.paddr+u.memsz),2),r===B.entry&&u.vaddr<=r&&u.vaddr+u.memsz>r&&(r=r-u.vaddr+u.paddr)):D("Warning: Skipped loading section, paddr="+
451
+ z(u.paddr)+" memsz="+u.memsz,2)):2===u.type||3===u.type||4===u.type||6===u.type||7===u.type||1685382480===u.type||1685382481===u.type||1685382482===u.type||1685382483===u.type?D("skip load type "+u.type+" "+u.paddr+" to "+(u.paddr+u.memsz),2):m(!1,"unimplemented elf section type: "+z(u.type)))}else m(!1,"Not a bootable multiboot format");b&&(h.write32(31764,1),h.write32(31768,q),u=t,0!==(u&4095)&&(u=(u&-4096)+4096),D("ramdisk address "+u),B=u+b.byteLength,h.write32(q,u),h.write32(q+4,B),h.write32(q+
452
+ 8,0),h.write32(q+12,0),m(B<h.memory_size[0]),h.write_blob(new Uint8Array(b),u));h.reg32[3]=31744;h.cr[0]=1;h.protected_mode[0]=1;h.flags[0]=2;h.is_32[0]=1;h.stack_size_32[0]=1;for(q=0;6>q;q++)h.segment_is_null[q]=0,h.segment_offsets[q]=0,h.segment_limits[q]=4294967295,h.sreg[q]=45058;h.instruction_pointer[0]=h.get_seg_cs()+r|0;h.update_state_flags();D("Starting multiboot kernel at:",2);h.debug.dump_state();h.debug.dump_regs();return 732803074});this.io.register_write_consecutive(244,this,function(q){console.log("Test exited with code "+
453
+ z(q,2));throw"HALT";},function(){},function(){},function(){});for(let q=0;15>=q;q++){function r(t){D("kvm-unit-test: Set irq "+z(q)+" to "+z(t,2));t?this.device_raise_irq(q):this.device_lower_irq(q)}this.io.register_write(8192+q,this,r,r,r)}const n=new Uint8Array(512);(new Uint16Array(n.buffer))[0]=43605;n[2]=1;var l=3;n[l++]=102;n[l++]=229;n[l++]=244;m(512>l);let p=n[l]=0;for(let q=0;q<n.length;q++)p+=n[q];n[l]=-p;return{name:"genroms/multiboot.bin",data:n}}D("Multiboot header not found",2)};K.prototype.fill_cmos=
454
+ function(a,b){var c=b.boot_order||291;a.cmos_write(56,1|c>>4&240);a.cmos_write(61,c&255);a.cmos_write(21,128);a.cmos_write(22,2);c=0;1048576<=this.memory_size[0]&&(c=this.memory_size[0]-1048576>>10,c=Math.min(c,65535));a.cmos_write(23,c&255);a.cmos_write(24,c>>8&255);a.cmos_write(48,c&255);a.cmos_write(49,c>>8&255);c=0;16777216<=this.memory_size[0]&&(c=this.memory_size[0]-16777216>>16,c=Math.min(c,65535));a.cmos_write(52,c&255);a.cmos_write(53,c>>8&255);a.cmos_write(91,0);a.cmos_write(92,0);a.cmos_write(93,
455
+ 0);a.cmos_write(20,47);a.cmos_write(95,0);b.fastboot&&a.cmos_write(63,1)};K.prototype.load_bios=function(){var a=this.bios.main,b=this.bios.vga;if(a){m(a instanceof ArrayBuffer);var c=new Uint8Array(a);this.write_blob(c,1048576-a.byteLength);if(b){m(b instanceof ArrayBuffer);var d=new Uint8Array(b);this.write_blob(d,786432);this.io.mmap_register(4272947200,1048576,function(e){e=e-4272947200|0;return e<d.length?d[e]:0},function(){m(!1,"Unexpected write to VGA rom")})}else D("Warning: No VGA BIOS");
456
+ this.io.mmap_register(4293918720,1048576,function(e){return this.mem8[e&1048575]}.bind(this),function(e,f){this.mem8[e&1048575]=f}.bind(this))}else D("Warning: No BIOS")};K.prototype.codegen_finalize=function(a,b,c,d,e){d>>>=0;e>>>=0;m(0<=a&&900>a);const f=new Uint8Array(this.wasm_memory.buffer,d,e);this.seen_code[b]=(this.seen_code[b]||0)+1;this.test_hook_did_generate_wasm&&this.test_hook_did_generate_wasm(f);WebAssembly.instantiate(f,{e:this.jit_imports}).then(h=>{this.wm.wasm_table.set(a+1024,
457
+ h.instance.exports.f);this.codegen_finalize_finished(a,b,c);this.test_hook_did_finalize_wasm&&this.test_hook_did_finalize_wasm(f)}).catch(h=>{console.log(h);debugger;throw h;})};K.prototype.log_uncompiled_code=function(){};K.prototype.dump_function_code=function(){};K.prototype.run_hardware_timers=function(a,b){const c=this.devices.pit.timer(b,!1),d=this.devices.rtc.timer(b,!1);let e=100,f=100;a&&(e=this.devices.acpi.timer(b),f=this.devices.apic.timer(b));return Math.min(c,d,e,f)};K.prototype.device_raise_irq=
458
+ function(a){m(1===arguments.length);this.pic_set_irq(a);this.devices.ioapic&&this.devices.ioapic.set_irq(a)};K.prototype.device_lower_irq=function(a){this.pic_clear_irq(a);this.devices.ioapic&&this.devices.ioapic.clear_irq(a)};function xb(a,b){this.cpu=a;this.pci=a.devices.pci;this.device_id=b.device_id;this.pci_space=[244,26,b.device_id&255,b.device_id>>8,7,5,16,0,1,0,2,0,0,0,0,0,1,168,0,0,0,16,191,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,26,b.subsystem_device_id&255,b.subsystem_device_id>>
459
+ 8,0,0,0,0,64,0,0,0,0,0,0,0,0,1,0,0];this.pci_space=this.pci_space.concat(Array(256-this.pci_space.length).fill(0));this.pci_id=b.pci_id;this.pci_bars=[];this.name=b.name;this.driver_feature_select=this.device_feature_select=0;this.device_feature=new Uint32Array(4);this.driver_feature=new Uint32Array(4);for(var c of b.common.features)m(0<=c,"VirtIO device<"+this.name+"> feature bit numbers must be non-negative"),m(128>c,"VirtIO device<"+this.name+"> feature bit numbers assumed less than 128 in implementation"),
460
+ this.device_feature[c>>>5]|=1<<(c&31),this.driver_feature[c>>>5]|=1<<(c&31);m(b.common.features.includes(32),"VirtIO device<"+this.name+"> only non-transitional devices are supported");this.features_ok=!0;this.device_status=0;this.config_has_changed=!1;this.config_generation=0;this.queues=[];for(var d of b.common.queues)this.queues.push(new X(a,this,d));this.queue_select=0;this.queue_selected=this.queues[0];this.isr_status=0;c=new Set;for(var e of this.queues.map(f=>f.notify_offset))d=b.notification.single_handler?
461
+ 0:e,c.add(d),m(b.notification.handlers[d],"VirtIO device<"+this.name+"> every queue's notifier must exist");for(const [f,h]of b.notification.handlers.entries())m(!h||c.has(f),"VirtIO device<"+this.name+"> no defined notify handler should be unused");e=[];e.push(this.create_common_capability(b.common));e.push(this.create_notification_capability(b.notification));e.push(this.create_isr_capability(b.isr_status));b.device_specific&&e.push(this.create_device_specific_capability(b.device_specific));this.init_capabilities(e);
462
+ a.devices.pci.register_device(this);this.reset()}xb.prototype.create_common_capability=function(a){return{type:1,bar:0,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:[{bytes:4,name:"device_feature_select",read:()=>this.device_feature_select,write:b=>{this.device_feature_select=b}},{bytes:4,name:"device_feature",read:()=>this.device_feature[this.device_feature_select]||0,write:()=>{}},{bytes:4,name:"driver_feature_select",read:()=>this.driver_feature_select,write:b=>{this.driver_feature_select=
463
+ b}},{bytes:4,name:"driver_feature",read:()=>this.driver_feature[this.driver_feature_select]||0,write:b=>{const c=this.device_feature[this.driver_feature_select];this.driver_feature_select<this.driver_feature.length&&(this.driver_feature[this.driver_feature_select]=b&c);this.features_ok=this.features_ok&&!(b&~c)}},{bytes:2,name:"msix_config",read:()=>{D("No msi-x capability supported.",2097152);return 65535},write:()=>{D("No msi-x capability supported.",2097152)}},{bytes:2,name:"num_queues",read:()=>
464
+ this.queues.length,write:()=>{}},{bytes:1,name:"device_status",read:()=>this.device_status,write:b=>{0===b?(D("Reset device<"+this.name+">",2097152),this.reset()):b&128?D("Warning: Device<"+this.name+"> status failed",2097152):D("Device<"+this.name+"> status: "+(b&1?"ACKNOWLEDGE ":"")+(b&2?"DRIVER ":"")+(b&4?"DRIVER_OK":"")+(b&8?"FEATURES_OK ":"")+(b&64?"DEVICE_NEEDS_RESET":""),2097152);b&~this.device_status&4&&this.device_status&64&&this.notify_config_changes();this.features_ok||(b&8&&D("Removing FEATURES_OK",
465
+ 2097152),b&=-9);this.device_status=b;if(b&~this.device_status&4)a.on_driver_ok()}},{bytes:1,name:"config_generation",read:()=>this.config_generation,write:()=>{}},{bytes:2,name:"queue_select",read:()=>this.queue_select,write:b=>{this.queue_select=b;this.queue_selected=this.queue_select<this.queues.length?this.queues[this.queue_select]:null}},{bytes:2,name:"queue_size",read:()=>this.queue_selected?this.queue_selected.size:0,write:b=>{this.queue_selected&&(b&b-1&&(D("Warning: dev<"+this.name+"> Given queue size was not a power of 2. Rounding up to next power of 2.",
466
+ 2097152),b=1<<ha(b-1)+1),b>this.queue_selected.size_supported&&(D("Warning: dev<"+this.name+"> Trying to set queue size greater than supported. Clamping to supported size.",2097152),b=this.queue_selected.size_supported),this.queue_selected.set_size(b))}},{bytes:2,name:"queue_msix_vector",read:()=>{D("No msi-x capability supported.",2097152);return 65535},write:()=>{D("No msi-x capability supported.",2097152)}},{bytes:2,name:"queue_enable",read:()=>this.queue_selected?this.queue_selected.enabled|0:
467
+ 0,write:b=>{this.queue_selected&&(1===b?this.queue_selected.is_configured()?this.queue_selected.enable():D("Driver bug: tried enabling unconfigured queue",2097152):0===b&&D("Driver bug: tried writing 0 to queue_enable",2097152))}},{bytes:2,name:"queue_notify_off",read:()=>this.queue_selected?this.queue_selected.notify_offset:0,write:()=>{}},{bytes:4,name:"queue_desc (low dword)",read:()=>this.queue_selected?this.queue_selected.desc_addr:0,write:b=>{this.queue_selected&&(this.queue_selected.desc_addr=
468
+ b)}},{bytes:4,name:"queue_desc (high dword)",read:()=>0,write:b=>{0!==b&&D("Warning: High dword of 64 bit queue_desc ignored:"+b,2097152)}},{bytes:4,name:"queue_avail (low dword)",read:()=>this.queue_selected?this.queue_selected.avail_addr:0,write:b=>{this.queue_selected&&(this.queue_selected.avail_addr=b)}},{bytes:4,name:"queue_avail (high dword)",read:()=>0,write:b=>{0!==b&&D("Warning: High dword of 64 bit queue_avail ignored:"+b,2097152)}},{bytes:4,name:"queue_used (low dword)",read:()=>this.queue_selected?
469
+ this.queue_selected.used_addr:0,write:b=>{this.queue_selected&&(this.queue_selected.used_addr=b)}},{bytes:4,name:"queue_used (high dword)",read:()=>0,write:b=>{0!==b&&D("Warning: High dword of 64 bit queue_used ignored:"+b,2097152)}}]}};xb.prototype.create_notification_capability=function(a){const b=[];let c;a.single_handler?(m(1===a.handlers.length,"VirtIO device<"+this.name+"> too many notify handlers specified: expected single handler"),c=0):c=2;for(const [d,e]of a.handlers.entries())b.push({bytes:2,
470
+ name:"notify"+d,read:()=>65535,write:e||(()=>{})});return{type:2,bar:1,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array([c&255,c>>8&255,c>>16&255,c>>24]),struct:b}};xb.prototype.create_isr_capability=function(a){return{type:3,bar:2,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:[{bytes:1,name:"isr_status",read:()=>{const b=this.isr_status;this.lower_irq();return b},write:()=>{}}]}};xb.prototype.create_device_specific_capability=function(a){m(~a.offset&3,"VirtIO device<"+
471
+ this.name+"> device specific cap offset must be 4-byte aligned");return{type:4,bar:3,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:a.struct}};xb.prototype.init_capabilities=function(a){let b=this.pci_space[52]=64;var c=b;for(const e of a){a=16+e.extra.length;c=b;b=c+a;m(256>=b,"VirtIO device<"+this.name+"> can't fit all capabilities into 256byte configspace");m(0<=e.bar&&6>e.bar,"VirtIO device<"+this.name+"> capability invalid bar number");var d=e.struct.reduce((f,h)=>f+
472
+ h.bytes,0);d+=e.offset;d=16>d?16:1<<ha(d-1)+1;m(0===(e.port&d-1),"VirtIO device<"+this.name+"> capability port should be aligned to pci bar size");this.pci_bars[e.bar]={size:d};this.pci_space[c]=9;this.pci_space[c+1]=b;this.pci_space[c+2]=a;this.pci_space[c+3]=e.type;this.pci_space[c+4]=e.bar;this.pci_space[c+5]=0;this.pci_space[c+6]=0;this.pci_space[c+7]=0;this.pci_space[c+8]=e.offset&255;this.pci_space[c+9]=e.offset>>>8&255;this.pci_space[c+10]=e.offset>>>16&255;this.pci_space[c+11]=e.offset>>>
473
+ 24;this.pci_space[c+12]=d&255;this.pci_space[c+13]=d>>>8&255;this.pci_space[c+14]=d>>>16&255;this.pci_space[c+15]=d>>>24;for(const [f,h]of e.extra.entries())this.pci_space[c+16+f]=h;c=16+4*e.bar;this.pci_space[c]=e.port&254|!e.use_mmio;this.pci_space[c+1]=e.port>>>8&255;this.pci_space[c+2]=e.port>>>16&255;this.pci_space[c+3]=e.port>>>24&255;c=e.port+e.offset;for(const f of e.struct){let h=f.read;a=f.write;h=()=>{const l=f.read();D("Device<"+this.name+"> cap["+e.type+"] read["+f.name+"] => "+z(l,8*
474
+ f.bytes),2097152);return l};a=l=>{D("Device<"+this.name+"> cap["+e.type+"] write["+f.name+"] <= "+z(l,8*f.bytes),2097152);f.write(l)};if(e.use_mmio)m(!1,"VirtIO device <"+this.name+"> mmio capability not implemented.");else{d=function(n){D("Warning: 8-bit read from 16-bit virtio port",2097152);return h(n&-2)>>((n&1)<<3)&255};const l=function(n){D("Warning: 8-bit read from 32-bit virtio port",2097152);return h(n&-4)>>((n&3)<<3)&255};switch(f.bytes){case 4:this.cpu.io.register_read(c,this,l,void 0,
475
+ h);this.cpu.io.register_read(c+1,this,l);this.cpu.io.register_read(c+2,this,l);this.cpu.io.register_read(c+3,this,l);this.cpu.io.register_write(c,this,void 0,void 0,a);break;case 2:this.cpu.io.register_read(c,this,d,h);this.cpu.io.register_read(c+1,this,d);this.cpu.io.register_write(c,this,void 0,a);break;case 1:this.cpu.io.register_read(c,this,h);this.cpu.io.register_write(c,this,a);break;default:m(!1,"VirtIO device <"+this.name+"> invalid capability field width of "+f.bytes+" bytes")}}c+=f.bytes}}m(256>=
433
476
  b+20,"VirtIO device<"+this.name+"> can't fit all capabilities into 256byte configspace");this.pci_space[b]=9;this.pci_space[b+1]=0;this.pci_space[b+2]=20;this.pci_space[b+3]=5;this.pci_space[b+4]=0;this.pci_space[b+5]=0;this.pci_space[b+6]=0;this.pci_space[b+7]=0;this.pci_space[b+8]=0;this.pci_space[b+9]=0;this.pci_space[b+10]=0;this.pci_space[b+11]=0;this.pci_space[b+12]=0;this.pci_space[b+13]=0;this.pci_space[b+14]=0;this.pci_space[b+15]=0;this.pci_space[b+16]=0;this.pci_space[b+17]=0;this.pci_space[b+
434
- 18]=0;this.pci_space[b+19]=0};fa.prototype.get_state=function(){let a=[];a[0]=this.device_feature_select;a[1]=this.driver_feature_select;a[2]=this.device_feature;a[3]=this.driver_feature;a[4]=this.features_ok;a[5]=this.device_status;a[6]=this.config_has_changed;a[7]=this.config_generation;a[8]=this.isr_status;a[9]=this.queue_select;return a=a.concat(this.queues)};fa.prototype.set_state=function(a){this.device_feature_select=a[0];this.driver_feature_select=a[1];this.device_feature=a[2];this.driver_feature=
435
- a[3];this.features_ok=a[4];this.device_status=a[5];this.config_has_changed=a[6];this.config_generation=a[7];this.isr_status=a[8];this.queue_select=a[9];let b=0;for(const c of a.slice(10))this.queues[b].set_state(c),b++;this.queue_selected=this.queues[this.queue_select]||null};fa.prototype.reset=function(){this.driver_feature_select=this.device_feature_select=0;this.driver_feature.set(this.device_feature);this.features_ok=!0;this.queue_select=this.device_status=0;this.queue_selected=this.queues[0];
436
- for(const a of this.queues)a.reset();this.config_has_changed=!1;this.config_generation=0;this.lower_irq()};fa.prototype.notify_config_changes=function(){this.config_has_changed=!0;this.device_status&4?this.raise_irq(2):h(!1,"VirtIO device<"+this.name+"> attempted to notify driver before DRIVER_OK")};fa.prototype.update_config_generation=function(){this.config_has_changed&&(this.config_generation++,this.config_generation&=255,this.config_has_changed=!1)};fa.prototype.is_feature_negotiated=function(a){return 0<
437
- (this.driver_feature[a>>>5]&1<<(a&31))};fa.prototype.needs_reset=function(){E("Device<"+this.name+"> experienced error - requires reset",2097152);this.device_status|=64;this.device_status&4&&this.notify_config_changes()};fa.prototype.raise_irq=function(a){E("Raise irq "+B(a),2097152);this.isr_status|=a;this.pci.raise_irq(this.pci_id)};fa.prototype.lower_irq=function(){E("Lower irq ",2097152);this.isr_status=0;this.pci.lower_irq(this.pci_id)};function W(a,b,c){this.cpu=a;this.virtio=b;this.size_supported=
438
- this.size=c.size_supported;this.mask=this.size-1;this.enabled=!1;this.notify_offset=c.notify_offset;this.num_staged_replies=this.used_addr=this.avail_last_idx=this.avail_addr=this.desc_addr=0;this.reset()}W.prototype.get_state=function(){const a=[];a[0]=this.size;a[1]=this.size_supported;a[2]=this.enabled;a[3]=this.notify_offset;a[4]=this.desc_addr;a[5]=this.avail_addr;a[6]=this.avail_last_idx;a[7]=this.used_addr;a[8]=this.num_staged_replies;return a};W.prototype.set_state=function(a){this.size=a[0];
439
- this.size_supported=a[1];this.enabled=a[2];this.notify_offset=a[3];this.desc_addr=a[4];this.avail_addr=a[5];this.avail_last_idx=a[6];this.used_addr=a[7];this.num_staged_replies=a[8];this.mask=this.size-1};W.prototype.reset=function(){this.enabled=!1;this.num_staged_replies=this.used_addr=this.avail_last_idx=this.avail_addr=this.desc_addr=0;this.set_size(this.size_supported)};W.prototype.is_configured=function(){return this.desc_addr&&this.avail_addr&&this.used_addr};W.prototype.enable=function(){h(this.is_configured(),
440
- "VirtQueue must be configured before enabled");this.enabled=!0};W.prototype.set_size=function(a){h(0===(a&a-1),"VirtQueue size must be power of 2 or zero");h(a<=this.size_supported,"VirtQueue size must be within supported size");this.size=a;this.mask=a-1};W.prototype.count_requests=function(){h(this.avail_addr,"VirtQueue addresses must be configured before use");return this.avail_get_idx()-this.avail_last_idx&65535};W.prototype.has_request=function(){h(this.avail_addr,"VirtQueue addresses must be configured before use");
441
- return 0!==this.count_requests()};W.prototype.pop_request=function(){h(this.avail_addr,"VirtQueue addresses must be configured before use");h(this.has_request(),"VirtQueue must not pop nonexistent request");var a=this.avail_get_entry(this.avail_last_idx);E("Pop request: avail_last_idx="+this.avail_last_idx+" desc_idx="+a,2097152);a=new qb(this,a);this.avail_last_idx=this.avail_last_idx+1&65535;return a};W.prototype.push_reply=function(a){h(this.used_addr,"VirtQueue addresses must be configured before use");
442
- h(this.num_staged_replies<this.size,"VirtQueue replies must not exceed queue size");const b=this.used_get_idx()+this.num_staged_replies&this.mask;E("Push reply: used_idx="+b+" desc_idx="+a.head_idx,2097152);this.used_set_entry(b,a.head_idx,a.length_written);this.num_staged_replies++};W.prototype.flush_replies=function(){h(this.used_addr,"VirtQueue addresses must be configured before use");if(0===this.num_staged_replies)E("flush_replies: Nothing to flush",2097152);else{E("Flushing "+this.num_staged_replies+
443
- " replies",2097152);var a=this.used_get_idx()+this.num_staged_replies&65535;this.used_set_idx(a);this.num_staged_replies=0;this.virtio.is_feature_negotiated(29)?(this.avail_get_used_event(),this.virtio.raise_irq(1)):~this.avail_get_flags()&1&&this.virtio.raise_irq(1)}};W.prototype.notify_me_after=function(a){h(0<=a,"Must skip a non-negative number of requests");a=this.avail_get_idx()+a&65535;this.used_set_avail_event(a)};W.prototype.get_descriptor=function(a,b){return{addr_low:this.cpu.read32s(a+
444
- 16*b),addr_high:this.cpu.read32s(a+16*b+4),len:this.cpu.read32s(a+16*b+8),flags:this.cpu.read16(a+16*b+12),next:this.cpu.read16(a+16*b+14)}};W.prototype.avail_get_flags=function(){return this.cpu.read16(this.avail_addr)};W.prototype.avail_get_idx=function(){return this.cpu.read16(this.avail_addr+2)};W.prototype.avail_get_entry=function(a){return this.cpu.read16(this.avail_addr+4+2*(a&this.mask))};W.prototype.avail_get_used_event=function(){return this.cpu.read16(this.avail_addr+4+2*this.size)};W.prototype.used_get_flags=
445
- function(){return this.cpu.read16(this.used_addr)};W.prototype.used_set_flags=function(a){this.cpu.write16(this.used_addr,a)};W.prototype.used_get_idx=function(){return this.cpu.read16(this.used_addr+2)};W.prototype.used_set_idx=function(a){this.cpu.write16(this.used_addr+2,a)};W.prototype.used_set_entry=function(a,b,c){this.cpu.write32(this.used_addr+4+8*a,b);this.cpu.write32(this.used_addr+8+8*a,c)};W.prototype.used_set_avail_event=function(a){this.cpu.write16(this.used_addr+4+8*this.size,a)};function qb(a,
446
- b){this.cpu=a.cpu;this.virtio=a.virtio;this.head_idx=b;this.read_buffers=[];this.length_readable=this.read_buffer_offset=this.read_buffer_idx=0;this.write_buffers=[];this.length_writable=this.length_written=this.write_buffer_offset=this.write_buffer_idx=0;let c=a.desc_addr,d=0,e=a.size,g=!1;const f=this.virtio.is_feature_negotiated(28);E("<<< Descriptor chain start",2097152);do{const l=a.get_descriptor(c,b);E("descriptor: idx="+b+" addr="+B(l.addr_high,8)+":"+B(l.addr_low,8)+" len="+B(l.len,8)+" flags="+
447
- B(l.flags,4)+" next="+B(l.next,4),2097152);if(f&&l.flags&4)l.flags&1&&E("Driver bug: has set VIRTQ_DESC_F_NEXT flag in an indirect table descriptor",2097152),c=l.addr_low,d=b=0,e=l.len/16,E("start indirect",2097152);else{if(l.flags&2)g=!0,this.write_buffers.push(l),this.length_writable+=l.len;else{if(g){E("Driver bug: readonly buffer after writeonly buffer within chain",2097152);break}this.read_buffers.push(l);this.length_readable+=l.len}d++;if(d>e){E("Driver bug: descriptor chain cycle detected",
448
- 2097152);break}if(l.flags&1)b=l.next;else break}}while(1);E("Descriptor chain end >>>",2097152)}qb.prototype.get_next_blob=function(a){let b=0,c=a.length;for(;c;){if(this.read_buffer_idx===this.read_buffers.length){E("Device<"+this.virtio.name+"> Read more than device-readable buffers has",2097152);break}var d=this.read_buffers[this.read_buffer_idx];const e=d.addr_low+this.read_buffer_offset;d=d.len-this.read_buffer_offset;d>c?(d=c,this.read_buffer_offset+=c):(this.read_buffer_idx++,this.read_buffer_offset=
449
- 0);a.set(this.cpu.read_blob(e,d),b);b+=d;c-=d}return b};qb.prototype.set_next_blob=function(a){let b=0,c=a.length;for(;c;){if(this.write_buffer_idx===this.write_buffers.length){E("Device<"+this.virtio.name+"> Write more than device-writable capacity",2097152);break}var d=this.write_buffers[this.write_buffer_idx];const e=d.addr_low+this.write_buffer_offset;d=d.len-this.write_buffer_offset;d>c?(d=c,this.write_buffer_offset+=c):(this.write_buffer_idx++,this.write_buffer_offset=0);this.cpu.write_blob(a.subarray(b,
450
- b+d),e);b+=d;c-=d}this.length_written+=b;return b};function rb(a,b){this.bus=b;this.rows=25;this.cols=80;this.ports=4;b=[{size_supported:16,notify_offset:0},{size_supported:16,notify_offset:1},{size_supported:16,notify_offset:2},{size_supported:16,notify_offset:3}];for(let c=1;c<this.ports;++c)b.push({size_supported:16,notify_offset:0}),b.push({size_supported:8,notify_offset:1});this.virtio=new fa(a,{name:"virtio-console",pci_id:96,device_id:4163,subsystem_device_id:3,common:{initial_port:47104,queues:b,
451
- features:[0,1,32],on_driver_ok:()=>{}},notification:{initial_port:47360,single_handler:!1,handlers:[()=>{},c=>{const d=this.virtio.queues[c],e=3<c?c-3>>1:0;for(;d.has_request();){const g=d.pop_request(),f=new Uint8Array(g.length_readable);g.get_next_blob(f);this.bus.send("virtio-console"+e+"-output-bytes",f);this.Ack(c,g)}},c=>{if(2!==c)h(!1,"VirtioConsole Notified for wrong queue: "+c+" (expected queue_id of 2)");else for(c=this.virtio.queues[c];c.count_requests()>c.size-2;)c.pop_request()},c=>{if(3!==
452
- c)h(!1,"VirtioConsole Notified for wrong queue: "+c+" (expected queue_id of 3)");else for(var d=this.virtio.queues[c];d.has_request();){var e=d.pop_request(),g=new Uint8Array(e.length_readable);e.get_next_blob(g);var f=p.Unmarshall(["w","h","h"],g,{offset:0});g=f[0];f=f[1];this.Ack(c,e);switch(f){case 0:for(e=0;e<this.ports;++e)this.SendEvent(e,1,0);break;case 3:this.Ack(c,e);this.SendEvent(g,4,1);this.SendName(g,"virtio-"+g);this.SendEvent(g,6,1);break;case 6:this.Ack(c,e);0===g&&this.SendWindowSize(g);
453
- break;default:h(!1," VirtioConsole received unknown event: "+f[1]);return}}}]},isr_status:{initial_port:46848},device_specific:{initial_port:46592,struct:[{bytes:2,name:"cols",read:()=>this.cols,write:()=>{}},{bytes:2,name:"rows",read:()=>this.rows,write:()=>{}},{bytes:4,name:"max_nr_ports",read:()=>this.ports,write:()=>{}},{bytes:4,name:"emerg_wr",read:()=>0,write:()=>{h(!1,"Emergency write!")}}]}});for(let c=0;c<this.ports;++c){const d=0===c?0:2*c+2;this.bus.register("virtio-console"+c+"-input-bytes",
454
- function(e){var g=this.virtio.queues[d];g.has_request()&&(g=g.pop_request(),this.Send(d,g,new Uint8Array(e)))},this);this.bus.register("virtio-console"+c+"-resize",function(e){0===c&&(this.cols=e[0],this.rows=e[1]);this.virtio.queues[2].is_configured()&&this.virtio.queues[2].has_request()&&this.SendWindowSize(c,e[0],e[1])},this)}}rb.prototype.SendWindowSize=function(a,b,c){c=c||this.rows;b=b||this.cols;const d=this.virtio.queues[2].pop_request(),e=new Uint8Array(12);p.Marshall(["w","h","h","h","h"],
455
- [a,5,0,c,b],e,0);this.Send(2,d,e)};rb.prototype.SendName=function(a,b){const c=this.virtio.queues[2].pop_request();b=(new TextEncoder).encode(b);const d=new Uint8Array(8+b.length+1);p.Marshall(["w","h","h"],[a,7,1],d,0);for(a=0;a<b.length;++a)d[a+8]=b[a];d[8+b.length]=0;this.Send(2,c,d)};rb.prototype.get_state=function(){const a=[];a[0]=this.virtio;a[1]=this.rows;a[2]=this.cols;a[3]=this.ports;return a};rb.prototype.set_state=function(a){this.virtio.set_state(a[0]);this.rows=a[1];this.cols=a[2];this.ports=
456
- a[3]};rb.prototype.reset=function(){this.virtio.reset()};rb.prototype.SendEvent=function(a,b,c){const d=this.virtio.queues[2].pop_request(),e=new Uint8Array(8);p.Marshall(["w","h","h"],[a,b,c],e,0);this.Send(2,d,e)};rb.prototype.Send=function(a,b,c){b.set_next_blob(c);this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};rb.prototype.Ack=function(a,b){b.set_next_blob(new Uint8Array(0));this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};function sb(a,b,
457
- c){this.bus=b;this.id=a.devices.net?1:0;this.status=this.pairs=1;this.preserve_mac_from_state_image=c;this.mac=new Uint8Array([0,34,21,255*Math.random()|0,255*Math.random()|0,255*Math.random()|0]);this.bus.send("net"+this.id+"-mac",Ua(this.mac));b=[];for(c=0;c<this.pairs;++c)b.push({size_supported:1024,notify_offset:0}),b.push({size_supported:1024,notify_offset:1});b.push({size_supported:16,notify_offset:2});this.virtio=new fa(a,{name:"virtio-net",pci_id:80,device_id:4161,subsystem_device_id:1,common:{initial_port:51200,
458
- queues:b,features:[5,16,22,3,17,23,32],on_driver_ok:()=>{}},notification:{initial_port:51456,single_handler:!1,handlers:[()=>{},d=>{const e=this.virtio.queues[d];for(;e.has_request();){const g=e.pop_request(),f=new Uint8Array(g.length_readable);g.get_next_blob(f);this.bus.send("net"+this.id+"-send",f.subarray(12));this.bus.send("eth-transmit-end",[f.length-12]);this.virtio.queues[d].push_reply(g)}this.virtio.queues[d].flush_replies()},d=>{if(d!==2*this.pairs)h(!1,"VirtioNet Notified for wrong queue: "+
459
- d+" (expected queue_id of 3)");else for(var e=this.virtio.queues[d];e.has_request();){const l=e.pop_request();var g=new Uint8Array(l.length_readable);l.get_next_blob(g);var f=p.Unmarshall(["b","b"],g,{offset:0});const n=f[0];f=f[1];switch(n<<8|f){case 1024:g=p.Unmarshall(["h"],g,{offset:2});h(1===g[0]);this.Send(d,l,new Uint8Array([0]));break;case 257:this.mac=g.subarray(2,8);this.Send(d,l,new Uint8Array([0]));this.bus.send("net"+this.id+"-mac",Ua(this.mac));break;default:h(!1," VirtioNet received unknown command: "+
460
- n+":"+f);this.Send(d,l,new Uint8Array([1]));return}}}]},isr_status:{initial_port:50944},device_specific:{initial_port:50688,struct:[0,1,2,3,4,5].map((d,e)=>({bytes:1,name:"mac_"+e,read:()=>this.mac[e],write:()=>{}})).concat([{bytes:2,name:"status",read:()=>this.status,write:()=>{}},{bytes:2,name:"max_pairs",read:()=>this.pairs,write:()=>{}},{bytes:2,name:"mtu",read:()=>1500,write:()=>{}}])}});this.bus.register("net"+this.id+"-receive",d=>{this.bus.send("eth-receive-end",[d.length]);const e=new Uint8Array(12+
461
- d.byteLength);(new DataView(e.buffer,e.byteOffset,e.byteLength)).setInt16(10,1);e.set(d,12);d=this.virtio.queues[0];d.has_request()?(d=d.pop_request(),d.set_next_blob(e),this.virtio.queues[0].push_reply(d),this.virtio.queues[0].flush_replies()):console.log("No buffer to write into!")},this)}sb.prototype.get_state=function(){const a=[];a[0]=this.virtio;a[1]=this.id;a[2]=this.mac;return a};sb.prototype.set_state=function(a){this.virtio.set_state(a[0]);this.id=a[1];this.preserve_mac_from_state_image&&
462
- (this.mac=a[2],this.bus.send("net"+this.id+"-mac",Ua(this.mac)))};sb.prototype.reset=function(){this.virtio.reset()};sb.prototype.Send=function(a,b,c){b.set_next_blob(c);this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};sb.prototype.Ack=function(a,b){this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};const Cb="SWAP_IN SWAP_OUT MAJFLT MINFLT MEMFREE MEMTOT AVAIL CACHES HTLB_PGALLOC HTLB_PGFAIL".split(" ");function Db(a,b){this.bus=b;this.zeroed=this.fp_cmd=
463
- this.actual=this.num_pages=0;this.virtio=new fa(a,{name:"virtio-balloon",pci_id:88,device_id:4165,subsystem_device_id:5,common:{initial_port:55296,queues:[{size_supported:32,notify_offset:0},{size_supported:32,notify_offset:0},{size_supported:2,notify_offset:1},{size_supported:64,notify_offset:2}],features:[1,3,32],on_driver_ok:()=>{E("Balloon setup",2048)}},notification:{initial_port:55552,single_handler:!1,handlers:[c=>{const d=this.virtio.queues[c];for(;d.has_request();){var e=d.pop_request();
464
- const g=new Uint8Array(e.length_readable);e.get_next_blob(g);this.virtio.queues[c].push_reply(e);e=g.byteLength/4;this.actual+=0===c?e:-e}this.virtio.queues[c].flush_replies()},c=>{var d=this.virtio.queues[c];if(d.has_request()){d=d.pop_request();const e=new Uint8Array(d.length_readable);d.get_next_blob(e);let g={};for(let f=0;f<d.length_readable;f+=10){let [l,n]=p.Unmarshall(["h","d"],e,{offset:f});g[Cb[l]]=n}this.virtio.queues[c].push_reply(d);this.stats_cb&&this.stats_cb(g)}},c=>{const d=this.virtio.queues[c];
465
- for(;d.has_request();){const g=d.pop_request();if(0<g.length_readable){var e=new Uint8Array(g.length_readable);g.get_next_blob(e);[e]=p.Unmarshall(["w"],e,{offset:0});0===e&&(this.free_cb&&this.free_cb(this.zeroed),1<this.fp_cmd&&(this.fp_cmd=1),this.virtio.notify_config_changes())}if(0<g.length_writable)for(new Uint8Array(0),e=0;e<g.write_buffers.length;++e){let f=g.write_buffers[e];this.zeroed+=f.len;this.virtio.cpu.zero_memory(f.addr_low,f.len)}this.virtio.queues[c].push_reply(g)}this.virtio.queues[c].flush_replies()}]},
466
- isr_status:{initial_port:55040},device_specific:{initial_port:54784,struct:[{bytes:4,name:"num_pages",read:()=>this.num_pages,write:()=>{}},{bytes:4,name:"actual",read:()=>this.actual,write:()=>{}},{bytes:4,name:"free_page_hint_cmd_id",read:()=>this.fp_cmd,write:()=>{}}]}})}Db.prototype.Inflate=function(a){this.num_pages+=a;this.virtio.notify_config_changes()};Db.prototype.Deflate=function(a){this.num_pages-=a;this.virtio.notify_config_changes()};Db.prototype.Cleanup=function(a){this.fp_cmd=2;this.free_cb=
467
- a;this.zeroed=0;this.virtio.notify_config_changes()};Db.prototype.get_state=function(){const a=[];a[0]=this.virtio;a[1]=this.num_pages;a[2]=this.actual;return a};Db.prototype.set_state=function(a){this.virtio.set_state(a[0]);this.num_pages=a[1];this.actual=a[2]};Db.prototype.GetStats=function(a){this.stats_cb=a;for(a=this.virtio.queues[2];a.has_request();){const b=a.pop_request();this.virtio.queues[2].push_reply(b)}this.virtio.queues[2].flush_replies()};Db.prototype.Reset=function(){};var Eb={};function Fb(){this.listeners=
468
- {};this.pair=void 0}Fb.prototype.register=function(a,b,c){var d=this.listeners[a];void 0===d&&(d=this.listeners[a]=[]);d.push({fn:b,this_value:c})};Fb.prototype.unregister=function(a,b){var c=this.listeners[a];void 0!==c&&(this.listeners[a]=c.filter(function(d){return d.fn!==b}))};Fb.prototype.send=function(a,b){if(this.pair&&(a=this.pair.listeners[a],void 0!==a))for(var c=0;c<a.length;c++){var d=a[c];d.fn.call(d.this_value,b)}};Fb.prototype.send_async=function(a,b){h(1===arguments.length||2===arguments.length);
469
- setTimeout(this.send.bind(this,a,b),0)};Eb.create=function(){var a=new Fb,b=new Fb;a.pair=b;b.pair=a;return[a,b]};var E=function(){var a=ba.reduce(function(d,e){d[e[0]]=e[1];return d},{}),b="",c=0;return function(d,e){e=e||1;if(e&ma){d="["+k.pads(a[e]||"",4)+"] "+d;if(d===b&&(c++,2048>c))return;e=new Date;e=k.pad0(e.getHours(),2)+":"+k.pad0(e.getMinutes(),2)+":"+k.pad0(e.getSeconds(),2)+"+"+k.pad0(e.getMilliseconds(),3)+" ";c&&(1===c?console.log(e+b):console.log("Previous message repeated "+c+" times"),
470
- c=0);console.log(e+d);b=d}}}();function h(a,b){if(!a){debugger;console.trace();if(b)throw"Assert failed: "+b;throw"Assert failed";}}function G(a,b,c){this.stop_idling=c;this.wm=b;this.wasm_patch();this.create_jit_imports();this.wasm_memory=b=this.wm.exports.memory;this.memory_size=k.view(Uint32Array,b,812,1);this.mem8=new Uint8Array(0);this.mem32s=new Int32Array(this.mem8.buffer);this.segment_is_null=k.view(Uint8Array,b,724,8);this.segment_offsets=k.view(Int32Array,b,736,8);this.segment_limits=k.view(Uint32Array,
471
- b,768,8);this.segment_access_bytes=k.view(Uint8Array,b,512,8);this.protected_mode=k.view(Int32Array,b,800,1);this.idtr_size=k.view(Int32Array,b,564,1);this.idtr_offset=k.view(Int32Array,b,568,1);this.gdtr_size=k.view(Int32Array,b,572,1);this.gdtr_offset=k.view(Int32Array,b,576,1);this.tss_size_32=k.view(Int32Array,b,1128,1);this.page_fault=k.view(Uint32Array,b,540,8);this.cr=k.view(Int32Array,b,580,8);this.cpl=k.view(Uint8Array,b,612,1);this.is_32=k.view(Int32Array,b,804,1);this.stack_size_32=k.view(Int32Array,
472
- b,808,1);this.in_hlt=k.view(Uint8Array,b,616,1);this.last_virt_eip=k.view(Int32Array,b,620,1);this.eip_phys=k.view(Int32Array,b,624,1);this.sysenter_cs=k.view(Int32Array,b,636,1);this.sysenter_esp=k.view(Int32Array,b,640,1);this.sysenter_eip=k.view(Int32Array,b,644,1);this.prefixes=k.view(Int32Array,b,648,1);this.flags=k.view(Int32Array,b,120,1);this.flags_changed=k.view(Int32Array,b,100,1);this.last_op_size=k.view(Int32Array,b,96,1);this.last_op1=k.view(Int32Array,b,104,1);this.last_result=k.view(Int32Array,
473
- b,112,1);this.current_tsc=k.view(Uint32Array,b,960,2);this.devices={};this.instruction_pointer=k.view(Int32Array,b,556,1);this.previous_ip=k.view(Int32Array,b,560,1);this.apic_enabled=k.view(Uint8Array,b,548,1);this.acpi_enabled=k.view(Uint8Array,b,552,1);this.memory_map_read8=[];this.memory_map_write8=[];this.memory_map_read32=[];this.memory_map_write32=[];this.bios={main:null,vga:null};this.instruction_counter=k.view(Uint32Array,b,664,1);this.reg32=k.view(Int32Array,b,64,8);this.fpu_st=k.view(Int32Array,
474
- b,1152,32);this.fpu_stack_empty=k.view(Uint8Array,b,816,1);this.fpu_stack_empty[0]=255;this.fpu_stack_ptr=k.view(Uint8Array,b,1032,1);this.fpu_stack_ptr[0]=0;this.fpu_control_word=k.view(Uint16Array,b,1036,1);this.fpu_control_word[0]=895;this.fpu_status_word=k.view(Uint16Array,b,1040,1);this.fpu_status_word[0]=0;this.fpu_ip=k.view(Int32Array,b,1048,1);this.fpu_ip[0]=0;this.fpu_ip_selector=k.view(Int32Array,b,1052,1);this.fpu_ip_selector[0]=0;this.fpu_opcode=k.view(Int32Array,b,1044,1);this.fpu_opcode[0]=
475
- 0;this.fpu_dp=k.view(Int32Array,b,1056,1);this.fpu_dp[0]=0;this.fpu_dp_selector=k.view(Int32Array,b,1060,1);this.fpu_dp_selector[0]=0;this.reg_xmm32s=k.view(Int32Array,b,832,32);this.mxcsr=k.view(Int32Array,b,824,1);this.sreg=k.view(Uint16Array,b,668,8);this.dreg=k.view(Int32Array,b,684,8);this.reg_pdpte=k.view(Int32Array,b,968,8);this.svga_dirty_bitmap_min_offset=k.view(Uint32Array,b,716,1);this.svga_dirty_bitmap_max_offset=k.view(Uint32Array,b,720,1);this.fw_value=[];this.fw_pointer=0;this.option_roms=
476
- [];this.io=void 0;this.bus=a;this.set_tsc(0,0);this.debug_init();this.seen_code={};this.seen_code_uncompiled={}}G.prototype.clear_opstats=function(){(new Uint8Array(this.wasm_memory.buffer,32768,131072)).fill(0);this.wm.exports.profiler_init()};G.prototype.create_jit_imports=function(){const a=Object.create(null);a.m=this.wm.exports.memory;for(const b of Object.keys(this.wm.exports))b.startsWith("_")||b.startsWith("zstd")||b.endsWith("_js")||(a[b]=this.wm.exports[b]);this.jit_imports=a};G.prototype.wasm_patch=
477
- function(){const a=c=>this.wm.exports[c],b=c=>{const d=a(c);console.assert(d,"Missing import: "+c);return d};this.reset_cpu=b("reset_cpu");this.getiopl=b("getiopl");this.get_eflags=b("get_eflags");this.handle_irqs=b("handle_irqs");this.main_loop=b("main_loop");this.set_jit_config=b("set_jit_config");this.read8=b("read8");this.read16=b("read16");this.read32s=b("read32s");this.write8=b("write8");this.write16=b("write16");this.write32=b("write32");this.in_mapped_range=b("in_mapped_range");this.fpu_load_tag_word=
478
- b("fpu_load_tag_word");this.fpu_load_status_word=b("fpu_load_status_word");this.fpu_get_sti_f64=b("fpu_get_sti_f64");this.translate_address_system_read=b("translate_address_system_read_js");this.get_seg_cs=b("get_seg_cs");this.get_real_eip=b("get_real_eip");this.clear_tlb=b("clear_tlb");this.full_clear_tlb=b("full_clear_tlb");this.update_state_flags=b("update_state_flags");this.set_tsc=b("set_tsc");this.store_current_tsc=b("store_current_tsc");this.set_cpuid_level=b("set_cpuid_level");this.pic_set_irq=
479
- b("pic_set_irq");this.pic_clear_irq=b("pic_clear_irq");this.jit_force_generate_unsafe=a("jit_force_generate_unsafe");this.jit_clear_cache=b("jit_clear_cache_js");this.jit_dirty_cache=b("jit_dirty_cache");this.codegen_finalize_finished=b("codegen_finalize_finished");this.allocate_memory=b("allocate_memory");this.zero_memory=b("zero_memory");this.is_memory_zeroed=b("is_memory_zeroed");this.svga_allocate_memory=b("svga_allocate_memory");this.svga_allocate_dest_buffer=b("svga_allocate_dest_buffer");this.svga_fill_pixel_buffer=
480
- b("svga_fill_pixel_buffer");this.svga_mark_dirty=b("svga_mark_dirty");this.get_pic_addr_master=b("get_pic_addr_master");this.get_pic_addr_slave=b("get_pic_addr_slave");this.zstd_create_ctx=b("zstd_create_ctx");this.zstd_get_src_ptr=b("zstd_get_src_ptr");this.zstd_free_ctx=b("zstd_free_ctx");this.zstd_read=b("zstd_read");this.zstd_read_free=b("zstd_read_free");this.port20_read=b("port20_read");this.port21_read=b("port21_read");this.portA0_read=b("portA0_read");this.portA1_read=b("portA1_read");this.port20_write=
481
- b("port20_write");this.port21_write=b("port21_write");this.portA0_write=b("portA0_write");this.portA1_write=b("portA1_write");this.port4D0_read=b("port4D0_read");this.port4D1_read=b("port4D1_read");this.port4D0_write=b("port4D0_write");this.port4D1_write=b("port4D1_write")};G.prototype.jit_force_generate=function(a){this.jit_force_generate_unsafe?this.jit_force_generate_unsafe(a):h(!1,"Not supported in this wasm build: jit_force_generate_unsafe")};G.prototype.jit_clear_func=function(a){h(0<=a&&900>
482
- a);this.wm.wasm_table.set(a+1024,null)};G.prototype.jit_clear_all_funcs=function(){const a=this.wm.wasm_table;for(let b=0;900>b;b++)a.set(1024+b,null)};G.prototype.get_state=function(){var a=[];a[0]=this.memory_size[0];a[1]=new Uint8Array([...this.segment_is_null,...this.segment_access_bytes]);a[2]=this.segment_offsets;a[3]=this.segment_limits;a[4]=this.protected_mode[0];a[5]=this.idtr_offset[0];a[6]=this.idtr_size[0];a[7]=this.gdtr_offset[0];a[8]=this.gdtr_size[0];a[9]=this.page_fault[0];a[10]=this.cr;
483
- a[11]=this.cpl[0];a[13]=this.is_32[0];a[16]=this.stack_size_32[0];a[17]=this.in_hlt[0];a[18]=this.last_virt_eip[0];a[19]=this.eip_phys[0];a[22]=this.sysenter_cs[0];a[23]=this.sysenter_eip[0];a[24]=this.sysenter_esp[0];a[25]=this.prefixes[0];a[26]=this.flags[0];a[27]=this.flags_changed[0];a[28]=this.last_op1[0];a[30]=this.last_op_size[0];a[37]=this.instruction_pointer[0];a[38]=this.previous_ip[0];a[39]=this.reg32;a[40]=this.sreg;a[41]=this.dreg;a[42]=this.reg_pdpte;this.store_current_tsc();a[43]=this.current_tsc;
484
- a[45]=this.devices.virtio_9p;a[46]=this.devices.apic;a[47]=this.devices.rtc;a[48]=this.devices.pci;a[49]=this.devices.dma;a[50]=this.devices.acpi;a[52]=this.devices.vga;a[53]=this.devices.ps2;a[54]=this.devices.uart0;a[55]=this.devices.fdc;a[56]=this.devices.cdrom;a[57]=this.devices.hda;a[58]=this.devices.pit;a[59]=this.devices.net;a[60]=this.get_state_pic();a[61]=this.devices.sb16;a[62]=this.fw_value;a[63]=this.devices.ioapic;a[64]=this.tss_size_32[0];a[66]=this.reg_xmm32s;a[67]=this.fpu_st;a[68]=
485
- this.fpu_stack_empty[0];a[69]=this.fpu_stack_ptr[0];a[70]=this.fpu_control_word[0];a[71]=this.fpu_ip[0];a[72]=this.fpu_ip_selector[0];a[73]=this.fpu_dp[0];a[74]=this.fpu_dp_selector[0];a[75]=this.fpu_opcode[0];const {packed_memory:b,bitmap:c}=this.pack_memory();a[77]=b;a[78]=new Uint8Array(c.get_buffer());a[79]=this.devices.uart1;a[80]=this.devices.uart2;a[81]=this.devices.uart3;a[82]=this.devices.virtio_console;a[83]=this.devices.virtio_net;a[84]=this.devices.virtio_balloon;return a};G.prototype.get_state_pic=
486
- function(){const a=new Uint8Array(this.wasm_memory.buffer,this.get_pic_addr_master(),13),b=new Uint8Array(this.wasm_memory.buffer,this.get_pic_addr_slave(),13),c=[],d=[];c[0]=a[0];c[1]=a[1];c[2]=a[2];c[3]=a[3];c[4]=a[4];c[5]=d;c[6]=a[6];c[7]=a[7];c[8]=a[8];c[9]=a[9];c[10]=a[10];c[11]=a[11];c[12]=a[12];d[0]=b[0];d[1]=b[1];d[2]=b[2];d[3]=b[3];d[4]=b[4];d[5]=null;d[6]=b[6];d[7]=b[7];d[8]=b[8];d[9]=b[9];d[10]=b[10];d[11]=b[11];d[12]=b[12];return c};G.prototype.set_state=function(a){this.memory_size[0]=
487
- a[0];this.mem8.length!==this.memory_size[0]&&console.warn("Note: Memory size mismatch. we="+this.mem8.length+" state="+this.memory_size[0]);8===a[1].length?(this.segment_is_null.set(a[1]),this.segment_access_bytes.fill(242),this.segment_access_bytes[1]=250):16===a[1].length?(this.segment_is_null.set(a[1].subarray(0,8)),this.segment_access_bytes.set(a[1].subarray(8,16))):h("Unexpected cpu segment state length:"+a[1].length);this.segment_offsets.set(a[2]);this.segment_limits.set(a[3]);this.protected_mode[0]=
488
- a[4];this.idtr_offset[0]=a[5];this.idtr_size[0]=a[6];this.gdtr_offset[0]=a[7];this.gdtr_size[0]=a[8];this.page_fault[0]=a[9];this.cr.set(a[10]);this.cpl[0]=a[11];this.is_32[0]=a[13];this.stack_size_32[0]=a[16];this.in_hlt[0]=a[17];this.last_virt_eip[0]=a[18];this.eip_phys[0]=a[19];this.sysenter_cs[0]=a[22];this.sysenter_eip[0]=a[23];this.sysenter_esp[0]=a[24];this.prefixes[0]=a[25];this.flags[0]=a[26];this.flags_changed[0]=a[27];this.last_op1[0]=a[28];this.last_op_size[0]=a[30];this.instruction_pointer[0]=
489
- a[37];this.previous_ip[0]=a[38];this.reg32.set(a[39]);this.sreg.set(a[40]);this.dreg.set(a[41]);a[42]&&this.reg_pdpte.set(a[42]);this.set_tsc(a[43][0],a[43][1]);this.devices.virtio_9p&&this.devices.virtio_9p.set_state(a[45]);this.devices.apic&&this.devices.apic.set_state(a[46]);this.devices.rtc&&this.devices.rtc.set_state(a[47]);this.devices.pci&&this.devices.pci.set_state(a[48]);this.devices.dma&&this.devices.dma.set_state(a[49]);this.devices.acpi&&this.devices.acpi.set_state(a[50]);this.devices.vga&&
490
- this.devices.vga.set_state(a[52]);this.devices.ps2&&this.devices.ps2.set_state(a[53]);this.devices.uart0&&this.devices.uart0.set_state(a[54]);this.devices.fdc&&this.devices.fdc.set_state(a[55]);this.devices.cdrom&&this.devices.cdrom.set_state(a[56]);this.devices.hda&&this.devices.hda.set_state(a[57]);this.devices.pit&&this.devices.pit.set_state(a[58]);this.devices.net&&this.devices.net.set_state(a[59]);this.set_state_pic(a[60]);this.devices.sb16&&this.devices.sb16.set_state(a[61]);this.devices.uart1&&
491
- this.devices.uart1.set_state(a[79]);this.devices.uart2&&this.devices.uart2.set_state(a[80]);this.devices.uart3&&this.devices.uart3.set_state(a[81]);this.devices.virtio_console&&this.devices.virtio_console.set_state(a[82]);this.devices.virtio_net&&this.devices.virtio_net.set_state(a[83]);this.devices.virtio_balloon&&this.devices.virtio_balloon.set_state(a[84]);this.fw_value=a[62];this.devices.ioapic&&this.devices.ioapic.set_state(a[63]);this.tss_size_32[0]=a[64];this.reg_xmm32s.set(a[66]);this.fpu_st.set(a[67]);
492
- this.fpu_stack_empty[0]=a[68];this.fpu_stack_ptr[0]=a[69];this.fpu_control_word[0]=a[70];this.fpu_ip[0]=a[71];this.fpu_ip_selector[0]=a[72];this.fpu_dp[0]=a[73];this.fpu_dp_selector[0]=a[74];this.fpu_opcode[0]=a[75];const b=new k.Bitmap(a[78].buffer);this.unpack_memory(b,a[77]);this.update_state_flags();this.full_clear_tlb();this.jit_clear_cache()};G.prototype.set_state_pic=function(a){const b=new Uint8Array(this.wasm_memory.buffer,this.get_pic_addr_master(),13),c=new Uint8Array(this.wasm_memory.buffer,
493
- this.get_pic_addr_slave(),13);b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];const d=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];c[0]=d[0];c[1]=d[1];c[2]=d[2];c[3]=d[3];c[4]=d[4];c[6]=d[6];c[7]=d[7];c[8]=d[8];c[9]=d[9];c[10]=d[10];c[11]=d[11];c[12]=d[12]};G.prototype.pack_memory=function(){h(0===(this.mem8.length&4095));var a=this.mem8.length>>12,b=[];for(var c=0;c<a;c++)this.is_memory_zeroed(c<<12,4096)||b.push(c);a=new k.Bitmap(a);c=new Uint8Array(b.length<<
494
- 12);for(const [d,e]of b.entries())a.set(e,1),b=e<<12,b=this.mem8.subarray(b,b+4096),c.set(b,d<<12);return{bitmap:a,packed_memory:c}};G.prototype.unpack_memory=function(a,b){this.zero_memory(0,this.memory_size[0]);const c=this.memory_size[0]>>12;let d=0;for(let g=0;g<c;g++)if(a.get(g)){var e=d<<12;e=b.subarray(e,e+4096);this.mem8.set(e,g<<12);d++}};G.prototype.reboot_internal=function(){this.reset_cpu();this.fw_value=[];this.devices.virtio_9p&&this.devices.virtio_9p.reset();this.devices.virtio_console&&
495
- this.devices.virtio_console.reset();this.devices.virtio_net&&this.devices.virtio_net.reset();this.load_bios()};G.prototype.reset_memory=function(){this.mem8.fill(0)};G.prototype.create_memory=function(a,b){a<b?(a=b,E("Rounding memory size up to "+a,2)):0>(a|0)&&(a=Math.pow(2,31)-131072,E("Rounding memory size down to "+a,2));a=(a-1|131071)+1|0;h(0<(a|0));h(0===(a&131071));console.assert(0===this.memory_size[0],"Expected uninitialised memory");this.memory_size[0]=a;b=this.allocate_memory(a);this.mem8=
496
- k.view(Uint8Array,this.wasm_memory,b,a);this.mem32s=k.view(Uint32Array,this.wasm_memory,b,a>>2)};G.prototype.init=function(a,b){this.create_memory(a.memory_size||67108864,a.initrd?67108864:1048576);a.disable_jit&&this.set_jit_config(0,1);a.cpuid_level&&this.set_cpuid_level(a.cpuid_level);this.acpi_enabled[0]=+a.acpi;this.reset_cpu();var c=new pa(this);this.io=c;this.bios.main=a.bios;this.bios.vga=a.vga_bios;this.load_bios();if(a.bzimage){const e=Gb(this.mem8,a.bzimage,a.initrd,a.cmdline||"");e&&this.option_roms.push(e)}c.register_read(179,
497
- this,function(){E("port 0xB3 read");return 0});var d=0;c.register_read(146,this,function(){return d});c.register_write(146,this,function(e){d=e});c.register_read(1297,this,function(){if(this.fw_pointer<this.fw_value.length)return this.fw_value[this.fw_pointer++];h(!1,"config port: Read past value");return 0});c.register_write(1296,this,void 0,function(e){function g(n){return new Uint8Array(Int32Array.of(n).buffer)}function f(n){return n>>8|n<<8&65280}function l(n){return n<<24|n<<8&16711680|n>>8&
498
- 65280|n>>>24}E("bios config port, index="+B(e));this.fw_pointer=0;if(0===e)this.fw_value=g(1431127377);else if(1===e)this.fw_value=g(0);else if(3===e)this.fw_value=g(this.memory_size[0]);else if(5===e)this.fw_value=g(1);else if(15===e)this.fw_value=g(1);else if(13===e)this.fw_value=new Uint8Array(16);else if(25===e){e=new Int32Array(4+64*this.option_roms.length);const n=new Uint8Array(e.buffer);e[0]=l(this.option_roms.length);for(let m=0;m<this.option_roms.length;m++){const {name:q,data:r}=this.option_roms[m],
499
- t=4+64*m;h(65536>49152+m);e[t+0>>2]=l(r.length);e[t+4>>2]=f(49152+m);h(56>q.length);for(let v=0;v<q.length;v++)n[t+8+v]=q.charCodeAt(v)}this.fw_value=n}else 32768<=e&&49152>e?this.fw_value=g(0):49152<=e&&e-49152<this.option_roms.length?this.fw_value=this.option_roms[e-49152].data:(E("Warning: Unimplemented fw index: "+B(e)),this.fw_value=g(0))});c.register_write(128,this,function(){});c.register_read(128,this,function(){return 255});c.register_write(233,this,function(){});c.register_read(32,this,
500
- this.port20_read);c.register_read(33,this,this.port21_read);c.register_read(160,this,this.portA0_read);c.register_read(161,this,this.portA1_read);c.register_write(32,this,this.port20_write);c.register_write(33,this,this.port21_write);c.register_write(160,this,this.portA0_write);c.register_write(161,this,this.portA1_write);c.register_read(1232,this,this.port4D0_read);c.register_read(1233,this,this.port4D1_read);c.register_write(1232,this,this.port4D0_write);c.register_write(1233,this,this.port4D1_write);
501
- this.devices={};a.load_devices&&(this.devices.pci=new za(this),this.acpi_enabled[0]&&(this.devices.ioapic=new Na(this),this.devices.apic=new Ma(this),this.devices.acpi=new Ha(this)),this.devices.rtc=new Fa(this),this.fill_cmos(this.devices.rtc,a),this.devices.dma=new O(this),this.devices.vga=new P(this,b,a.screen,a.vga_memory_size||8388608),this.devices.ps2=new Ea(this,b),this.devices.uart0=new Ga(this,1016,b),a.uart1&&(this.devices.uart1=new Ga(this,760,b)),a.uart2&&(this.devices.uart2=new Ga(this,
502
- 1E3,b)),a.uart3&&(this.devices.uart3=new Ga(this,744,b)),this.devices.fdc=new N(this,a.fda,a.fdb),c=0,a.hda&&(this.devices.hda=new ya(this,a.hda,a.hdb,!1,c++,b)),a.cdrom&&(this.devices.cdrom=new ya(this,a.cdrom,void 0,!0,c++,b)),this.devices.pit=new Aa(this,b),"ne2k"===a.net_device.type?this.devices.net=new Va(this,b,a.preserve_mac_from_state_image,a.mac_address_translation):"virtio"===a.net_device.type&&(this.devices.virtio_net=new sb(this,b,a.preserve_mac_from_state_image)),a.fs9p&&(this.devices.virtio_9p=
503
- new ea(a.fs9p,this,b)),a.virtio_console&&(this.devices.virtio_console=new rb(this,b)),a.virtio_balloon&&(this.devices.virtio_balloon=new Db(this,b)),this.devices.sb16=new Q(this,b));a.multiboot&&(E("loading multiboot",2),a=this.load_multiboot_option_rom(a.multiboot,a.initrd,a.cmdline))&&(this.bios.main?(E("adding option rom for multiboot",2),this.option_roms.push(a)):(E("loaded multiboot without bios",2),this.reg32[0]=this.io.port_read32(244)));this.debug.init()};G.prototype.load_multiboot=function(a){this.bios.main&&
504
- h(!1,"load_multiboot not supported with BIOS");this.load_multiboot_option_rom(a,void 0,"")&&(E("loaded multiboot",2),this.reg32[0]=this.io.port_read32(244))};G.prototype.load_multiboot_option_rom=function(a,b,c){E("Trying multiboot from buffer of size "+a.byteLength,2);if(8192>a.byteLength){var d=new Int32Array(2048);(new Uint8Array(d.buffer)).set(new Uint8Array(a))}else d=new Int32Array(a,0,2048);for(var e=0;8192>e;e+=4){if(464367618===d[e>>2]){var g=d[e+4>>2];if(464367618+g+d[e+8>>2]|0){E("Multiboot checksum check failed",
505
- 2);continue}}else continue;E("Multiboot magic found, flags: "+B(g>>>0,8),2);h(0===(g&-65540),"TODO");var f=this;this.io.register_read(244,this,function(){return 0},function(){return 0},function(){var q=31860,r=0;if(c){r|=4;f.write32(31760,q);c+="\x00";var t=(new TextEncoder).encode(c);f.write_blob(t,q);q+=t.length}if(g&2){r|=64;t=0;f.write32(31788,0);f.write32(31792,q);var v=0;let x=!1;for(let H=0;4294967296>H;H+=131072)x&&void 0!==f.memory_map_read8[H>>>17]?(f.write32(q,20),f.write32(q+4,v),f.write32(q+
506
- 8,0),f.write32(q+12,H-v),f.write32(q+16,0),f.write32(q+20,1),q+=24,t+=24,x=!1):x||void 0!==f.memory_map_read8[H>>>17]||(v=H,x=!0);h(!x,"top of 4GB shouldn't have memory");f.write32(31788,t)}f.write32(31744,r);t=r=0;if(g&65536){E("Multiboot specifies its own address table",2);var y=d[e+12>>2];var D=d[e+16>>2];var u=d[e+20>>2];var A=d[e+24>>2];r=d[e+28>>2];E("header="+B(y,8)+" load="+B(D,8)+" load_end="+B(u,8)+" bss_end="+B(A,8)+" entry="+B(r,8));h(D<=y);y=e-(y-D);0===u?t=void 0:(h(u>=D),t=u-D);y=new Uint8Array(a,
507
- y,t);f.write_blob(y,D);r|=0;t=Math.max(u,A)}else if(1179403647===d[0]){E("Multiboot image is in elf format",2);v=new DataView(a);const [x,H]=Hb(v,Ib);console.assert(52===H);for(y of Object.keys(x))E(y+": 0x"+(x[y].toString(16)>>>0));console.assert(1179403647===x.magic,"Bad magic");console.assert(1===x.class,"Unimplemented: 64 bit elf");console.assert(1===x.data,"Unimplemented: big endian");console.assert(1===x.version0,"Bad version0");console.assert(2===x.type,"Unimplemented type");console.assert(1===
508
- x.version1,"Bad version1");console.assert(52===x.ehsize,"Bad header size");console.assert(32===x.phentsize,"Bad program header size");console.assert(40===x.shentsize,"Bad section header size");[r]=Jb(new DataView(v.buffer,v.byteOffset+x.phoff,x.phentsize*x.phnum),Kb,x.phnum);[y]=Jb(new DataView(v.buffer,v.byteOffset+x.shoff,x.shentsize*x.shnum),Lb,x.shnum);if(ma){console.log("%d program headers:",r.length);for(A of r)console.log("type=%s offset=%s vaddr=%s paddr=%s filesz=%s memsz=%s flags=%s align=%s",
509
- A.type.toString(16),A.offset.toString(16),A.vaddr.toString(16),A.paddr.toString(16),A.filesz.toString(16),A.memsz.toString(16),A.flags.toString(16),A.align.toString(16));console.log("%d section headers:",y.length);for(D of y)console.log("name=%s type=%s flags=%s addr=%s offset=%s size=%s link=%s info=%s addralign=%s entsize=%s",D.name.toString(16),D.type.toString(16),D.flags.toString(16),D.addr.toString(16),D.offset.toString(16),D.size.toString(16),D.link.toString(16),D.info.toString(16),D.addralign.toString(16),
510
- D.entsize.toString(16))}A=x;D=r;r=A.entry;for(u of D)0!==u.type&&(1===u.type?(h(u.filesz<=u.memsz),u.paddr+u.memsz<f.memory_size[0]?(u.filesz&&(D=new Uint8Array(a,u.offset,u.filesz),f.write_blob(D,u.paddr)),t=Math.max(t,u.paddr+u.memsz),E("prg load "+u.paddr+" to "+(u.paddr+u.memsz),2),r===A.entry&&u.vaddr<=r&&u.vaddr+u.memsz>r&&(r=r-u.vaddr+u.paddr)):E("Warning: Skipped loading section, paddr="+B(u.paddr)+" memsz="+u.memsz,2)):2===u.type||3===u.type||4===u.type||6===u.type||7===u.type||1685382480===
511
- u.type||1685382481===u.type||1685382482===u.type||1685382483===u.type?E("skip load type "+u.type+" "+u.paddr+" to "+(u.paddr+u.memsz),2):h(!1,"unimplemented elf section type: "+B(u.type)))}else h(!1,"Not a bootable multiboot format");b&&(f.write32(31764,1),f.write32(31768,q),u=t,0!==(u&4095)&&(u=(u&-4096)+4096),E("ramdisk address "+u),A=u+b.byteLength,f.write32(q,u),f.write32(q+4,A),f.write32(q+8,0),f.write32(q+12,0),h(A<f.memory_size[0]),f.write_blob(new Uint8Array(b),u));f.reg32[3]=31744;f.cr[0]=
512
- 1;f.protected_mode[0]=1;f.flags[0]=2;f.is_32[0]=1;f.stack_size_32[0]=1;for(q=0;6>q;q++)f.segment_is_null[q]=0,f.segment_offsets[q]=0,f.segment_limits[q]=4294967295,f.sreg[q]=45058;f.instruction_pointer[0]=f.get_seg_cs()+r|0;f.update_state_flags();E("Starting multiboot kernel at:",2);f.debug.dump_state();f.debug.dump_regs();return 732803074});this.io.register_write_consecutive(244,this,function(q){console.log("Test exited with code "+B(q,2));throw"HALT";},function(){},function(){},function(){});for(let q=
513
- 0;15>=q;q++){function r(t){E("kvm-unit-test: Set irq "+B(q)+" to "+B(t,2));t?this.device_raise_irq(q):this.device_lower_irq(q)}this.io.register_write(8192+q,this,r,r,r)}const n=new Uint8Array(512);(new Uint16Array(n.buffer))[0]=43605;n[2]=1;var l=3;n[l++]=102;n[l++]=229;n[l++]=244;h(512>l);let m=n[l]=0;for(let q=0;q<n.length;q++)m+=n[q];n[l]=-m;return{name:"genroms/multiboot.bin",data:n}}E("Multiboot header not found",2)};G.prototype.fill_cmos=function(a,b){var c=b.boot_order||291;a.cmos_write(56,
514
- 1|c>>4&240);a.cmos_write(61,c&255);a.cmos_write(21,128);a.cmos_write(22,2);c=0;1048576<=this.memory_size[0]&&(c=this.memory_size[0]-1048576>>10,c=Math.min(c,65535));a.cmos_write(23,c&255);a.cmos_write(24,c>>8&255);a.cmos_write(48,c&255);a.cmos_write(49,c>>8&255);c=0;16777216<=this.memory_size[0]&&(c=this.memory_size[0]-16777216>>16,c=Math.min(c,65535));a.cmos_write(52,c&255);a.cmos_write(53,c>>8&255);a.cmos_write(91,0);a.cmos_write(92,0);a.cmos_write(93,0);a.cmos_write(20,47);a.cmos_write(95,0);b.fastboot&&
515
- a.cmos_write(63,1)};G.prototype.load_bios=function(){var a=this.bios.main,b=this.bios.vga;if(a){h(a instanceof ArrayBuffer);var c=new Uint8Array(a);this.write_blob(c,1048576-a.byteLength);if(b){h(b instanceof ArrayBuffer);var d=new Uint8Array(b);this.write_blob(d,786432);this.io.mmap_register(4272947200,1048576,function(e){e=e-4272947200|0;return e<d.length?d[e]:0},function(){h(!1,"Unexpected write to VGA rom")})}else E("Warning: No VGA BIOS");this.io.mmap_register(4293918720,1048576,function(e){return this.mem8[e&
516
- 1048575]}.bind(this),function(e,g){this.mem8[e&1048575]=g}.bind(this))}else E("Warning: No BIOS")};G.prototype.codegen_finalize=function(a,b,c,d,e){d>>>=0;e>>>=0;h(0<=a&&900>a);const g=new Uint8Array(this.wasm_memory.buffer,d,e);this.seen_code[b]=(this.seen_code[b]||0)+1;this.test_hook_did_generate_wasm&&this.test_hook_did_generate_wasm(g);WebAssembly.instantiate(g,{e:this.jit_imports}).then(f=>{this.wm.wasm_table.set(a+1024,f.instance.exports.f);this.codegen_finalize_finished(a,b,c);this.test_hook_did_finalize_wasm&&
517
- this.test_hook_did_finalize_wasm(g)}).catch(f=>{console.log(f);debugger;throw f;})};G.prototype.log_uncompiled_code=function(){};G.prototype.dump_function_code=function(){};G.prototype.run_hardware_timers=function(a,b){const c=this.devices.pit.timer(b,!1),d=this.devices.rtc.timer(b,!1);let e=100,g=100;a&&(e=this.devices.acpi.timer(b),g=this.devices.apic.timer(b));return Math.min(c,d,e,g)};G.prototype.device_raise_irq=function(a){h(1===arguments.length);this.pic_set_irq(a);this.devices.ioapic&&this.devices.ioapic.set_irq(a)};
518
- G.prototype.device_lower_irq=function(a){this.pic_clear_irq(a);this.devices.ioapic&&this.devices.ioapic.clear_irq(a)};G.prototype.debug_init=function(){function a(m){for(var q=e.protected_mode[0]?"prot":"real",r=e.get_eflags(),t=e.getiopl(),v=e.cpl[0],y=B(e.sreg[1],4)+":"+B(e.get_real_eip()>>>0,8),D=B(e.sreg[2],4)+":"+B(e.reg32[0]>>>0,8),u=e.is_32[0]?"32":"16",A=e.flags[0]&512?1:0,x={[1]:"c",[4]:"p",[16]:"a",[64]:"z",[128]:"s",[256]:"t",[512]:"i",[1024]:"d",[2048]:"o"},H="",L=0;16>L;L++)x[1<<L]&&
519
- (H=r&1<<L?H+x[1<<L]:H+" ");return"mode="+q+"/"+u+" paging="+ +(0!==(e.cr[0]&-2147483648))+" pae="+ +(0!==(e.cr[4]&32))+" iopl="+t+" cpl="+v+" if="+A+" cs:eip="+y+" cs_off="+B(e.get_seg_cs()>>>0,8)+" flgs="+B(e.get_eflags()>>>0,6)+" ("+H+") ss:esp="+D+" ssize="+ +e.stack_size_32[0]+(m?" in "+m:"")}function b(){for(var m={eax:0,ecx:1,edx:2,ebx:3,esp:4,ebp:5,esi:6,edi:7},q="eax ecx edx ebx esp ebp esi edi".split(" "),r="",t="",v=0;4>v;v++)r+=q[v]+"="+B(e.reg32[m[q[v]]]>>>0,8)+" ",t+=q[v+4]+"="+B(e.reg32[m[q[v+
520
- 4]]]>>>0,8)+" ";r+=" ds="+B(e.sreg[3],4)+" es="+B(e.sreg[0],4)+" fs="+B(e.sreg[4],4);t+=" gs="+B(e.sreg[5],4)+" cs="+B(e.sreg[1],4)+" ss="+B(e.sreg[2],4);return[r,t]}function c(m,q,r){if(!(m&1))return!1;var t=128===(m&128);return{size:t,global:256===(m&256),accessed:32===(m&32),dirty:64===(m&64),cache_disable:16===(m&16),user:4===(m&4),read_write:2===(m&2),address:(t&&!r?m&(q?4292870144:4290772992):m&4294963200)>>>0}}function d(m,q,r){for(var t=q?512:1024,v=q?8:4,y=q?21:22,D=0;D<t;D++){var u=e.read32s(m+
521
- D*v),A=c(u,q,!0);if(A)if(u="",u+=A.size?"S ":" ",u+=A.accessed?"A ":" ",u+=A.cache_disable?"Cd ":" ",u+=A.user?"U ":" ",u+=A.read_write?"Rw ":" ",A.size)E("=== "+B(r+(D<<y)>>>0,8)+" -> "+B(A.address>>>0,8)+" | "+u);else{E("=== "+B(r+(D<<y)>>>0,8)+" | "+u);for(var x=0;x<t;x++){var H=A.address+x*v;u=e.read32s(H);var L=c(u,q,!1);L&&(u="",u+=L.cache_disable?"Cd ":" ",u+=L.user?"U ":" ",u+=L.read_write?"Rw ":" ",u+=L.global?"G ":" ",u+=L.accessed?"A ":" ",u+=L.dirty?"Di ":" ",E("# "+B(r+
522
- (D<<y|x<<12)>>>0,8)+" -> "+B(L.address,8)+" | "+u+" (at "+B(H,8)+")"))}}}}var e=this,g={};this.debug=g;g.init=function(){function m(r){10===r?(E(q,4096),q=""):q+=String.fromCharCode(r)}if(e.io){var q="";e.io.register_write(1026,this,m);e.io.register_write(1280,this,m)}};g.get_regs_short=b;g.dump_regs=function(){var m=b();E(m[0],2);E(m[1],2)};g.get_state=a;g.dump_state=function(m){E(a(m),2)};g.dump_stack=function(m,q){var r=e.reg32[4];E("========= STACK ==========");if(q>=m||void 0===q)m=5,
523
- q=-5;for(;m>q;m--){var t=" ";m||(t="=> ");t+=B(m,2)+" | ";E(t+B(r+4*m,8)+" | "+B(e.read32s(r+4*m)>>>0))}};g.dump_page_structures=function(){if(e.cr[4]&32){E("PAE enabled");for(var m=0;4>m;m++){var q=e.read32s(e.cr[3]+8*m);q&1&&d(q&4294963200,!0,m<<30)}}else E("PAE disabled"),d(e.cr[3],!1,0)};g.dump_gdt_ldt=function(){function m(q,r){for(var t=0;t<r;t+=8,q+=8){var v=e.read16(q+2)|e.read8(q+4)<<16|e.read8(q+7)<<24,y=e.read16(q)|(e.read8(q+6)&15)<<16,D=e.read8(q+5),u=e.read8(q+6)>>4,A="",x=D>>5&
524
- 3;A=D&128?A+" P ":A+"NP ";D&16?(A=u&4?A+"32b ":A+"16b ",D&8?(A+="X ",D&4&&(A+="C ")):A+="R ",A+="RW "):A+="sys: "+B(D&15);u&8&&(y=y<<12|4095);E(B(t&-8,4)+" "+B(v>>>0,8)+" ("+B(y>>>0,8)+" bytes) "+A+"; dpl = "+x+", a = "+D.toString(2)+", f = "+u.toString(2))}}E("gdt: (len = "+B(e.gdtr_size[0])+")");m(e.translate_address_system_read(e.gdtr_offset[0]),e.gdtr_size[0]);E("\nldt: (len = "+B(e.segment_limits[7])+")");m(e.translate_address_system_read(e.segment_offsets[7]),e.segment_limits[7])};g.dump_idt=
525
- function(){for(var m=0;m<e.idtr_size[0];m+=8){var q=e.translate_address_system_read(e.idtr_offset[0]+m),r=e.read16(q)|e.read16(q+6)<<16,t=e.read16(q+2);q=e.read8(q+5);var v=q>>5&3;var y=5===(q&31)?"task gate ":14===(q&31)?"intr gate ":15===(q&31)?"trap gate ":"invalid ";y=q&128?y+" P":y+"NP";E(B(m>>3,4)+" "+B(r>>>0,8)+", "+B(t,4)+"; "+y+"; dpl = "+v+", t = "+q.toString(2))}};g.get_memory_dump=function(m,q){void 0===m?(m=0,q=e.memory_size[0]):void 0===q&&(q=m,m=0);return e.mem8.slice(m,m+q).buffer};
526
- g.memory_hex_dump=function(m,q){q=q||64;for(var r,t,v=0;v<q>>4;v++){r=B(m+(v<<4),5)+" ";for(var y=0;16>y;y++)t=e.read8(m+(v<<4)+y),r+=B(t,2)+" ";r+=" ";for(y=0;16>y;y++)t=e.read8(m+(v<<4)+y),r+=33>t||126<t?".":String.fromCharCode(t);E(r)}};g.used_memory_dump=function(){for(var m=e.memory_size[0]/128/16|0,q,r=0;16>r;r++){q=B(128*r*m,8)+" | ";for(var t=0;128>t;t++)q+=0<e.mem32s[(128*r+t)*m]?"X":" ";E(q)}};g.debug_interrupt=function(){};let f,l;g.dump_code=function(m,q,r){if(!l){if(void 0===f&&(f=
527
- "function"===typeof require?require("./capstone-x86.min.js"):window.cs,void 0===f)){E("Warning: Missing capstone library, disassembly not available");return}l=[new f.Capstone(f.ARCH_X86,f.MODE_16),new f.Capstone(f.ARCH_X86,f.MODE_32)]}try{l[m].disasm(q,r).forEach(function(t){E(B(t.address>>>0)+": "+k.pads(t.bytes.map(v=>B(v,2).slice(-2)).join(" "),20)+" "+t.mnemonic+" "+t.op_str)}),E("")}catch(t){E("Could not disassemble: "+Array.from(q).map(v=>B(v,2)).join(" "))}};let n;g.dump_wasm=function(m){if(void 0===
528
- n&&(n="function"===typeof require?require("./libwabt.js"):new window.WabtModule,void 0===n)){E("Warning: Missing libwabt, wasm dump not available");return}m=m.slice();try{var q=n.readWasm(m,{readDebugNames:!1});q.generateNames();q.applyNames();const v=q.toText({foldExprs:!0,inlineExport:!0});E(v)}catch(v){var r=new Blob([m]),t=document.createElement("a");t.download="failed.wasm";t.href=window.URL.createObjectURL(r);t.dataset.downloadurl=["application/octet-stream",t.download,t.href].join(":");t.click();
529
- window.URL.revokeObjectURL(t.src);console.log(v.toString())}finally{q&&q.destroy()}}};const Mb=DataView.prototype,Nb={size:1,get:Mb.getUint8,set:Mb.setUint8},Ub={size:2,get:Mb.getUint16,set:Mb.setUint16},X={size:4,get:Mb.getUint32,set:Mb.setUint32},Ib=Vb([{magic:X},{class:Nb},{data:Nb},{version0:Nb},{osabi:Nb},{abiversion:Nb},{pad0:function(a){return{size:a,get:()=>-1}}(7)},{type:Ub},{machine:Ub},{version1:X},{entry:X},{phoff:X},{shoff:X},{flags:X},{ehsize:Ub},{phentsize:Ub},{phnum:Ub},{shentsize:Ub},
530
- {shnum:Ub},{shstrndx:Ub}]);console.assert(52===Ib.reduce((a,b)=>a+b.size,0));const Kb=Vb([{type:X},{offset:X},{vaddr:X},{paddr:X},{filesz:X},{memsz:X},{flags:X},{align:X}]);console.assert(32===Kb.reduce((a,b)=>a+b.size,0));const Lb=Vb([{name:X},{type:X},{flags:X},{addr:X},{offset:X},{size:X},{link:X},{info:X},{addralign:X},{entsize:X}]);console.assert(40===Lb.reduce((a,b)=>a+b.size,0));function Vb(a){return a.map(function(b){var c=Object.keys(b);console.assert(1===c.length);c=c[0];b=b[c];console.assert(0<
531
- b.size);return{name:c,type:b,size:b.size,get:b.get,set:b.set}})}function Hb(a,b){const c={};let d=0;for(const e of b)b=e.get.call(a,d,!0),console.assert(void 0===c[e.name]),c[e.name]=b,d+=e.size;return[c,d]}function Jb(a,b,c){const d=[];let e=0;for(var g=0;g<c;g++){const [f,l]=Hb(new DataView(a.buffer,a.byteOffset+e,void 0),b);d.push(f);e+=l}return[d,e]}function Gb(a,b,c,d){E("Trying to load kernel of size "+b.byteLength);var e=new Uint8Array(b);const g=new Uint16Array(b);var f=new Uint32Array(b),
532
- l=e[497]||4,n=g[255];if(43605!==n)E("Bad checksum1: "+B(n));else if(n=g[257]|g[258]<<16,1400005704!==n)E("Bad checksum2: "+B(n));else{n=g[259];h(514<=n);var m=e[529];h(m&1);var q=g[283],r=f[139],t=f[140],v=e[564],y=e[565],D=518<=n?f[142]:255,u=f[146],A=f[147],x=f[150],H=f[151],L=f[152];E("kernel boot protocol version: "+B(n));E("flags="+B(m)+" xflags="+B(q));E("code32_start="+B(f[133]));E("initrd_addr_max="+B(r));E("kernel_alignment="+B(t));E("relocatable="+v);E("min_alignment="+B(y));E("cmdline max="+
533
- B(D));E("payload offset="+B(u)+" size="+B(A));E("pref_address="+B(H)+":"+B(x));E("init_size="+B(L));e[528]=255;e[529]=m&-97|128;g[274]=56832;g[253]=65535;E("heap_end_ptr="+B(56832));d+="\x00";h(d.length<D);E("cmd_line_ptr="+B(581632));f[138]=581632;for(e=0;e<d.length;e++)a[581632+e]=d.charCodeAt(e);l=512*(l+1);E("prot_mode_kernel_start="+B(l));d=new Uint8Array(b,0,l);b=new Uint8Array(b,l);e=l=0;c&&(l=67108864,e=c.byteLength,h(1048576+b.length<l),a.set(new Uint8Array(c),l));f[134]=l;f[135]=e;h(655360>
534
- 524288+d.length);a.set(d,524288);a.set(b,1048576);a=new Uint8Array(512);(new Uint16Array(a.buffer))[0]=43605;a[2]=1;c=3;a[c++]=250;a[c++]=184;a[c++]=32768;a[c++]=128;a[c++]=142;a[c++]=192;a[c++]=142;a[c++]=216;a[c++]=142;a[c++]=224;a[c++]=142;a[c++]=232;a[c++]=142;a[c++]=208;a[c++]=188;a[c++]=57344;a[c++]=224;a[c++]=234;a[c++]=0;a[c++]=0;a[c++]=32800;a[c++]=128;h(512>c);f=a[c]=0;for(b=0;b<a.length;b++)f+=a[b];a[c]=-f;return{name:"genroms/kernel.bin",data:a}}}const Wb="undefined"!==typeof window&&
535
- 0<=window.navigator.platform.toString().toLowerCase().search("win");function Xb(a){function b(x){return x.shiftKey&&x.ctrlKey&&(73===x.keyCode||74===x.keyCode||75===x.keyCode)||!v.emu_enabled?!1:x.target?x.target.classList.contains("phone_keyboard")||"INPUT"!==x.target.nodeName&&"TEXTAREA"!==x.target.nodeName:!0}function c(x){!x.altKey&&m[56]&&l(56,!1);return g(x,!1)}function d(x){!x.altKey&&m[56]&&l(56,!1);return g(x,!0)}function e(){for(var x=Object.keys(m),H,L=0;L<x.length;L++)H=+x[L],m[H]&&l(H,
536
- !1);m={}}function g(x,H){if(v.bus&&b(x)){x.preventDefault&&x.preventDefault();if(Wb&&(q&&(clearTimeout(t),x.getModifierState&&x.getModifierState("AltGraph")&&r===H&&"ControlLeft"===q.code&&"AltRight"===x.code||f(q,r),q=null),"ControlLeft"===x.code))return q=x,r=H,t=setTimeout(()=>{f(q,r);q=null},10),!1;f(x,H);return!1}}function f(x,H){a:{if(void 0!==x.code){var L=A[x.code];if(void 0!==L)break a}L=y[x.keyCode]}L?l(L,H,x.repeat):console.log("Missing char in map: keyCode="+(x.keyCode||-1).toString(16)+
537
- " code="+x.code)}function l(x,H,L){if(H)m[x]&&!L&&l(x,!1);else if(!m[x])return;(m[x]=H)||(x|=128);255<x?(n(x>>8),n(x&255)):n(x)}function n(x){v.bus.send("keyboard-code",x)}var m={},q=null,r=!1,t=0,v=this;this.emu_enabled=!0;var y=new Uint16Array([0,0,0,0,0,0,0,0,14,15,0,0,0,28,0,0,42,29,56,0,58,0,0,0,0,0,0,1,0,0,0,0,57,57417,57425,57423,57415,57419,57416,57421,80,0,0,0,0,82,83,0,11,2,3,4,5,6,7,8,9,10,0,39,0,13,0,0,0,30,48,46,32,18,33,34,35,23,36,37,38,50,49,24,25,16,19,31,20,22,47,17,45,21,44,57435,
538
- 57436,57437,0,0,82,79,80,81,75,76,77,71,72,73,0,0,0,0,0,0,59,60,61,62,63,64,65,66,67,68,87,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,39,13,51,12,52,53,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,43,27,40,0,57435,57400,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),D={8:8,10:13,32:32,39:222,44:188,45:189,46:190,47:191,48:48,49:49,50:50,51:51,52:52,53:53,54:54,55:55,56:56,57:57,59:186,61:187,91:219,92:220,93:221,96:192,
539
- 97:65,98:66,99:67,100:68,101:69,102:70,103:71,104:72,105:73,106:74,107:75,108:76,109:77,110:78,111:79,112:80,113:81,114:82,115:83,116:84,117:85,118:86,119:87,120:88,121:89,122:90},u={33:49,34:222,35:51,36:52,37:53,38:55,40:57,41:48,42:56,43:187,58:186,60:188,62:190,63:191,64:50,65:65,66:66,67:67,68:68,69:69,70:70,71:71,72:72,73:73,74:74,75:75,76:76,77:77,78:78,79:79,80:80,81:81,82:82,83:83,84:84,85:85,86:86,87:87,88:88,89:89,90:90,94:54,95:189,123:219,124:220,125:221,126:192},A={Escape:1,Digit1:2,
540
- Digit2:3,Digit3:4,Digit4:5,Digit5:6,Digit6:7,Digit7:8,Digit8:9,Digit9:10,Digit0:11,Minus:12,Equal:13,Backspace:14,Tab:15,KeyQ:16,KeyW:17,KeyE:18,KeyR:19,KeyT:20,KeyY:21,KeyU:22,KeyI:23,KeyO:24,KeyP:25,BracketLeft:26,BracketRight:27,Enter:28,ControlLeft:29,KeyA:30,KeyS:31,KeyD:32,KeyF:33,KeyG:34,KeyH:35,KeyJ:36,KeyK:37,KeyL:38,Semicolon:39,Quote:40,Backquote:41,ShiftLeft:42,Backslash:43,KeyZ:44,KeyX:45,KeyC:46,KeyV:47,KeyB:48,KeyN:49,KeyM:50,Comma:51,Period:52,Slash:53,IntlRo:53,ShiftRight:54,NumpadMultiply:55,
541
- AltLeft:56,Space:57,CapsLock:58,F1:59,F2:60,F3:61,F4:62,F5:63,F6:64,F7:65,F8:66,F9:67,F10:68,NumLock:69,ScrollLock:70,Numpad7:71,Numpad8:72,Numpad9:73,NumpadSubtract:74,Numpad4:75,Numpad5:76,Numpad6:77,NumpadAdd:78,Numpad1:79,Numpad2:80,Numpad3:81,Numpad0:82,NumpadDecimal:83,IntlBackslash:86,F11:87,F12:88,NumpadEnter:57372,ControlRight:57373,NumpadDivide:57397,AltRight:57400,Home:57415,ArrowUp:57416,PageUp:57417,ArrowLeft:57419,ArrowRight:57421,End:57423,ArrowDown:57424,PageDown:57425,Insert:57426,
542
- Delete:57427,OSLeft:57435,OSRight:57436,ContextMenu:57437};this.bus=a;this.destroy=function(){"undefined"!==typeof window&&(window.removeEventListener("keyup",c,!1),window.removeEventListener("keydown",d,!1),window.removeEventListener("blur",e,!1))};this.init=function(){"undefined"!==typeof window&&(this.destroy(),window.addEventListener("keyup",c,!1),window.addEventListener("keydown",d,!1),window.addEventListener("blur",e,!1))};this.init();this.simulate_press=function(x){x={keyCode:x};g(x,!0);g(x,
543
- !1)};this.simulate_char=function(x){var H=x.charCodeAt(0);H in D?this.simulate_press(D[H]):H in u?(n(42),this.simulate_press(u[H]),n(170)):console.log("ascii -> keyCode not found: ",H,x)}}function Yb(a,b){function c(u){if(!D.enabled||!D.emu_enabled)return!1;var A=b||document.body,x;if(!(x=document.pointerLockElement))a:{for(u=u.target;u.parentNode;){if(u===A){x=!0;break a}u=u.parentNode}x=!1}return x}function d(u){c(u)&&(u=u.changedTouches)&&u.length&&(u=u[u.length-1],v=u.clientX,y=u.clientY)}function e(){if(q||
544
- t||r)D.bus.send("mouse-click",[!1,!1,!1]),q=t=r=!1}function g(u){if(D.bus&&c(u)&&D.is_running){var A=0,x=0,H=u.changedTouches;H?H.length&&(H=H[H.length-1],A=H.clientX-v,x=H.clientY-y,v=H.clientX,y=H.clientY,u.preventDefault()):"number"===typeof u.movementX?(A=u.movementX,x=u.movementY):"number"===typeof u.webkitMovementX?(A=u.webkitMovementX,x=u.webkitMovementY):"number"===typeof u.mozMovementX?(A=u.mozMovementX,x=u.mozMovementY):(A=u.clientX-v,x=u.clientY-y,v=u.clientX,y=u.clientY);D.bus.send("mouse-delta",
545
- [.15*A,-(.15*x)]);b&&D.bus.send("mouse-absolute",[u.pageX-b.offsetLeft,u.pageY-b.offsetTop,b.offsetWidth,b.offsetHeight])}}function f(u){c(u)&&n(u,!0)}function l(u){c(u)&&n(u,!1)}function n(u,A){D.bus&&(1===u.which?q=A:2===u.which?t=A:3===u.which?r=A:E("Unknown event.which: "+u.which),D.bus.send("mouse-click",[q,t,r]),u.preventDefault())}function m(u){if(c(u)){var A=u.wheelDelta||-u.detail;0>A?A=-1:0<A&&(A=1);D.bus.send("mouse-wheel",[A,0]);u.preventDefault()}}var q=!1,r=!1,t=!1,v=0,y=0,D=this;this.enabled=
546
- !1;this.emu_enabled=!0;this.bus=a;this.bus.register("mouse-enable",function(u){this.enabled=u},this);this.is_running=!1;this.bus.register("emulator-stopped",function(){this.is_running=!1},this);this.bus.register("emulator-started",function(){this.is_running=!0},this);this.destroy=function(){"undefined"!==typeof window&&(window.removeEventListener("touchstart",d,!1),window.removeEventListener("touchend",e,!1),window.removeEventListener("touchmove",g,!1),window.removeEventListener("mousemove",g,!1),
547
- window.removeEventListener("mousedown",f,!1),window.removeEventListener("mouseup",l,!1),window.removeEventListener("wheel",m,{passive:!1}))};this.init=function(){"undefined"!==typeof window&&(this.destroy(),window.addEventListener("touchstart",d,!1),window.addEventListener("touchend",e,!1),window.addEventListener("touchmove",g,!1),window.addEventListener("mousemove",g,!1),window.addEventListener("mousedown",f,!1),window.addEventListener("mouseup",l,!1),window.addEventListener("wheel",m,{passive:!1}))};
548
- this.init()}function Zb(a){if("undefined"!==typeof window)if(window.AudioContext||window.webkitAudioContext){var b=window.AudioWorklet?$b:ac;this.bus=a;this.audio_context=window.AudioContext?new AudioContext:new webkitAudioContext;this.mixer=new bc(a,this.audio_context);this.pcspeaker=new cc(a,this.audio_context,this.mixer);this.dac=new b(a,this.audio_context,this.mixer);this.pcspeaker.start();a.register("emulator-stopped",function(){this.audio_context.suspend()},this);a.register("emulator-started",
549
- function(){this.audio_context.resume()},this);a.register("speaker-confirm-initialized",function(){a.send("speaker-has-initialized")},this);a.send("speaker-has-initialized")}else console.warn("Web browser doesn't support Web Audio API")}Zb.prototype.destroy=function(){this.audio_context&&this.audio_context.close();this.audio_context=null;this.dac&&this.dac.node_processor&&this.dac.node_processor.port.close();this.dac=null};function bc(a,b){function c(d){return function(e){d.gain.setValueAtTime(e,this.audio_context.currentTime)}}
550
- this.audio_context=b;this.sources=new Map;this.gain_right=this.gain_left=this.volume_right=this.volume_left=this.volume_both=1;this.node_treble_left=this.audio_context.createBiquadFilter();this.node_treble_right=this.audio_context.createBiquadFilter();this.node_treble_left.type="highshelf";this.node_treble_right.type="highshelf";this.node_treble_left.frequency.setValueAtTime(2E3,this.audio_context.currentTime);this.node_treble_right.frequency.setValueAtTime(2E3,this.audio_context.currentTime);this.node_bass_left=
551
- this.audio_context.createBiquadFilter();this.node_bass_right=this.audio_context.createBiquadFilter();this.node_bass_left.type="lowshelf";this.node_bass_right.type="lowshelf";this.node_bass_left.frequency.setValueAtTime(200,this.audio_context.currentTime);this.node_bass_right.frequency.setValueAtTime(200,this.audio_context.currentTime);this.node_gain_left=this.audio_context.createGain();this.node_gain_right=this.audio_context.createGain();this.node_merger=this.audio_context.createChannelMerger(2);
552
- this.input_left=this.node_treble_left;this.input_right=this.node_treble_right;this.node_treble_left.connect(this.node_bass_left);this.node_bass_left.connect(this.node_gain_left);this.node_gain_left.connect(this.node_merger,0,0);this.node_treble_right.connect(this.node_bass_right);this.node_bass_right.connect(this.node_gain_right);this.node_gain_right.connect(this.node_merger,0,1);this.node_merger.connect(this.audio_context.destination);a.register("mixer-connect",function(d){this.connect_source(d[0],
553
- d[1])},this);a.register("mixer-disconnect",function(d){this.disconnect_source(d[0],d[1])},this);a.register("mixer-volume",function(d){var e=d[0],g=d[1];d=Math.pow(10,d[2]/20);var f=0===e?this:this.sources.get(e);void 0===f?h(!1,"Mixer set volume - cannot set volume for undefined source: "+e):f.set_volume(d,g)},this);a.register("mixer-gain-left",function(d){this.gain_left=Math.pow(10,d/20);this.update()},this);a.register("mixer-gain-right",function(d){this.gain_right=Math.pow(10,d/20);this.update()},
554
- this);a.register("mixer-treble-left",c(this.node_treble_left),this);a.register("mixer-treble-right",c(this.node_treble_right),this);a.register("mixer-bass-left",c(this.node_bass_left),this);a.register("mixer-bass-right",c(this.node_bass_right),this)}bc.prototype.add_source=function(a,b){a=new dc(this.audio_context,a,this.input_left,this.input_right);h(!this.sources.has(b),"Mixer add source - overwritting source: "+b);this.sources.set(b,a);return a};bc.prototype.connect_source=function(a,b){var c=
555
- this.sources.get(a);void 0===c?h(!1,"Mixer connect - cannot connect undefined source: "+a):c.connect(b)};bc.prototype.disconnect_source=function(a,b){var c=this.sources.get(a);void 0===c?h(!1,"Mixer disconnect - cannot disconnect undefined source: "+a):c.disconnect(b)};bc.prototype.set_volume=function(a,b){void 0===b&&(b=2);switch(b){case 0:this.volume_left=a;break;case 1:this.volume_right=a;break;case 2:this.volume_both=a;break;default:h(!1,"Mixer set master volume - unknown channel: "+b);return}this.update()};
556
- bc.prototype.update=function(){var a=this.volume_both*this.volume_right*this.gain_right;this.node_gain_left.gain.setValueAtTime(this.volume_both*this.volume_left*this.gain_left,this.audio_context.currentTime);this.node_gain_right.gain.setValueAtTime(a,this.audio_context.currentTime)};function dc(a,b,c,d){this.audio_context=a;this.connected_right=this.connected_left=!0;this.volume_right=this.volume_left=this.volume_both=this.gain_hidden=1;this.node_splitter=a.createChannelSplitter(2);this.node_gain_left=
557
- a.createGain();this.node_gain_right=a.createGain();b.connect(this.node_splitter);this.node_splitter.connect(this.node_gain_left,0);this.node_gain_left.connect(c);this.node_splitter.connect(this.node_gain_right,1);this.node_gain_right.connect(d)}dc.prototype.update=function(){var a=this.connected_right*this.gain_hidden*this.volume_both*this.volume_right;this.node_gain_left.gain.setValueAtTime(this.connected_left*this.gain_hidden*this.volume_both*this.volume_left,this.audio_context.currentTime);this.node_gain_right.gain.setValueAtTime(a,
558
- this.audio_context.currentTime)};dc.prototype.connect=function(a){var b=!a||2===a;if(b||0===a)this.connected_left=!0;if(b||1===a)this.connected_right=!0;this.update()};dc.prototype.disconnect=function(a){var b=!a||2===a;if(b||0===a)this.connected_left=!1;if(b||1===a)this.connected_right=!1;this.update()};dc.prototype.set_volume=function(a,b){void 0===b&&(b=2);switch(b){case 0:this.volume_left=a;break;case 1:this.volume_right=a;break;case 2:this.volume_both=a;break;default:h(!1,"Mixer set volume - unknown channel: "+
559
- b);return}this.update()};dc.prototype.set_gain_hidden=function(a){this.gain_hidden=a};function cc(a,b,c){this.node_oscillator=b.createOscillator();this.node_oscillator.type="square";this.node_oscillator.frequency.setValueAtTime(440,b.currentTime);this.mixer_connection=c.add_source(this.node_oscillator,1);this.mixer_connection.disconnect();a.register("pcspeaker-enable",function(){c.connect_source(1)},this);a.register("pcspeaker-disable",function(){c.disconnect_source(1)},this);a.register("pcspeaker-update",
560
- function(d){var e=d[1],g=0;3===d[0]&&(g=Math.min(1193181.6665999999/e,this.node_oscillator.frequency.maxValue),g=Math.max(g,0));this.node_oscillator.frequency.setValueAtTime(g,b.currentTime)},this)}cc.prototype.start=function(){this.node_oscillator.start()};function $b(a,b,c){this.bus=a;this.audio_context=b;this.enabled=!1;this.sampling_rate=48E3;b=function(){function f(m){if(0===m)return 1;m*=Math.PI;return Math.sin(m)/m}function l(){var m=Reflect.construct(AudioWorkletProcessor,[],l);m.kernel_size=
561
- 3;m.queue_data=Array(1024);m.queue_start=0;m.queue_end=0;m.queue_length=0;m.queue_size=m.queue_data.length;m.queued_samples=0;m.source_buffer_previous=n;m.source_buffer_current=n;m.source_samples_per_destination=1;m.source_block_start=0;m.source_time=0;m.source_offset=0;m.port.onmessage=q=>{switch(q.data.type){case "queue":m.queue_push(q.data.value);break;case "sampling-rate":m.source_samples_per_destination=q.data.value/sampleRate}};return m}var n=[new Float32Array(256),new Float32Array(256)];Reflect.setPrototypeOf(l.prototype,
562
- AudioWorkletProcessor.prototype);Reflect.setPrototypeOf(l,AudioWorkletProcessor);l.prototype.process=l.prototype.process=function(m,q){for(m=0;m<q[0][0].length;m++){for(var r=0,t=0,v=this.source_offset+this.kernel_size,y=this.source_offset-this.kernel_size+1;y<=v;y++){var D=this.source_block_start+y;r+=this.get_sample(D,0)*this.kernel(this.source_time-y);t+=this.get_sample(D,1)*this.kernel(this.source_time-y)}if(isNaN(r)||isNaN(t))r=t=0,this.dbg_log("ERROR: NaN values! Ignoring for now.");q[0][0][m]=
563
- r;q[0][1][m]=t;this.source_time+=this.source_samples_per_destination;this.source_offset=Math.floor(this.source_time)}q=this.source_offset;q+=this.kernel_size+2;this.source_time-=this.source_offset;this.source_block_start+=this.source_offset;this.source_offset=0;this.ensure_enough_data(q);return!0};l.prototype.kernel=function(m){return f(m)*f(m/this.kernel_size)};l.prototype.get_sample=function(m,q){return 0>m?(m+=this.source_buffer_previous[0].length,this.source_buffer_previous[q][m]):this.source_buffer_current[q][m]};
564
- l.prototype.ensure_enough_data=function(m){var q=this.source_buffer_current[0].length;q-this.source_block_start<m&&(this.prepare_next_buffer(),this.source_block_start-=q)};l.prototype.prepare_next_buffer=function(){256>this.queued_samples&&this.queue_length&&this.dbg_log("Not enough samples - should not happen during midway of playback");this.source_buffer_previous=this.source_buffer_current;this.source_buffer_current=this.queue_shift();var m=this.source_buffer_current[0].length;if(256>m){for(var q=
565
- this.queue_start,r=0;256>m&&r<this.queue_length;)m+=this.queue_data[q][0].length,q=q+1&this.queue_size-1,r++;m=Math.max(m,256);m=[new Float32Array(m),new Float32Array(m)];m[0].set(this.source_buffer_current[0]);m[1].set(this.source_buffer_current[1]);q=this.source_buffer_current[0].length;for(var t=0;t<r;t++){var v=this.queue_shift();m[0].set(v[0],q);m[1].set(v[1],q);q+=v[0].length}this.source_buffer_current=m}this.pump()};l.prototype.pump=function(){1024>this.queued_samples/this.source_samples_per_destination&&
566
- this.port.postMessage({type:"pump"})};l.prototype.queue_push=function(m){this.queue_length<this.queue_size&&(this.queue_data[this.queue_end]=m,this.queue_end=this.queue_end+1&this.queue_size-1,this.queue_length++,this.queued_samples+=m[0].length,this.pump())};l.prototype.queue_shift=function(){if(!this.queue_length)return n;var m=this.queue_data[this.queue_start];this.queue_data[this.queue_start]=null;this.queue_start=this.queue_start+1&this.queue_size-1;this.queue_length--;this.queued_samples-=m[0].length;
567
- return m};l.prototype.dbg_log=function(m){this.port.postMessage({type:"debug-log",value:m})};registerProcessor("dac-processor",l)}.toString();var d=b.indexOf("{")+1,e=b.lastIndexOf("}");b=b.substring(d,e);b=new Blob(["var DEBUG = true;\n"+b],{type:"application/javascript"});var g=URL.createObjectURL(b);this.node_processor=null;this.node_output=this.audio_context.createGain();this.audio_context.audioWorklet.addModule(g).then(()=>{URL.revokeObjectURL(g);this.node_processor=new AudioWorkletNode(this.audio_context,
568
- "dac-processor",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2],parameterData:{},processorOptions:{}});this.node_processor.port.postMessage({type:"sampling-rate",value:this.sampling_rate});this.node_processor.port.onmessage=f=>{switch(f.data.type){case "pump":this.pump();break;case "debug-log":E("SpeakerWorkletDAC - Worklet: "+f.data.value)}};this.node_processor.connect(this.node_output)});this.mixer_connection=c.add_source(this.node_output,2);this.mixer_connection.set_gain_hidden(3);a.register("dac-send-data",
569
- function(f){this.queue(f)},this);a.register("dac-enable",function(){this.enabled=!0},this);a.register("dac-disable",function(){this.enabled=!1},this);a.register("dac-tell-sampling-rate",function(f){h(0<f,"Sampling rate should be nonzero");this.sampling_rate=f;this.node_processor&&this.node_processor.port.postMessage({type:"sampling-rate",value:f})},this);this.debugger=new ec(this.audio_context,this.node_output)}$b.prototype.queue=function(a){this.node_processor&&(this.debugger.push_queued_data(a),
570
- this.node_processor.port.postMessage({type:"queue",value:a},[a[0].buffer,a[1].buffer]))};$b.prototype.pump=function(){this.enabled&&this.bus.send("dac-request-data")};function ac(a,b,c){this.bus=a;this.audio_context=b;this.enabled=!1;this.sampling_rate=22050;this.buffered_time=0;this.rate_ratio=1;this.node_lowpass=this.audio_context.createBiquadFilter();this.node_lowpass.type="lowpass";this.node_output=this.node_lowpass;this.mixer_connection=c.add_source(this.node_output,2);this.mixer_connection.set_gain_hidden(3);
571
- a.register("dac-send-data",function(d){this.queue(d)},this);a.register("dac-enable",function(){this.enabled=!0;this.pump()},this);a.register("dac-disable",function(){this.enabled=!1},this);a.register("dac-tell-sampling-rate",function(d){h(0<d,"Sampling rate should be nonzero");this.sampling_rate=d;this.rate_ratio=Math.ceil(8E3/d);this.node_lowpass.frequency.setValueAtTime(d/2,this.audio_context.currentTime)},this);this.debugger=new ec(this.audio_context,this.node_output)}ac.prototype.queue=function(a){this.debugger.push_queued_data(a);
572
- var b=a[0].length,c=b/this.sampling_rate;if(1<this.rate_ratio){var d=this.audio_context.createBuffer(2,b*this.rate_ratio,this.sampling_rate*this.rate_ratio);for(var e=d.getChannelData(0),g=d.getChannelData(1),f=0,l=0;l<b;l++)for(var n=0;n<this.rate_ratio;n++,f++)e[f]=a[0][l],g[f]=a[1][l]}else d=this.audio_context.createBuffer(2,b,this.sampling_rate),d.copyToChannel?(d.copyToChannel(a[0],0),d.copyToChannel(a[1],1)):(d.getChannelData(0).set(a[0]),d.getChannelData(1).set(a[1]));a=this.audio_context.createBufferSource();
573
- a.buffer=d;a.connect(this.node_lowpass);a.addEventListener("ended",this.pump.bind(this));d=this.audio_context.currentTime;if(this.buffered_time<d)for(E("Speaker DAC - Creating/Recreating reserve - shouldn't occur frequently during playback"),this.buffered_time=d,d=.2-c,b=0;b<=d;)b+=c,this.buffered_time+=c,setTimeout(()=>this.pump(),1E3*b);a.start(this.buffered_time);this.buffered_time+=c;setTimeout(()=>this.pump(),0)};ac.prototype.pump=function(){this.enabled&&(.2<this.buffered_time-this.audio_context.currentTime||
574
- this.bus.send("dac-request-data"))};function ec(a,b){this.audio_context=a;this.node_source=b;this.node_processor=null;this.node_gain=this.audio_context.createGain();this.node_gain.gain.setValueAtTime(0,this.audio_context.currentTime);this.node_gain.connect(this.audio_context.destination);this.is_active=!1;this.queued_history=[];this.output_history=[];this.queued=[[],[]];this.output=[[],[]]}ec.prototype.start=function(a){this.is_active=!0;this.queued=[[],[]];this.output=[[],[]];this.queued_history.push(this.queued);
575
- this.output_history.push(this.output);this.node_processor=this.audio_context.createScriptProcessor(1024,2,2);this.node_processor.onaudioprocess=b=>{this.output[0].push(b.inputBuffer.getChannelData(0).slice());this.output[1].push(b.inputBuffer.getChannelData(1).slice())};this.node_source.connect(this.node_processor);this.node_processor.connect(this.node_gain);setTimeout(()=>{this.stop()},a)};ec.prototype.stop=function(){this.is_active=!1;this.node_source.disconnect(this.node_processor);this.node_processor.disconnect();
576
- this.node_processor=null};ec.prototype.push_queued_data=function(a){this.is_active&&(this.queued[0].push(a[0].slice()),this.queued[1].push(a[1].slice()))};ec.prototype.download_txt=function(a,b){a=this.output_history[a][b].map(c=>c.join(" ")).join(" ");va(a,"dacdata.txt")};ec.prototype.download_csv=function(a){a=this.output_history[a];for(var b=[],c=0;c<a[0].length;c++)for(var d=0;d<a[0][c].length;d++)b.push(`${a[0][c][d]},${a[1][c][d]}`);va(b.join("\n"),"dacdata.csv")};function fc(a,b){function c(l){f.bus&&
577
- f.enabled&&(f.send_char(l.which),l.preventDefault())}function d(l){var n=l.which;8===n?(f.send_char(127),l.preventDefault()):9===n&&(f.send_char(9),l.preventDefault())}function e(l){if(f.enabled){for(var n=l.clipboardData.getData("text/plain"),m=0;m<n.length;m++)f.send_char(n.charCodeAt(m));l.preventDefault()}}function g(l){l.target!==a&&a.blur()}var f=this;this.enabled=!0;this.bus=b;this.text="";this.text_new_line=!1;this.last_update=0;this.bus.register("serial0-output-byte",function(l){l=String.fromCharCode(l);
578
- this.show_char(l)},this);this.destroy=function(){a.removeEventListener("keypress",c,!1);a.removeEventListener("keydown",d,!1);a.removeEventListener("paste",e,!1);window.removeEventListener("mousedown",g,!1)};this.init=function(){this.destroy();a.style.display="block";a.addEventListener("keypress",c,!1);a.addEventListener("keydown",d,!1);a.addEventListener("paste",e,!1);window.addEventListener("mousedown",g,!1)};this.init();this.show_char=function(l){"\b"===l?(this.text=this.text.slice(0,-1),this.update()):
579
- "\r"!==l&&(this.text+=l,"\n"===l&&(this.text_new_line=!0),this.update())};this.update=function(){var l=Date.now(),n=l-this.last_update;16>n?void 0===this.update_timer&&(this.update_timer=setTimeout(()=>{this.update_timer=void 0;var m=Date.now();h(15<=m-this.last_update);this.last_update=m;this.render()},16-n)):(void 0!==this.update_timer&&(clearTimeout(this.update_timer),this.update_timer=void 0),this.last_update=l,this.render())};this.render=function(){a.value=this.text;this.text_new_line&&(this.text_new_line=
580
- !1,a.scrollTop=1E9)};this.send_char=function(l){f.bus&&f.bus.send("serial0-input",l)}}function gc(a,b){this.element=a;if(window.Terminal){var c=this.term=new window.Terminal({logLevel:"off"});c.write("This is the serial console. Whatever you type or paste here will be sent to COM1");var d=c.onData(function(e){for(let g=0;g<e.length;g++)b.send("serial0-input",e.charCodeAt(g))});b.register("serial0-output-byte",function(e){c.write(Uint8Array.of(e))},this);this.destroy=function(){d.dispose();c.dispose()}}}
581
- gc.prototype.show=function(){this.term&&this.term.open(this.element)};function hc(a,b,c){this.bus=b;this.socket=void 0;this.id=c||0;this.send_queue=[];this.url=a;this.reconnect_interval=1E4;this.last_connect_attempt=Date.now()-this.reconnect_interval;this.send_queue_limit=64;this.destroyed=!1;this.bus.register("net"+this.id+"-send",function(d){this.send(d)},this)}hc.prototype.handle_message=function(a){this.bus&&this.bus.send("net"+this.id+"-receive",new Uint8Array(a.data))};hc.prototype.handle_close=
582
- function(){this.destroyed||(this.connect(),setTimeout(this.connect.bind(this),this.reconnect_interval))};hc.prototype.handle_open=function(){for(var a=0;a<this.send_queue.length;a++)this.send(this.send_queue[a]);this.send_queue=[]};hc.prototype.handle_error=function(){};hc.prototype.destroy=function(){this.destroyed=!0;this.socket&&this.socket.close()};hc.prototype.connect=function(){if("undefined"!==typeof WebSocket){if(this.socket){var a=this.socket.readyState;if(0===a||1===a)return}a=Date.now();
583
- if(!(this.last_connect_attempt+this.reconnect_interval>a)){this.last_connect_attempt=Date.now();try{this.socket=new WebSocket(this.url)}catch(b){console.error(b);return}this.socket.binaryType="arraybuffer";this.socket.onopen=this.handle_open.bind(this);this.socket.onmessage=this.handle_message.bind(this);this.socket.onclose=this.handle_close.bind(this);this.socket.onerror=this.handle_error.bind(this)}}};hc.prototype.send=function(a){this.socket&&1===this.socket.readyState?this.socket.send(a):(this.send_queue.push(a),
584
- this.send_queue.length>2*this.send_queue_limit&&(this.send_queue=this.send_queue.slice(-this.send_queue_limit)),this.connect())};hc.prototype.change_proxy=function(a){this.url=a;this.socket&&(this.socket.onclose=function(){},this.socket.onerror=function(){},this.socket.close(),this.socket=void 0)};function Y(a){"number"===typeof a.log_level&&(ma=a.log_level);this.cpu_is_running=!1;this.cpu_exception_hook=function(){};var b=Eb.create();this.bus=b[0];this.emulator_bus=b[1];var c,d;const e=new WebAssembly.Table({element:"anyfunc",
585
- initial:1924});b={cpu_exception_hook:f=>this.cpu_exception_hook(f),run_hardware_timers:function(f,l){return c.run_hardware_timers(f,l)},cpu_event_halt:()=>{this.emulator_bus.send("cpu-event-halt")},abort:function(){h(!1)},microtick:F.microtick,get_rand_int:function(){return k.get_rand_int()},apic_acknowledge_irq:function(){return c.devices.apic.acknowledge_irq()},stop_idling:function(){return c.stop_idling()},io_port_read8:function(f){return c.io.port_read8(f)},io_port_read16:function(f){return c.io.port_read16(f)},
586
- io_port_read32:function(f){return c.io.port_read32(f)},io_port_write8:function(f,l){c.io.port_write8(f,l)},io_port_write16:function(f,l){c.io.port_write16(f,l)},io_port_write32:function(f,l){c.io.port_write32(f,l)},mmap_read8:function(f){return c.mmap_read8(f)},mmap_read16:function(f){return c.mmap_read16(f)},mmap_read32:function(f){return c.mmap_read32(f)},mmap_write8:function(f,l){c.mmap_write8(f,l)},mmap_write16:function(f,l){c.mmap_write16(f,l)},mmap_write32:function(f,l){c.mmap_write32(f,l)},
587
- mmap_write64:function(f,l,n){c.mmap_write64(f,l,n)},mmap_write128:function(f,l,n,m,q){c.mmap_write128(f,l,n,m,q)},log_from_wasm:function(f,l){f=k.read_sized_string_from_mem(d,f,l);E(f,2)},console_log_from_wasm:function(f,l){f=k.read_sized_string_from_mem(d,f,l);console.error(f)},dbg_trace_from_wasm:function(){E(Error().stack,2)},codegen_finalize:(f,l,n,m,q)=>{c.codegen_finalize(f,l,n,m,q)},jit_clear_func:f=>c.jit_clear_func(f),jit_clear_all_funcs:()=>c.jit_clear_all_funcs(),__indirect_function_table:e};
588
- let g=a.wasm_fn;g||(g=f=>new Promise(l=>{let n="v86-debug.wasm",m="v86-fallback.wasm";if(a.wasm_path){n=a.wasm_path;const q=n.lastIndexOf("/");m=(-1===q?"":n.substr(0,q))+"/"+m}else"undefined"===typeof window&&"string"===typeof __dirname?(n=__dirname+"/"+n,m=__dirname+"/"+m):(n="build/"+n,m="build/"+m);k.load_file(n,{done:async q=>{try{const {instance:r}=await WebAssembly.instantiate(q,f);this.wasm_source=q;l(r.exports)}catch(r){k.load_file(m,{done:async t=>{const {instance:v}=await WebAssembly.instantiate(t,
589
- f);this.wasm_source=t;l(v.exports)}})}},progress:q=>{this.emulator_bus.send("download-progress",{file_index:0,file_count:1,file_name:n,lengthComputable:q.lengthComputable,total:q.total,loaded:q.loaded})}})}));g({env:b}).then(f=>{d=f.memory;f.rust_init();f=this.v86=new F(this.emulator_bus,{exports:f,wasm_table:e});c=f.cpu;this.continue_init(f,a)});this.zstd_worker=null;this.zstd_worker_request_id=0}J.exportSymbol("V86",Y);Y.prototype.continue_init=async function(a,b){function c(t,v){switch(t){case "hda":e.hda=
590
- this.disk_images.hda=v;break;case "hdb":e.hdb=this.disk_images.hdb=v;break;case "cdrom":e.cdrom=this.disk_images.cdrom=v;break;case "fda":e.fda=this.disk_images.fda=v;break;case "fdb":e.fdb=this.disk_images.fdb=v;break;case "multiboot":e.multiboot=this.disk_images.multiboot=v.buffer;break;case "bzimage":e.bzimage=this.disk_images.bzimage=v.buffer;break;case "initrd":e.initrd=this.disk_images.initrd=v.buffer;break;case "bios":e.bios=v.buffer;break;case "vga_bios":e.vga_bios=v.buffer;break;case "initial_state":e.initial_state=
591
- v.buffer;break;case "fs9p_json":e.fs9p_json=v;break;default:h(!1,t)}}async function d(){if(e.fs9p&&e.fs9p_json)if(e.initial_state)E("Filesystem basefs ignored: Overridden by state image");else{if(e.fs9p.load_from_json(e.fs9p_json),b.bzimage_initrd_from_filesystem){const {bzimage_path:t,initrd_path:v}=this.get_bzimage_initrd_from_filesystem(e.fs9p);E("Found bzimage: "+t+" and initrd: "+v);const [y,D]=await Promise.all([e.fs9p.read_file(v),e.fs9p.read_file(t)]);c.call(this,"initrd",new k.SyncBuffer(y.buffer));
592
- c.call(this,"bzimage",new k.SyncBuffer(D.buffer))}}else h(!b.bzimage_initrd_from_filesystem||e.initial_state,"bzimage_initrd_from_filesystem: Requires a filesystem");this.serial_adapter&&this.serial_adapter.show&&this.serial_adapter.show();this.v86.init(e);e.initial_state&&(a.restore_state(e.initial_state),e.initial_state=void 0);b.autostart&&this.v86.run();this.emulator_bus.send("emulator-loaded")}this.bus.register("emulator-stopped",function(){this.cpu_is_running=!1;this.screen_adapter.pause()},
593
- this);this.bus.register("emulator-started",function(){this.cpu_is_running=!0;this.screen_adapter.continue()},this);var e={};this.disk_images={fda:void 0,fdb:void 0,hda:void 0,hdb:void 0,cdrom:void 0};var g=b.boot_order?b.boot_order:b.fda?801:b.hda?786:291;e.acpi=b.acpi;e.disable_jit=b.disable_jit;e.load_devices=!0;e.memory_size=b.memory_size||67108864;e.vga_memory_size=b.vga_memory_size||8388608;e.boot_order=g;e.fastboot=b.fastboot||!1;e.fda=void 0;e.fdb=void 0;e.uart1=b.uart1;e.uart2=b.uart2;e.uart3=
594
- b.uart3;e.cmdline=b.cmdline;e.preserve_mac_from_state_image=b.preserve_mac_from_state_image;e.mac_address_translation=b.mac_address_translation;e.cpuid_level=b.cpuid_level;e.virtio_balloon=b.virtio_balloon;e.virtio_console=b.virtio_console;e.virtio_net=b.virtio_net;e.screen_options=b.screen_options;if(g=b.network_relay_url||b.net_device&&b.net_device.relay_url)"fetch"===g?this.network_adapter=new ic(this.bus,b.net_device):"inbrowser"===g?this.network_adapter=new jc(this.bus,b.net_device):g.startsWith("wisp://")||
595
- g.startsWith("wisps://")?this.network_adapter=new kc(g,this.bus,b.net_device):this.network_adapter=new hc(g,this.bus);e.net_device=b.net_device||{type:"ne2k"};g=b.screen||{};b.screen_container&&(g.container=b.screen_container);b.disable_keyboard||(this.keyboard_adapter=new Xb(this.bus));b.disable_mouse||(this.mouse_adapter=new Yb(this.bus,g.container));this.screen_adapter=g.container?new ca(g,()=>this.v86.cpu.devices.vga&&this.v86.cpu.devices.vga.screen_fill_buffer()):new lc;e.screen=this.screen_adapter;
596
- e.screen_options=g;b.serial_container&&(this.serial_adapter=new fc(b.serial_container,this.bus));b.serial_container_xtermjs&&(this.serial_adapter=new gc(b.serial_container_xtermjs,this.bus));b.disable_speaker||(this.speaker_adapter=new Zb(this.bus));var f=[];g=(t,v)=>{if(v)if(v.get&&v.set&&v.load)f.push({name:t,loadable:v});else{if("bios"===t||"vga_bios"===t||"initial_state"===t||"multiboot"===t||"bzimage"===t||"initrd"===t)v.async=!1;if("fda"===t||"fdb"===t)v.async=!1;v.url&&!v.async?f.push({name:t,
597
- url:v.url,size:v.size}):f.push({name:t,loadable:k.buffer_from_object(v,this.zstd_decompress_worker.bind(this))})}};b.state&&console.warn("Warning: Unknown option 'state'. Did you mean 'initial_state'?");g("bios",b.bios);g("vga_bios",b.vga_bios);g("cdrom",b.cdrom);g("hda",b.hda);g("hdb",b.hdb);g("fda",b.fda);g("fdb",b.fdb);g("initial_state",b.initial_state);g("multiboot",b.multiboot);g("bzimage",b.bzimage);g("initrd",b.initrd);if(b.filesystem){g=b.filesystem.basefs;var l=b.filesystem.baseurl;let t=
598
- new mc;l&&(t=new nc(t,l));e.fs9p=this.fs9p=new Z(t);if(g){h(l,"Filesystem: baseurl must be specified");if("object"===typeof g){var n=g.size;g=g.url}h("string"===typeof g);f.push({name:"fs9p_json",url:g,size:n,as_json:!0})}}var m=this,q=f.length,r=function(t){if(t===q)setTimeout(d.bind(this),0);else{var v=f[t];v.loadable?(v.loadable.onload=function(){c.call(this,v.name,v.loadable);r(t+1)}.bind(this),v.loadable.load()):k.load_file(v.url,{done:function(y){v.url.endsWith(".zst")&&"initial_state"!==v.name&&
599
- (h(v.size,"A size must be provided for compressed images"),y=this.zstd_decompress(v.size,new Uint8Array(y)));c.call(this,v.name,v.as_json?y:new k.SyncBuffer(y));r(t+1)}.bind(this),progress:function(y){200===y.target.status?m.emulator_bus.send("download-progress",{file_index:t,file_count:q,file_name:v.url,lengthComputable:y.lengthComputable,total:y.total||v.size,loaded:y.loaded}):m.emulator_bus.send("download-error",{file_index:t,file_count:q,file_name:v.url,request:y.target})},as_json:v.as_json})}}.bind(this);
600
- r(0)};Y.prototype.zstd_decompress=function(a,b){const c=this.v86.cpu;h(!this.zstd_context);this.zstd_context=c.zstd_create_ctx(b.length);(new Uint8Array(c.wasm_memory.buffer)).set(b,c.zstd_get_src_ptr(this.zstd_context));b=c.zstd_read(this.zstd_context,a);const d=c.wasm_memory.buffer.slice(b,b+a);c.zstd_read_free(b,a);c.zstd_free_ctx(this.zstd_context);this.zstd_context=null;return d};Y.prototype.zstd_decompress_worker=async function(a,b){if(!this.zstd_worker){const c=URL.createObjectURL(new Blob(["("+
601
- function(){let d;globalThis.onmessage=function(e){if(d){var {src:g,decompressed_size:f,id:l}=e.data;e=d.exports;var n=e.zstd_create_ctx(g.length);(new Uint8Array(e.memory.buffer)).set(g,e.zstd_get_src_ptr(n));var m=e.zstd_read(n,f),q=e.memory.buffer.slice(m,m+f);e.zstd_read_free(m,f);e.zstd_free_ctx(n);postMessage({result:q,id:l},[q])}else n=Object.fromEntries("cpu_exception_hook run_hardware_timers cpu_event_halt microtick get_rand_int apic_acknowledge_irq stop_idling io_port_read8 io_port_read16 io_port_read32 io_port_write8 io_port_write16 io_port_write32 mmap_read8 mmap_read16 mmap_read32 mmap_write8 mmap_write16 mmap_write32 mmap_write64 mmap_write128 codegen_finalize jit_clear_func jit_clear_all_funcs".split(" ").map(r=>
602
- [r,()=>console.error("zstd worker unexpectedly called "+r)])),n.__indirect_function_table=new WebAssembly.Table({element:"anyfunc",initial:1024}),n.abort=()=>{throw Error("zstd worker aborted");},n.log_from_wasm=n.console_log_from_wasm=(r,t)=>{console.log(String.fromCharCode(...(new Uint8Array(d.exports.memory.buffer,r,t))))},n.dbg_trace_from_wasm=()=>console.trace(),d=new WebAssembly.Instance(new WebAssembly.Module(e.data),{env:n})}}.toString()+")()"],{type:"text/javascript"}));this.zstd_worker=
603
- new Worker(c);URL.revokeObjectURL(c);this.zstd_worker.postMessage(this.wasm_source,[this.wasm_source])}return new Promise(c=>{const d=this.zstd_worker_request_id++,e=async g=>{g.data.id===d&&(this.zstd_worker.removeEventListener("message",e),h(a===g.data.result.byteLength),c(g.data.result))};this.zstd_worker.addEventListener("message",e);this.zstd_worker.postMessage({src:b,decompressed_size:a,id:d},[b.buffer])})};Y.prototype.get_bzimage_initrd_from_filesystem=function(a){const b=(a.read_dir("/")||
604
- []).map(e=>"/"+e);a=(a.read_dir("/boot/")||[]).map(e=>"/boot/"+e);let c,d;for(const e of[].concat(b,a)){const g=/old/i.test(e)||/fallback/i.test(e),f=/vmlinuz/i.test(e)||/bzimage/i.test(e),l=/initrd/i.test(e)||/initramfs/i.test(e);!f||d&&g||(d=e);!l||c&&g||(c=e)}c&&d||(console.log("Failed to find bzimage or initrd in filesystem. Files:"),console.log(b.join(" ")),console.log(a.join(" ")));return{initrd_path:c,bzimage_path:d}};Y.prototype.run=async function(){this.v86.run()};J.exportProperty(Y.prototype,
605
- "run",Y.prototype.run);Y.prototype.stop=async function(){this.cpu_is_running&&await new Promise(a=>{const b=()=>{this.remove_listener("emulator-stopped",b);a()};this.add_listener("emulator-stopped",b);this.v86.stop()})};J.exportProperty(Y.prototype,"stop",Y.prototype.stop);Y.prototype.destroy=async function(){await this.stop();this.v86.destroy();this.keyboard_adapter&&this.keyboard_adapter.destroy();this.network_adapter&&this.network_adapter.destroy();this.mouse_adapter&&this.mouse_adapter.destroy();
606
- this.screen_adapter&&this.screen_adapter.destroy();this.serial_adapter&&this.serial_adapter.destroy();this.speaker_adapter&&this.speaker_adapter.destroy()};J.exportProperty(Y.prototype,"destroy",Y.prototype.destroy);Y.prototype.restart=function(){this.v86.restart()};J.exportProperty(Y.prototype,"restart",Y.prototype.restart);Y.prototype.add_listener=function(a,b){this.bus.register(a,b,this)};J.exportProperty(Y.prototype,"add_listener",Y.prototype.add_listener);Y.prototype.remove_listener=function(a,
607
- b){this.bus.unregister(a,b)};J.exportProperty(Y.prototype,"remove_listener",Y.prototype.remove_listener);Y.prototype.restore_state=async function(a){h(1===arguments.length);this.v86.restore_state(a)};J.exportProperty(Y.prototype,"restore_state",Y.prototype.restore_state);Y.prototype.save_state=async function(){h(0===arguments.length);return this.v86.save_state()};J.exportProperty(Y.prototype,"save_state",Y.prototype.save_state);Y.prototype.get_instruction_counter=function(){return this.v86?this.v86.cpu.instruction_counter[0]>>>
608
- 0:0};J.exportProperty(Y.prototype,"get_instruction_counter",Y.prototype.get_instruction_counter);Y.prototype.is_running=function(){return this.cpu_is_running};J.exportProperty(Y.prototype,"is_running",Y.prototype.is_running);Y.prototype.set_fda=async function(a){if(a.url&&!a.async)k.load_file(a.url,{done:b=>{this.v86.cpu.devices.fdc.set_fda(new k.SyncBuffer(b))}});else{const b=k.buffer_from_object(a,this.zstd_decompress_worker.bind(this));b.onload=()=>{this.v86.cpu.devices.fdc.set_fda(b)};await b.load()}};
609
- J.exportProperty(Y.prototype,"set_fda",Y.prototype.set_fda);Y.prototype.eject_fda=function(){this.v86.cpu.devices.fdc.eject_fda()};J.exportProperty(Y.prototype,"eject_fda",Y.prototype.eject_fda);Y.prototype.keyboard_send_scancodes=function(a){for(var b=0;b<a.length;b++)this.bus.send("keyboard-code",a[b])};J.exportProperty(Y.prototype,"keyboard_send_scancodes",Y.prototype.keyboard_send_scancodes);Y.prototype.keyboard_send_keys=function(a){for(var b=0;b<a.length;b++)this.keyboard_adapter.simulate_press(a[b])};
610
- J.exportProperty(Y.prototype,"keyboard_send_keys",Y.prototype.keyboard_send_keys);Y.prototype.keyboard_send_text=function(a){for(var b=0;b<a.length;b++)this.keyboard_adapter.simulate_char(a[b])};J.exportProperty(Y.prototype,"keyboard_send_text",Y.prototype.keyboard_send_text);Y.prototype.screen_make_screenshot=function(){return this.screen_adapter?this.screen_adapter.make_screenshot():null};J.exportProperty(Y.prototype,"screen_make_screenshot",Y.prototype.screen_make_screenshot);Y.prototype.screen_set_scale=
611
- function(a,b){this.screen_adapter&&this.screen_adapter.set_scale(a,b)};J.exportProperty(Y.prototype,"screen_set_scale",Y.prototype.screen_set_scale);Y.prototype.screen_go_fullscreen=function(){if(this.screen_adapter){var a=document.getElementById("screen_container");if(a){var b=a.requestFullScreen||a.webkitRequestFullscreen||a.mozRequestFullScreen||a.msRequestFullScreen;b&&(b.call(a),(a=document.getElementsByClassName("phone_keyboard")[0])&&a.focus());try{navigator.keyboard.lock()}catch(c){}this.lock_mouse()}}};
612
- J.exportProperty(Y.prototype,"screen_go_fullscreen",Y.prototype.screen_go_fullscreen);Y.prototype.lock_mouse=function(){var a=document.body,b=a.requestPointerLock||a.mozRequestPointerLock||a.webkitRequestPointerLock;b&&b.call(a)};J.exportProperty(Y.prototype,"lock_mouse",Y.prototype.lock_mouse);Y.prototype.mouse_set_status=function(a){this.mouse_adapter&&(this.mouse_adapter.emu_enabled=a)};Y.prototype.keyboard_set_status=function(a){this.keyboard_adapter&&(this.keyboard_adapter.emu_enabled=a)};J.exportProperty(Y.prototype,
613
- "keyboard_set_status",Y.prototype.keyboard_set_status);Y.prototype.serial0_send=function(a){for(var b=0;b<a.length;b++)this.bus.send("serial0-input",a.charCodeAt(b))};J.exportProperty(Y.prototype,"serial0_send",Y.prototype.serial0_send);Y.prototype.serial_send_bytes=function(a,b){for(var c=0;c<b.length;c++)this.bus.send("serial"+a+"-input",b[c])};J.exportProperty(Y.prototype,"serial_send_bytes",Y.prototype.serial_send_bytes);Y.prototype.serial_set_modem_status=function(a,b){this.bus.send("serial"+
614
- a+"-modem-status-input",b)};Y.prototype.serial_set_carrier_detect=function(a,b){this.bus.send("serial"+a+"-carrier-detect-input",b)};Y.prototype.serial_set_ring_indicator=function(a,b){this.bus.send("serial"+a+"-ring-indicator-input",b)};Y.prototype.serial_set_data_set_ready=function(a,b){this.bus.send("serial"+a+"-data-set-ready-input",b)};Y.prototype.serial_set_clear_to_send=function(a,b){this.bus.send("serial"+a+"-clear-to-send-input",b)};Y.prototype.mount_fs=async function(a,b,c){var d=new mc;
615
- b&&(d=new nc(d,b));d=new Z(d,this.fs9p.qidcounter);b&&(h("object"===typeof c,"Filesystem: basefs must be a JSON object"),d.load_from_json(c));a=this.fs9p.Mount(a,d);if(-2===a)throw new oc;if(-17===a)throw new pc;if(0>a)throw h(!1,"Unexpected error code: "+-a),Error("Failed to mount. Error number: "+-a);};J.exportProperty(Y.prototype,"mount_fs",Y.prototype.mount_fs);Y.prototype.create_file=async function(a,b){h(2===arguments.length);var c=this.fs9p;if(c){var d=a.split("/");d=d[d.length-1];var e=c.SearchPath(a).parentid;
616
- if(""!==d&&-1!==e)await c.CreateBinaryFile(d,e,b);else return Promise.reject(new oc)}};J.exportProperty(Y.prototype,"create_file",Y.prototype.create_file);Y.prototype.read_file=async function(a){h(1===arguments.length);var b=this.fs9p;if(b)return(b=await b.read_file(a))?b:Promise.reject(new oc)};J.exportProperty(Y.prototype,"read_file",Y.prototype.read_file);Y.prototype.automatically=function(a){const b=c=>{const d=c[0];if(d){var e=c.slice(1);d.sleep?setTimeout(()=>b(e),1E3*d.sleep):d.vga_text?this.wait_until_vga_screen_contains(d.vga_text).then(()=>
617
- b(e)):d.keyboard_send?(Array.isArray(d.keyboard_send)?this.keyboard_send_scancodes(d.keyboard_send):(h("string"===typeof d.keyboard_send),this.keyboard_send_text(d.keyboard_send)),b(e)):d.call?(d.call(),b(e)):h(!1,d)}};b(a)};Y.prototype.wait_until_vga_screen_contains=function(a){return new Promise(b=>{function c(f){return"string"===typeof a?f.includes(a):a.test(f)}function d(f){[f]=f;e.add(f)}for(const f of this.screen_adapter.get_text_screen())if(c(f)){b(!0);return}const e=new Set,g=()=>{for(const f of e){const l=
618
- this.screen_adapter.get_text_row(f);if(c(l)){this.remove_listener("screen-put-char",d);b();return}}e.clear();setTimeout(g,100)};g();this.add_listener("screen-put-char",d)})};Y.prototype.read_memory=function(a,b){return this.v86.cpu.read_blob(a,b)};Y.prototype.write_memory=function(a,b){this.v86.cpu.write_blob(a,b)};Y.prototype.set_serial_container_xtermjs=function(a){this.serial_adapter&&this.serial_adapter.destroy&&this.serial_adapter.destroy();this.serial_adapter=new gc(a,this.bus);this.serial_adapter.show()};
619
- function pc(a){this.message=a||"File already exists"}pc.prototype=Error.prototype;function oc(a){this.message=a||"File not found"}oc.prototype=Error.prototype;var qc={Connector:function(a){this.listeners={};this.pair=a;a.addEventListener("message",function(b){b=b.data;for(var c=this.listeners[b[0]],d=0;d<c.length;d++){var e=c[d];e.fn.call(e.this_value,b[1])}}.bind(this),!1)}};qc.Connector.prototype.register=function(a,b,c){var d=this.listeners[a];void 0===d&&(d=this.listeners[a]=[]);d.push({fn:b,
620
- this_value:c})};qc.Connector.prototype.send=function(a,b,c){h(1<=arguments.length);this.pair&&this.pair.postMessage([a,b],c)};qc.init=function(a){return new qc.Connector(a)};function lc(){var a,b=0,c=0;this.put_char=function(d,e,g){h(0<=d&&d<c);h(0<=e&&e<b);a[d*b+e]=g};this.destroy=function(){};this.pause=function(){};this.continue=function(){};this.set_mode=function(){};this.set_font_bitmap=function(){};this.set_font_page=function(){};this.clear_screen=function(){};this.set_size_text=function(d,
621
- e){if(d!==b||e!==c)a=new Uint8Array(d*e),b=d,c=e};this.set_size_graphical=function(){};this.set_scale=function(){};this.update_cursor_scanline=function(){};this.update_cursor=function(){};this.update_buffer=function(){};this.get_text_screen=function(){for(var d=[],e=0;e<c;e++)d.push(this.get_text_row(e));return d};this.get_text_row=function(d){d*=b;return String.fromCharCode.apply(String,a.subarray(d,d+b))};this.set_size_text(80,25)}function jc(a,b){b=b.id||0;this.bus=a;this.bus_send_msgid=`net${b}-send`;
622
- this.bus_recv_msgid=`net${b}-receive`;this.channel=new BroadcastChannel(`v86-inbrowser-${b}`);this.is_open=!0;this.nic_to_hub_fn=c=>{this.channel.postMessage(c)};this.bus.register(this.bus_send_msgid,this.nic_to_hub_fn,this);this.hub_to_nic_fn=c=>{this.bus.send(this.bus_recv_msgid,c.data)};this.channel.addEventListener("message",this.hub_to_nic_fn)}jc.prototype.destroy=function(){this.is_open&&(this.bus.unregister(this.bus_send_msgid,this.nic_to_hub_fn),this.channel.removeEventListener("message",
623
- this.hub_to_nic_fn),this.channel.close(),this.is_open=!1)};const rc=(new Date("1970-01-01T00:00:00Z")).getTime(),sc=(new Date("1900-01-01T00:00:00Z")).getTime(),tc=rc-sc,uc=Math.pow(2,32),vc=[118,56,54];function wc(a){return[0,1,2,3,4,5].map(b=>a[b].toString(16)).map(b=>1===b.length?"0"+b:b).join(":")}function xc(a){return a[0]<<24|a[1]<<16|a[2]<<8|a[3]}class yc{constructor(a,b){a=Math.min(a,16);this.maximum_capacity=b?Math.max(b,a):0;this.length=this.head=this.tail=0;this.buffer=new Uint8Array(a)}write(a){const b=
624
- a.length;var c=this.length+b;let d=this.buffer.length;if(d<c){for(;d<c;)d*=2;if(this.maximum_capacity&&d>this.maximum_capacity)throw Error("stream capacity overflow in GrowableRingbuffer.write(), package dropped");c=new Uint8Array(d);this.peek(c);this.tail=0;this.head=this.length;this.buffer=c}c=this.buffer;const e=this.head+b;if(e>d){const g=d-this.head;c.set(a.subarray(0,g),this.head);c.set(a.subarray(g))}else c.set(a,this.head);this.head=e%d;this.length+=b}peek(a){const b=Math.min(this.length,
625
- a.length);if(b){const e=this.buffer;var c=e.length,d=this.tail+b;d>c?(d%=c,c-=this.tail,a.set(e.subarray(this.tail)),a.set(e.subarray(0,d),c)):a.set(e.subarray(this.tail,d))}return b}remove(a){a>this.length&&(a=this.length);a&&(this.tail=(this.tail+a)%this.buffer.length,this.length-=a);return a}}function zc(){const a=new Uint8Array(1518),b=a.buffer,c=a.byteOffset;return{eth_frame:a,eth_frame_view:new DataView(b),eth_payload_view:new DataView(b,c+14,1500),ipv4_payload_view:new DataView(b,c+34,1480),
626
- udp_payload_view:new DataView(b,c+42,1472),text_encoder:new TextEncoder}}function Ac(a,b,c,d){d.eth_frame.set(b,c.byteOffset+a);return b.length}function Bc(a,b,c,d){const e=c.byteOffset+(a&-2);d=d.eth_frame;for(c=c.byteOffset;c<e;c+=2)b+=d[c]<<8|d[c+1];for(a&1&&(b+=d[e]<<8);b>>16;)b=(b&65535)+(b>>16);return~b&65535}function Cc(a,b){h(b.eth);a.eth_frame.fill(0);var c=a.eth_frame,d=c.subarray,e=a.eth_frame_view;Ac(0,b.eth.dest,e,a);Ac(6,b.eth.src,e,a);e.setUint16(12,b.eth.ethertype);e=14;if(b.arp){var g=
627
- a.eth_payload_view;g.setUint16(0,b.arp.htype);g.setUint16(2,b.arp.ptype);g.setUint8(4,b.arp.sha.length);g.setUint8(5,b.arp.spa.length);g.setUint16(6,b.arp.oper);Ac(8,b.arp.sha,g,a);Ac(14,b.arp.spa,g,a);Ac(18,b.arp.tha,g,a);Ac(24,b.arp.tpa,g,a);e+=28}else if(b.ipv4){g=a.eth_payload_view;var f=20;if(b.icmp){var l=a.ipv4_payload_view;l.setUint8(0,b.icmp.type);l.setUint8(1,b.icmp.code);l.setUint16(2,0);var n=4+Ac(4,b.icmp.data,l,a);l.setUint16(2,Bc(n,0,l,a));f+=n}else if(b.udp){l=a.ipv4_payload_view;
628
- var m=8;if(b.dhcp){n=m;var q=a.udp_payload_view;q.setUint8(0,b.dhcp.op);q.setUint8(1,b.dhcp.htype);q.setUint8(2,b.dhcp.hlen);q.setUint8(3,b.dhcp.hops);q.setUint32(4,b.dhcp.xid);q.setUint16(8,b.dhcp.secs);q.setUint16(10,b.dhcp.flags);q.setUint32(12,b.dhcp.ciaddr);q.setUint32(16,b.dhcp.yiaddr);q.setUint32(20,b.dhcp.siaddr);q.setUint32(24,b.dhcp.giaddr);Ac(28,b.dhcp.chaddr,q,a);q.setUint32(236,1669485411);m=240;for(var r of b.dhcp.options)m+=Ac(m,r,q,a);n+=m}else if(b.dns){r=m;m=a.udp_payload_view;m.setUint16(0,
629
- b.dns.id);m.setUint16(2,b.dns.flags);m.setUint16(4,b.dns.questions.length);m.setUint16(6,b.dns.answers.length);let y=12;for(var t=0;t<b.dns.questions.length;++t){var v=b.dns.questions[t];for(q of v.name){const D=a.text_encoder.encodeInto(q,a.eth_frame.subarray(m.byteOffset+(y+1))).written;m.setUint8(y,D);y+=1+D}m.setUint16(y,v.type);y+=2;m.setUint16(y,v.class);y+=2}for(t=0;t<b.dns.answers.length;++t){q=b.dns.answers[t];for(n of q.name)v=a.text_encoder.encodeInto(n,a.eth_frame.subarray(m.byteOffset+
630
- (y+1))).written,m.setUint8(y,v),y+=1+v;m.setUint16(y,q.type);y+=2;m.setUint16(y,q.class);y+=2;m.setUint32(y,q.ttl);y+=4;m.setUint16(y,q.data.length);y+=2;y+=Ac(y,q.data,m,a)}n=r+y}else b.ntp?(n=m,q=a.udp_payload_view,q.setUint8(0,b.ntp.flags),q.setUint8(1,b.ntp.stratum),q.setUint8(2,b.ntp.poll),q.setUint8(3,b.ntp.precision),q.setUint32(4,b.ntp.root_delay),q.setUint32(8,b.ntp.root_disp),q.setUint32(12,b.ntp.ref_id),q.setUint32(16,b.ntp.ref_ts_i),q.setUint32(20,b.ntp.ref_ts_f),q.setUint32(24,b.ntp.ori_ts_i),
631
- q.setUint32(28,b.ntp.ori_ts_f),q.setUint32(32,b.ntp.rec_ts_i),q.setUint32(36,b.ntp.rec_ts_f),q.setUint32(40,b.ntp.trans_ts_i),q.setUint32(44,b.ntp.trans_ts_f),n+=48):n=m+Ac(0,b.udp.data,a.udp_payload_view,a);m=n;l.setUint16(0,b.udp.sport);l.setUint16(2,b.udp.dport);l.setUint16(4,m);l.setUint16(6,0);l.setUint16(6,Bc(m,(b.ipv4.src[0]<<8|b.ipv4.src[1])+(b.ipv4.src[2]<<8|b.ipv4.src[3])+(b.ipv4.dest[0]<<8|b.ipv4.dest[1])+(b.ipv4.dest[2]<<8|b.ipv4.dest[3])+17+m,l,a));f+=m}else b.tcp&&(l=a.ipv4_payload_view,
632
- n=0,q=b.tcp,q.fin&&(n|=1),q.syn&&(n|=2),q.rst&&(n|=4),q.psh&&(n|=8),q.ack&&(n|=16),q.urg&&(n|=32),q.ece&&(n|=64),q.cwr&&(n|=128),l.setUint16(0,q.sport),l.setUint16(2,q.dport),l.setUint32(4,q.seq),l.setUint32(8,q.ackn),l.setUint8(12,80),l.setUint8(13,n),l.setUint16(14,q.winsize),l.setUint16(16,0),l.setUint16(18,q.urgent||0),n=20,b.tcp_data&&(n+=Ac(20,b.tcp_data,l,a)),l.setUint16(16,Bc(n,(b.ipv4.src[0]<<8|b.ipv4.src[1])+(b.ipv4.src[2]<<8|b.ipv4.src[3])+(b.ipv4.dest[0]<<8|b.ipv4.dest[1])+(b.ipv4.dest[2]<<
633
- 8|b.ipv4.dest[3])+6+n,l,a)),f+=n);g.setUint8(0,69);g.setUint8(1,b.ipv4.tos||0);g.setUint16(2,f);g.setUint16(4,b.ipv4.id||0);g.setUint8(6,64);g.setUint8(8,b.ipv4.ttl||32);g.setUint8(9,b.ipv4.proto);g.setUint16(10,0);Ac(12,b.ipv4.src,g,a);Ac(16,b.ipv4.dest,g,a);g.setUint16(10,Bc(20,0,g,a));e+=f}return d.call(c,0,e)}function Dc(a,b){fetch(`https://${b.doh_server||"cloudflare-dns.com"}/dns-query`,{method:"POST",headers:[["content-type","application/dns-message"]],body:a.udp.data}).then(async c=>{c={eth:{ethertype:2048,
634
- src:b.router_mac,dest:a.eth.src},ipv4:{proto:17,src:b.router_ip,dest:a.ipv4.src},udp:{sport:53,dport:a.udp.sport,data:new Uint8Array(await c.arrayBuffer())}};b.receive(Cc(b.eth_encoder_buf,c))});return!0}function Ec(a,b){let c={};c.eth={ethertype:2048,src:b.router_mac,dest:a.eth.src};c.ipv4={proto:17,src:b.router_ip,dest:b.vm_ip};c.udp={sport:67,dport:68};c.dhcp={htype:1,hlen:6,hops:0,xid:a.dhcp.xid,secs:0,flags:0,ciaddr:0,yiaddr:xc(b.vm_ip),siaddr:xc(b.router_ip),giaddr:xc(b.router_ip),chaddr:a.dhcp.chaddr};
635
- let d=[],e=a.dhcp.options.find(function(g){return 53===g[0]});e&&3===e[2]&&(a.dhcp.op=3);1===a.dhcp.op&&(c.dhcp.op=2,d.push(new Uint8Array([53,1,2])));3===a.dhcp.op&&(c.dhcp.op=2,d.push(new Uint8Array([53,1,5])),d.push(new Uint8Array([51,4,8,0,0,0])));a=[b.router_ip[0],b.router_ip[1],b.router_ip[2],b.router_ip[3]];d.push(new Uint8Array([1,4,255,255,255,0]));b.masquerade&&(d.push(new Uint8Array([3,4].concat(a))),d.push(new Uint8Array([6,4].concat(a))));d.push(new Uint8Array([54,4].concat(a)));d.push(new Uint8Array([60,
636
- 3].concat(vc)));d.push(new Uint8Array([255,0]));c.dhcp.options=d;b.receive(Cc(b.eth_encoder_buf,c))}function Fc(a,b){let c={};var d=(new DataView(a.buffer,a.byteOffset,a.byteLength)).getUint16(12),e={ethertype:d,dest:a.subarray(0,6),dest_s:wc(a.subarray(0,6)),src:a.subarray(6,12),src_s:wc(a.subarray(6,12))};c.eth=e;a=a.subarray(14,a.length);if(2048===d){var g=new DataView(a.buffer,a.byteOffset,a.byteLength),f=a[0]>>4&15;e=a[0]&15;var l=g.getUint8(1),n=g.getUint16(2);let m=g.getUint8(8);d=g.getUint8(9);
637
- g=g.getUint16(10);f={version:f,ihl:e,tos:l,len:n,ttl:m,proto:d,ip_checksum:g,src:a.subarray(12,16),dest:a.subarray(16,20)};Math.max(n,46)!==a.length&&E(`ipv4 Length mismatch: ${n} != ${a.length}`,16777216);c.ipv4=f;e=a.subarray(4*e,n);if(1===d)a=new DataView(e.buffer,e.byteOffset,e.byteLength),a={type:a.getUint8(0),code:a.getUint8(1),checksum:a.getUint16(2),data:e.subarray(4)},c.icmp=a;else if(6===d)d=new DataView(e.buffer,e.byteOffset,e.byteLength),a={sport:d.getUint16(0),dport:d.getUint16(2),seq:d.getUint32(4),
638
- ackn:d.getUint32(8),doff:d.getUint8(12)>>4,winsize:d.getUint16(14),checksum:d.getUint16(16),urgent:d.getUint16(18)},d=d.getUint8(13),a.fin=!!(d&1),a.syn=!!(d&2),a.rst=!!(d&4),a.psh=!!(d&8),a.ack=!!(d&16),a.urg=!!(d&32),a.ece=!!(d&64),a.cwr=!!(d&128),c.tcp=a,c.tcp_data=e.subarray(4*a.doff);else if(17===d){a=new DataView(e.buffer,e.byteOffset,e.byteLength);a={sport:a.getUint16(0),dport:a.getUint16(2),len:a.getUint16(4),checksum:a.getUint16(6),data:e.subarray(8),data_s:(new TextDecoder).decode(e.subarray(8))};
639
- if(67===a.dport||67===a.sport){e=e.subarray(8);d=new DataView(e.buffer,e.byteOffset,e.byteLength);e.subarray(44,236);d={op:d.getUint8(0),htype:d.getUint8(1),hlen:d.getUint8(2),hops:d.getUint8(3),xid:d.getUint32(4),secs:d.getUint16(8),flags:d.getUint16(10),ciaddr:d.getUint32(12),yiaddr:d.getUint32(16),siaddr:d.getUint32(20),giaddr:d.getUint32(24),chaddr:e.subarray(28,44),magic:d.getUint32(236),options:[]};e=e.subarray(240);for(n=0;n<e.length;++n)f=n,0!==e[n]&&(++n,l=e[n],n+=l,d.options.push(e.subarray(f,
640
- f+l+2)));c.dhcp=d;c.dhcp_options=d.options}else 53===a.dport||53===a.sport?Gc(e.subarray(8),c):123===a.dport&&(d=e.subarray(8),d=new DataView(d.buffer,d.byteOffset,d.byteLength),c.ntp={flags:d.getUint8(0),stratum:d.getUint8(1),poll:d.getUint8(2),precision:d.getUint8(3),root_delay:d.getUint32(4),root_disp:d.getUint32(8),ref_id:d.getUint32(12),ref_ts_i:d.getUint32(16),ref_ts_f:d.getUint32(20),ori_ts_i:d.getUint32(24),ori_ts_f:d.getUint32(28),rec_ts_i:d.getUint32(32),rec_ts_f:d.getUint32(36),trans_ts_i:d.getUint32(40),
641
- trans_ts_f:d.getUint32(44)});c.udp=a}}else 2054===d?(d=new DataView(a.buffer,a.byteOffset,a.byteLength),a={htype:d.getUint16(0),ptype:d.getUint16(2),oper:d.getUint16(6),sha:a.subarray(8,14),spa:a.subarray(14,18),tha:a.subarray(18,24),tpa:a.subarray(24,28)},c.arp=a):34525===d?E("Unimplemented: ipv6"):E("Unknown ethertype: "+B(d),16777216);if(c.ipv4)if(c.tcp)a:{a=`${c.ipv4.src.join(".")}:${c.tcp.sport}:${c.ipv4.dest.join(".")}:${c.tcp.dport}`;if(c.tcp.syn&&(b.tcp_conn[a]&&E("SYN to already opened port",
642
- 16777216),b.on_tcp_connection(c,a)))break a;if(b.tcp_conn[a])b.tcp_conn[a].process(c);else{E(`I dont know about ${a}, so resetting`,16777216);a=c.tcp.ackn;if(c.tcp.fin||c.tcp.syn)a+=1;d={};d.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src};d.ipv4={proto:6,src:c.ipv4.dest,dest:c.ipv4.src};d.tcp={sport:c.tcp.dport,dport:c.tcp.sport,seq:a,ackn:c.tcp.seq+(c.tcp.syn?1:0),winsize:c.tcp.winsize,rst:!0,ack:c.tcp.syn};b.receive(Cc(b.eth_encoder_buf,d))}}else if(c.udp)if(c.dns)if("static"===b.dns_method){a=
643
- {};a.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src};a.ipv4={proto:17,src:b.router_ip,dest:c.ipv4.src};a.udp={sport:53,dport:c.udp.sport};d=[];for(e=0;e<c.dns.questions.length;++e)switch(n=c.dns.questions[e],n.type){case 1:d.push({name:n.name,type:n.type,class:n.class,ttl:600,data:[192,168,87,1]})}a.dns={id:c.dns.id,flags:33152,questions:c.dns.questions,answers:d};b.receive(Cc(b.eth_encoder_buf,a))}else Dc(c,b);else c.dhcp?Ec(c,b):c.ntp?(a=Date.now()+tc,d=a%1E3/1E3*uc,e={},e.eth={ethertype:2048,
644
- src:b.router_mac,dest:c.eth.src},e.ipv4={proto:17,src:c.ipv4.dest,dest:c.ipv4.src},e.udp={sport:123,dport:c.udp.sport},e.ntp=Object.assign({},c.ntp),e.ntp.flags=36,e.ntp.poll=10,e.ntp.ori_ts_i=c.ntp.trans_ts_i,e.ntp.ori_ts_f=c.ntp.trans_ts_f,e.ntp.rec_ts_i=a/1E3,e.ntp.rec_ts_f=d,e.ntp.trans_ts_i=a/1E3,e.ntp.trans_ts_f=d,e.ntp.stratum=2,b.receive(Cc(b.eth_encoder_buf,e))):8===c.udp.dport&&(a={},a.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src},a.ipv4={proto:17,src:c.ipv4.dest,dest:c.ipv4.src},
645
- a.udp={sport:c.udp.dport,dport:c.udp.sport,data:(new TextEncoder).encode(c.udp.data_s)},b.receive(Cc(b.eth_encoder_buf,a)));else c.icmp&&8===c.icmp.type&&(a={},a.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src},a.ipv4={proto:1,src:c.ipv4.dest,dest:c.ipv4.src},a.icmp={type:0,code:c.icmp.code,data:c.icmp.data},b.receive(Cc(b.eth_encoder_buf,a)));else c.arp&&1===c.arp.oper&&2048===c.arp.ptype&&(a=xc(c.arp.tpa)&4294967040,d=xc(b.router_ip)&4294967040,!b.masquerade&&a!==d||a===d&&99<c.arp.tpa[3]||
646
- (a={},a.eth={ethertype:2054,src:b.router_mac,dest:c.eth.src},a.arp={htype:1,ptype:2048,oper:2,sha:b.router_mac,spa:c.arp.tpa,tha:c.eth.src,tpa:c.arp.spa},b.receive(Cc(b.eth_encoder_buf,a))))}function Gc(a,b){function c(){let m=[],q;do q=d.getUint8(l),m.push((new TextDecoder).decode(a.subarray(l+1,l+1+q))),l+=q+1;while(0<q);return m}let d=new DataView(a.buffer,a.byteOffset,a.byteLength),e={id:d.getUint16(0),flags:d.getUint16(2),questions:[],answers:[]};var g=d.getUint16(4);let f=d.getUint16(6);d.getUint16(8);
647
- d.getUint16(10);let l=12;for(var n=0;n<g;n++)e.questions.push({name:c(),type:d.getInt16(l),class:d.getInt16(l+2)}),l+=4;for(g=0;g<f;g++){n={name:c(),type:d.getInt16(l),class:d.getUint16(l+2),ttl:d.getUint32(l+4)};l+=8;let m=d.getUint16(l);l+=2;n.data=a.subarray(l,l+m);l+=m;e.answers.push(n)}b.dns=e}function Hc(a,b){var c=b.vm_ip.join(".");const d=b.router_ip.join("."),e=16383*Math.random()|0;let g,f,l=0;do g=49152+(e+l)%16383,f=`${c}:${a}:${d}:${g}`;while(16383>++l&&b.tcp_conn[f]);if(b.tcp_conn[f])throw Error("pool of dynamic TCP port numbers exhausted, connection aborted");
648
- c=new Ic;c.tuple=f;c.hsrc=b.router_mac;c.psrc=b.router_ip;c.sport=g;c.hdest=b.vm_mac;c.dport=a;c.pdest=b.vm_ip;c.net=b;b.tcp_conn[f]=c;c.connect();return c}function Jc(a,b){return new Promise(c=>{let d=Hc(a,b);d.state="syn-probe";d.on("probe",c)})}function Ic(){this.state="closed";this.net=null;this.send_buffer=new yc(2048,0);this.send_chunk_buf=new Uint8Array(1460);this.delayed_send_fin=this.in_active_close=!1;this.delayed_state=void 0;this.events_handlers={}}Ic.prototype.on=function(a,b){this.events_handlers[a]=
649
- b};Ic.prototype.emit=function(a,...b){this.events_handlers[a]&&this.events_handlers[a].apply(this,b)};Ic.prototype.ipv4_reply=function(){let a={};a.eth={ethertype:2048,src:this.hsrc,dest:this.hdest};a.ipv4={proto:6,src:this.psrc,dest:this.pdest};a.tcp={sport:this.sport,dport:this.dport,winsize:this.winsize,ackn:this.ack,seq:this.seq,ack:!0};return a};Ic.prototype.packet_reply=function(a,b){a={sport:a.tcp.dport,dport:a.tcp.sport,winsize:a.tcp.winsize,ackn:this.ack,seq:this.seq};if(b)for(const c in b)a[c]=
650
- b[c];b=this.ipv4_reply();b.tcp=a;return b};Ic.prototype.connect=function(){this.seq=1338;this.ack=1;this.start_seq=0;this.winsize=64240;this.state="syn-sent";let a=this.ipv4_reply();a.ipv4.id=2345;a.tcp={sport:this.sport,dport:this.dport,seq:1337,ackn:0,winsize:0,syn:!0};this.net.receive(Cc(this.net.eth_encoder_buf,a))};Ic.prototype.accept=function(a){this.seq=1338;this.ack=a.tcp.seq+1;this.start_seq=a.tcp.seq;this.hsrc=this.net.router_mac;this.psrc=a.ipv4.dest;this.sport=a.tcp.dport;this.hdest=a.eth.src;
651
- this.dport=a.tcp.sport;this.pdest=a.ipv4.src;this.winsize=a.tcp.winsize;let b=this.ipv4_reply();b.tcp={sport:this.sport,dport:this.dport,seq:1337,ackn:this.ack,winsize:a.tcp.winsize,syn:!0,ack:!0};this.state="established";this.net.receive(Cc(this.net.eth_encoder_buf,b))};Ic.prototype.process=function(a){if("closed"===this.state)a=this.packet_reply(a,{rst:!0}),this.net.receive(Cc(this.net.eth_encoder_buf,a));else if(a.tcp.rst){if("syn-probe"===this.state)this.emit("probe",!1);else this.on_close();
652
- this.release()}else if(a.tcp.syn){if("syn-sent"===this.state&&a.tcp.ack){this.ack=a.tcp.seq+1;this.start_seq=a.tcp.seq;this.last_received_ackn=a.tcp.ackn;var b=this.ipv4_reply();this.net.receive(Cc(this.net.eth_encoder_buf,b));this.state="established";this.emit("connect")}else"syn-probe"===this.state&&a.tcp.ack?(this.emit("probe",!0),b=this.packet_reply(a,{rst:!0}),this.net.receive(Cc(this.net.eth_encoder_buf,b)),this.release()):E(`TCP[${this.tuple}]: WARNING: unexpected SYN packet dropped`,16777216);
653
- a.tcp_data.length&&E(`TCP[${this.tuple}]: WARNING: ${a.tcp_data.length} bytes of unexpected SYN packet payload dropped`,16777216)}else{if(a.tcp.ack)if("syn-received"===this.state)this.state="established";else if("fin-wait-1"===this.state)a.tcp.fin||(this.state="fin-wait-2");else if("closing"===this.state||"last-ack"===this.state){this.release();return}if(void 0===this.last_received_ackn)this.last_received_ackn=a.tcp.ackn;else if(b=a.tcp.ackn-this.last_received_ackn,0<b){if(this.last_received_ackn=
654
- a.tcp.ackn,this.send_buffer.remove(b),this.seq+=b,this.pending=!1,this.delayed_send_fin&&!this.send_buffer.length){this.delayed_send_fin=!1;this.state=this.delayed_state;a=this.ipv4_reply();a.tcp.fin=!0;this.net.receive(Cc(this.net.eth_encoder_buf,a));return}}else if(0>b){E(`TCP[${this.tuple}]: ERROR: ack underflow (pkt=${a.tcp.ackn} last=${this.last_received_ackn}), resetting`,16777216);a=this.packet_reply(a,{rst:!0});this.net.receive(Cc(this.net.eth_encoder_buf,a));this.on_close();this.release();
655
- return}a.tcp.fin?(this.ack!==a.tcp.seq&&E(`TCP[${this.tuple}]: WARNING: closing connection in state "${this.state}" with invalid seq (${this.ack} != ${a.tcp.seq})`,16777216),++this.ack,b=this.packet_reply(a,{}),"established"===this.state?(b.tcp.ack=!0,this.state="close-wait",this.on_shutdown()):"fin-wait-1"===this.state?(a.tcp.ack?this.release():this.state="closing",b.tcp.ack=!0):"fin-wait-2"===this.state?(this.release(),b.tcp.ack=!0):(this.release(),this.on_close(),b.tcp.rst=!0),this.net.receive(Cc(this.net.eth_encoder_buf,
656
- b))):this.ack!==a.tcp.seq?(this.ack!==a.tcp.seq+1&&E(`Packet seq was wrong ex: ${this.ack} ~${this.ack-this.start_seq} `+`pk: ${a.tcp.seq} ~${this.start_seq-a.tcp.seq} `+`(${this.ack-a.tcp.seq}) = ${this.name}`,16777216),a=this.packet_reply(a,{ack:!0}),this.net.receive(Cc(this.net.eth_encoder_buf,a))):a.tcp.ack&&0<a.tcp_data.length&&(this.ack+=a.tcp_data.length,b=this.ipv4_reply(),this.net.receive(Cc(this.net.eth_encoder_buf,b)),this.emit("data",a.tcp_data));this.pump()}};Ic.prototype.write=function(a){this.in_active_close||
657
- this.send_buffer.write(a);this.pump()};Ic.prototype.writev=function(a){if(!this.in_active_close)for(const b of a)this.send_buffer.write(b);this.pump()};Ic.prototype.close=function(){if(!this.in_active_close){this.in_active_close=!0;if("established"===this.state||"syn-received"===this.state)var a="fin-wait-1";else if("close-wait"===this.state)a="last-ack";else{"syn-sent"!==this.state&&E(`TCP[${this.tuple}]: active close in unexpected state "${this.state}"`,16777216);this.release();return}this.send_buffer.length||
658
- this.pending?(this.delayed_send_fin=!0,this.delayed_state=a):(this.state=a,a=this.ipv4_reply(),a.tcp.fin=!0,this.net.receive(Cc(this.net.eth_encoder_buf,a)))}this.pump()};Ic.prototype.on_shutdown=function(){this.emit("shutdown")};Ic.prototype.on_close=function(){this.emit("close")};Ic.prototype.release=function(){this.net.tcp_conn[this.tuple]&&(this.state="closed",delete this.net.tcp_conn[this.tuple])};Ic.prototype.pump=function(){if(this.send_buffer.length&&!this.pending){const a=this.send_chunk_buf,
659
- b=this.send_buffer.peek(a),c=this.ipv4_reply();c.tcp.psh=!0;c.tcp_data=a.subarray(0,b);this.net.receive(Cc(this.net.eth_encoder_buf,c));this.pending=!0}};function kc(a,b,c){this.register_ws(a);this.last_stream=1;this.connections={0:{congestion:0}};this.congested_buffer=[];c=c||{};this.bus=b;this.id=c.id||0;this.router_mac=new Uint8Array((c.router_mac||"52:54:0:1:2:3").split(":").map(function(d){return parseInt(d,16)}));this.router_ip=new Uint8Array((c.router_ip||"192.168.86.1").split(".").map(function(d){return parseInt(d,
660
- 10)}));this.vm_ip=new Uint8Array((c.vm_ip||"192.168.86.100").split(".").map(function(d){return parseInt(d,10)}));this.masquerade=void 0===c.masquerade||!!c.masquerade;this.vm_mac=new Uint8Array(6);this.dns_method=c.dns_method||"doh";this.doh_server=c.doh_server;this.tcp_conn={};this.eth_encoder_buf=zc();this.bus.register("net"+this.id+"-mac",function(d){this.vm_mac=new Uint8Array(d.split(":").map(function(e){return parseInt(e,16)}))},this);this.bus.register("net"+this.id+"-send",function(d){this.send(d)},
661
- this)}kc.prototype.register_ws=function(a){this.wispws=new WebSocket(a.replace("wisp://","ws://").replace("wisps://","wss://"));this.wispws.binaryType="arraybuffer";this.wispws.onmessage=b=>{this.process_incoming_wisp_frame(new Uint8Array(b.data))};this.wispws.onclose=()=>{setTimeout(()=>{this.register_ws(a)},1E4)}};kc.prototype.send_packet=function(a,b,c){this.connections[c]&&(0<this.connections[c].congestion?("DATA"===b&&this.connections[c].congestion--,this.wispws.send(a)):(this.connections[c].congested=
662
- !0,this.congested_buffer.push({data:a,type:b})))};kc.prototype.process_incoming_wisp_frame=function(a){const b=new DataView(a.buffer),c=b.getUint32(1,!0);switch(a[0]){case 1:E("Server sent client-only packet CONNECT",1048576);break;case 2:if(this.connections[c])this.connections[c].data_callback(a.slice(5));else throw Error("Got a DATA packet but stream not registered. ID: "+c);break;case 3:this.connections[c]&&(this.connections[c].congestion=b.getUint32(5,!0));if(this.connections[c].congested){for(const d of this.congested_buffer)this.send_packet(d.data,
663
- d.type,c);this.connections[c].congested=!1}break;case 4:this.connections[c]&&this.connections[c].close_callback(b.getUint8(5));delete this.connections[c];break;case 5:E("got a wisp V2 upgrade request, ignoring",1048576);break;default:E("Wisp server returned unknown packet: "+a[0],1048576)}};kc.prototype.send_wisp_frame=function(a){let b,c;switch(a.type){case "CONNECT":const d=(new TextEncoder).encode(a.hostname);b=new Uint8Array(8+d.length);c=new DataView(b.buffer);c.setUint8(0,1);c.setUint32(1,a.stream_id,
664
- !0);c.setUint8(5,1);c.setUint16(6,a.port,!0);b.set(d,8);this.connections[a.stream_id]={data_callback:a.data_callback,close_callback:a.close_callback,congestion:this.connections[0].congestion};break;case "DATA":b=new Uint8Array(5+a.data.length);c=new DataView(b.buffer);c.setUint8(0,2);c.setUint32(1,a.stream_id,!0);b.set(a.data,5);break;case "CLOSE":b=new Uint8Array(6);c=new DataView(b.buffer);c.setUint8(0,4);c.setUint32(1,a.stream_id,!0);c.setUint8(5,a.reason);break;default:E("Client tried to send unknown packet: "+
665
- a.type,1048576)}this.send_packet(b,a.type,a.stream_id)};kc.prototype.destroy=function(){this.wispws&&(this.wispws.onmessage=null,this.wispws.onclose=null,this.wispws.close(),this.wispws=null)};kc.prototype.on_tcp_connection=function(a,b){let c=new Ic;c.state="syn-received";c.net=this;c.tuple=b;c.stream_id=this.last_stream++;this.tcp_conn[b]=c;c.on("data",d=>{0!==d.length&&this.send_wisp_frame({type:"DATA",stream_id:c.stream_id,data:d})});c.on_close=()=>{this.send_wisp_frame({type:"CLOSE",stream_id:c.stream_id,
666
- reason:2})};c.on_shutdown=c.on_close;this.send_wisp_frame({type:"CONNECT",stream_id:c.stream_id,hostname:a.ipv4.dest.join("."),port:a.tcp.dport,data_callback:d=>{c.write(d)},close_callback:()=>{c.close()}});c.accept(a);return!0};kc.prototype.send=function(a){Fc(a,this)};kc.prototype.receive=function(a){this.bus.send("net"+this.id+"-receive",new Uint8Array(a))};function ic(a,b){b=b||{};this.bus=a;this.id=b.id||0;this.router_mac=new Uint8Array((b.router_mac||"52:54:0:1:2:3").split(":").map(function(c){return parseInt(c,
667
- 16)}));this.router_ip=new Uint8Array((b.router_ip||"192.168.86.1").split(".").map(function(c){return parseInt(c,10)}));this.vm_ip=new Uint8Array((b.vm_ip||"192.168.86.100").split(".").map(function(c){return parseInt(c,10)}));this.masquerade=void 0===b.masquerade||!!b.masquerade;this.vm_mac=new Uint8Array(6);this.dns_method=b.dns_method||"static";this.doh_server=b.doh_server;this.tcp_conn={};this.eth_encoder_buf=zc();this.fetch=(...c)=>fetch(...c);this.cors_proxy=b.cors_proxy;this.bus.register("net"+
668
- this.id+"-mac",function(c){this.vm_mac=new Uint8Array(c.split(":").map(function(d){return parseInt(d,16)}))},this);this.bus.register("net"+this.id+"-send",function(c){this.send(c)},this)}J.exportSymbol("FetchNetworkAdapter",ic);ic.prototype.destroy=function(){};ic.prototype.on_tcp_connection=function(a,b){if(80===a.tcp.dport){let c=new Ic;c.state="syn-received";c.net=this;c.on("data",Kc);c.tuple=b;c.accept(a);this.tcp_conn[b]=c;return!0}return!1};ic.prototype.connect=function(a){return Hc(a,this)};
669
- ic.prototype.tcp_probe=function(a){return Jc(a,this)};async function Kc(a){this.read=this.read||"";if((this.read+=(new TextDecoder).decode(a))&&-1!==this.read.indexOf("\r\n\r\n")){var b=this.read.indexOf("\r\n\r\n");a=this.read.substring(0,b).split(/\r\n/);b=this.read.substring(b+4);this.read="";let c=a[0].split(" "),d;d=/^https?:/.test(c[1])?new URL(c[1]):new URL("http://host"+c[1]);"undefined"!==typeof window&&"http:"===d.protocol&&"https:"===window.location.protocol&&(d.protocol="https:");let e=
670
- new Headers;for(let n=1;n<a.length;++n){const m=this.net.parse_http_header(a[n]);if(!m){console.warn('The request contains an invalid header: "%s"',a[n]);this.write((new TextEncoder).encode("HTTP/1.1 400 Bad Request\r\nContent-Length: 0"));return}"host"===m.key.toLowerCase()?d.host=m.value:e.append(m.key,m.value)}E("HTTP Dispatch: "+d.href,16777216);this.name=d.href;a={method:c[0],headers:e};-1!==["put","post"].indexOf(a.method.toLowerCase())&&(a.body=b);const g=this.net.cors_proxy?this.net.cors_proxy+
671
- encodeURIComponent(d.href):d.href,f=new TextEncoder;let l=!1;this.net.fetch(g,a).then(n=>{const m=[`HTTP/1.1 ${n.status} ${n.statusText}`,`x-was-fetch-redirected: ${!!n.redirected}`,`x-fetch-resp-url: ${n.url}`,"Connection: closed"];for(const [q,r]of n.headers.entries())["content-encoding","connection","content-length","transfer-encoding"].includes(q.toLowerCase())||m.push(`${q}: ${r}`);this.write(f.encode(m.join("\r\n")+"\r\n\r\n"));l=!0;if(n.body&&n.body.getReader){const q=n.body.getReader(),r=
672
- ({value:t,done:v})=>{t&&this.write(t);if(v)this.close();else return q.read().then(r)};q.read().then(r)}else n.arrayBuffer().then(q=>{this.write(new Uint8Array(q));this.close()})}).catch(n=>{console.warn("Fetch Failed: "+g+"\n"+n);l||(n=f.encode(`Fetch ${g} failed:\n\n${n.stack||n.message}`),this.writev([f.encode(["HTTP/1.1 502 Fetch Error","Content-Type: text/plain",`Content-Length: ${n.length}`,"Connection: closed"].join("\r\n")+"\r\n\r\n"),n]));this.close()})}}ic.prototype.fetch=async function(a,
673
- b){this.cors_proxy&&(a=this.cors_proxy+encodeURIComponent(a));try{const c=await fetch(a,b),d=await c.arrayBuffer();return[c,d]}catch(c){return console.warn("Fetch Failed: "+a+"\n"+c),b=new Headers,b.set("Content-Type","text/plain"),[{status:502,statusText:"Fetch Error",headers:b},(new TextEncoder).encode(`Fetch ${a} failed:\n\n${c.stack}`).buffer]}};ic.prototype.parse_http_header=function(a){var b=a.match(/^([^:]*):(.*)$/);if(b)if(a=b[1],b=b[2].trim(),0===a.length)E("Header key is empty, raw header",
674
- 16777216);else if(0===b.length)E("Header value is empty",16777216);else if(/^[\w-]+$/.test(a)){if(/^[\x20-\x7E]+$/.test(b))return{key:a,value:b};E("Header value contains forbidden characters",16777216)}else E("Header key contains forbidden characters",16777216);else E("Unable to parse HTTP header",16777216)};ic.prototype.send=function(a){Fc(a,this)};ic.prototype.receive=function(a){this.bus.send("net"+this.id+"-receive",new Uint8Array(a))};const Lc={stats_to_string:function(a){return Lc.print_misc_stats(a)+
675
- Lc.print_instruction_counts(a)},print_misc_stats:function(a){let b="";var c="COMPILE COMPILE_SKIPPED_NO_NEW_ENTRY_POINTS COMPILE_WRONG_ADDRESS_SPACE COMPILE_CUT_OFF_AT_END_OF_PAGE COMPILE_WITH_LOOP_SAFETY COMPILE_PAGE COMPILE_PAGE/COMPILE COMPILE_BASIC_BLOCK COMPILE_DUPLICATED_BASIC_BLOCK COMPILE_WASM_BLOCK COMPILE_WASM_LOOP COMPILE_DISPATCHER COMPILE_ENTRY_POINT COMPILE_WASM_TOTAL_BYTES COMPILE_WASM_TOTAL_BYTES/COMPILE_PAGE RUN_INTERPRETED RUN_INTERPRETED_NEW_PAGE RUN_INTERPRETED_PAGE_HAS_CODE RUN_INTERPRETED_PAGE_HAS_ENTRY_AFTER_PAGE_WALK RUN_INTERPRETED_NEAR_END_OF_PAGE RUN_INTERPRETED_DIFFERENT_STATE RUN_INTERPRETED_DIFFERENT_STATE_CPL3 RUN_INTERPRETED_DIFFERENT_STATE_FLAT RUN_INTERPRETED_DIFFERENT_STATE_IS32 RUN_INTERPRETED_DIFFERENT_STATE_SS32 RUN_INTERPRETED_MISSED_COMPILED_ENTRY_RUN_INTERPRETED RUN_INTERPRETED_STEPS RUN_FROM_CACHE RUN_FROM_CACHE_STEPS RUN_FROM_CACHE_STEPS/RUN_FROM_CACHE RUN_FROM_CACHE_STEPS/RUN_INTERPRETED_STEPS DIRECT_EXIT INDIRECT_JUMP INDIRECT_JUMP_NO_ENTRY NORMAL_PAGE_CHANGE NORMAL_FALLTHRU NORMAL_FALLTHRU_WITH_TARGET_BLOCK NORMAL_BRANCH NORMAL_BRANCH_WITH_TARGET_BLOCK CONDITIONAL_JUMP CONDITIONAL_JUMP_PAGE_CHANGE CONDITIONAL_JUMP_EXIT CONDITIONAL_JUMP_FALLTHRU CONDITIONAL_JUMP_FALLTHRU_WITH_TARGET_BLOCK CONDITIONAL_JUMP_BRANCH CONDITIONAL_JUMP_BRANCH_WITH_TARGET_BLOCK DISPATCHER_SMALL DISPATCHER_LARGE LOOP LOOP_SAFETY CONDITION_OPTIMISED CONDITION_UNOPTIMISED CONDITION_UNOPTIMISED_PF CONDITION_UNOPTIMISED_UNHANDLED_L CONDITION_UNOPTIMISED_UNHANDLED_LE FAILED_PAGE_CHANGE SAFE_READ_FAST SAFE_READ_SLOW_PAGE_CROSSED SAFE_READ_SLOW_NOT_VALID SAFE_READ_SLOW_NOT_USER SAFE_READ_SLOW_IN_MAPPED_RANGE SAFE_WRITE_FAST SAFE_WRITE_SLOW_PAGE_CROSSED SAFE_WRITE_SLOW_NOT_VALID SAFE_WRITE_SLOW_NOT_USER SAFE_WRITE_SLOW_IN_MAPPED_RANGE SAFE_WRITE_SLOW_READ_ONLY SAFE_WRITE_SLOW_HAS_CODE SAFE_READ_WRITE_FAST SAFE_READ_WRITE_SLOW_PAGE_CROSSED SAFE_READ_WRITE_SLOW_NOT_VALID SAFE_READ_WRITE_SLOW_NOT_USER SAFE_READ_WRITE_SLOW_IN_MAPPED_RANGE SAFE_READ_WRITE_SLOW_READ_ONLY SAFE_READ_WRITE_SLOW_HAS_CODE PAGE_FAULT TLB_MISS MAIN_LOOP MAIN_LOOP_IDLE DO_MANY_CYCLES CYCLE_INTERNAL INVALIDATE_ALL_MODULES_NO_FREE_WASM_INDICES INVALIDATE_MODULE_WRITTEN_WHILE_COMPILED INVALIDATE_MODULE_UNUSED_AFTER_OVERWRITE INVALIDATE_MODULE_DIRTY_PAGE INVALIDATE_PAGE_HAD_CODE INVALIDATE_PAGE_HAD_ENTRY_POINTS DIRTY_PAGE_DID_NOT_HAVE_CODE RUN_FROM_CACHE_EXIT_SAME_PAGE RUN_FROM_CACHE_EXIT_NEAR_END_OF_PAGE RUN_FROM_CACHE_EXIT_DIFFERENT_PAGE CLEAR_TLB FULL_CLEAR_TLB TLB_FULL TLB_GLOBAL_FULL MODRM_SIMPLE_REG MODRM_SIMPLE_REG_WITH_OFFSET MODRM_SIMPLE_CONST_OFFSET MODRM_COMPLEX SEG_OFFSET_OPTIMISED SEG_OFFSET_NOT_OPTIMISED SEG_OFFSET_NOT_OPTIMISED_ES SEG_OFFSET_NOT_OPTIMISED_FS SEG_OFFSET_NOT_OPTIMISED_GS SEG_OFFSET_NOT_OPTIMISED_NOT_FLAT".split(" "),
676
- d=0;const e={};for(let f=0;f<c.length;f++){const l=c[f];var g=void 0;if(l.includes("/")){d++;const [n,m]=l.split("/");g=e[n]/e[m]}else g=e[l]=a.wm.exports.profiler_stat_get(f-d),g=1E8<=g?Math.round(g/1E6)+"m":1E5<=g?Math.round(g/1E3)+"k":g;b+=l+"="+g+"\n"}b+="\n";c=a.wm.exports.get_valid_tlb_entries_count();d=a.wm.exports.get_valid_global_tlb_entries_count();b=b+("TLB_ENTRIES="+c+" ("+d+" global, "+(c-d)+" non-global)\nWASM_TABLE_FREE=")+(a.wm.exports.jit_get_wasm_table_index_free_list_count()+"\n");
677
- b+="JIT_CACHE_SIZE="+a.wm.exports.jit_get_cache_size()+"\n";b+="FLAT_SEGMENTS="+a.wm.exports.has_flat_segmentation()+"\n";b+="wasm memory size: "+(a.wasm_memory.buffer.byteLength>>20)+"m\n";b=b+"Config:\nJIT_DISABLED="+(a.wm.exports.get_jit_config(0)+"\n");b+="MAX_PAGES="+a.wm.exports.get_jit_config(1)+"\n";b+="JIT_USE_LOOP_SAFETY="+!!a.wm.exports.get_jit_config(2)+"\n";return b+="MAX_EXTRA_BASIC_BLOCKS="+a.wm.exports.get_jit_config(3)+"\n"},print_instruction_counts:function(a){return[Lc.print_instruction_counts_offset(a,
678
- !1,!1,!1,!1),Lc.print_instruction_counts_offset(a,!0,!1,!1,!1),Lc.print_instruction_counts_offset(a,!1,!0,!1,!1),Lc.print_instruction_counts_offset(a,!1,!1,!0,!1),Lc.print_instruction_counts_offset(a,!1,!1,!1,!0)].join("\n\n")},print_instruction_counts_offset:function(a,b,c,d,e){let g="";var f=[],l=b?"compiled":c?"jit exit":d?"unguarded register":e?"wasm size":"executed";for(let q=0;256>q;q++)for(let r=0;8>r;r++)for(const t of[!1,!0]){var n=a.wm.exports.get_opstats_buffer(b,c,d,e,q,!1,t,r);f.push({opcode:q,
679
- count:n,is_mem:t,fixed_g:r});n=a.wm.exports.get_opstats_buffer(b,c,d,e,q,!0,t,r);f.push({opcode:3840|q,count:n,is_mem:t,fixed_g:r})}a=0;b=new Set([38,46,54,62,100,101,102,103,240,242,243]);for(const {count:q,opcode:r}of f)b.has(r)||(a+=q);if(0===a)return"";c=new Uint32Array(256);b=new Uint32Array(256);for(const {opcode:q,count:r}of f)3840===(q&65280)?b[q&255]+=r:c[q&255]+=r;g=g+"------------------\nTotal: "+(a+"\n");const m=1E7<a?1E3:1;d=Math.max.apply(Math,f.map(({count:q})=>Math.round(q/m)));d=
680
- String(d).length;g+=`Instruction counts ${l} (in ${m}):\n`;for(e=0;256>e;e++)g+=e.toString(16).padStart(2,"0")+":"+k.pads(Math.round(c[e]/m),d),g=15===e%16?g+"\n":g+" ";g=g+"\n"+`Instruction counts ${l} (0f, in ${m}):\n`;for(l=0;256>l;l++)g+=(l&255).toString(16).padStart(2,"0")+":"+k.pads(Math.round(b[l]/m),d),g=15===l%16?g+"\n":g+" ";g+="\n";f=f.filter(({count:q})=>q).sort(({count:q},{count:r})=>r-q);for(const {opcode:q,is_mem:r,fixed_g:t,count:v}of f.slice(0,200))f=q.toString(16)+"_"+t+(r?"_m":
681
- "_r"),g+=f+":"+(v/a*100).toFixed(2)+" ";return g+"\n"}};J.exportSymbol("print_stats",Lc);function mc(){this.filedata=new Map}mc.prototype.read=async function(a,b,c){h(a,"MemoryFileStorage read: sha256sum should be a non-empty string");return(a=this.filedata.get(a))?a.subarray(b,b+c):null};mc.prototype.cache=async function(a,b){h(a,"MemoryFileStorage cache: sha256sum should be a non-empty string");this.filedata.set(a,b)};mc.prototype.uncache=function(a){this.filedata.delete(a)};function nc(a,b){h(b,
682
- "ServerMemoryFileStorage: baseurl should not be empty");b.endsWith("/")||(b+="/");this.storage=a;this.baseurl=b}nc.prototype.load_from_server=function(a){return new Promise(b=>{k.load_file(this.baseurl+a,{done:async c=>{c=new Uint8Array(c);await this.cache(a,c);b(c)}})})};nc.prototype.read=async function(a,b,c){const d=await this.storage.read(a,b,c);return d?d:(await this.load_from_server(a)).subarray(b,b+c)};nc.prototype.cache=async function(a,b){return await this.storage.cache(a,b)};nc.prototype.uncache=
683
- function(a){this.storage.uncache(a)};var ka=32768,ia=16384,la=4;function Z(a,b){this.inodes=[];this.events=[];this.storage=a;this.qidcounter=b||{last_qidnumber:0};this.inodedata={};this.total_size=274877906944;this.used_size=0;this.mounts=[];this.CreateDirectory("",-1)}Z.prototype.get_state=function(){let a=[];a[0]=this.inodes;a[1]=this.qidcounter.last_qidnumber;a[2]=[];for(const [b,c]of Object.entries(this.inodedata))0===(this.inodes[b].mode&ia)&&a[2].push([b,c]);a[3]=this.total_size;a[4]=this.used_size;
684
- return a=a.concat(this.mounts)};Z.prototype.set_state=function(a){this.inodes=a[0].map(b=>{const c=new Mc(0);c.set_state(b);return c});this.qidcounter.last_qidnumber=a[1];this.inodedata={};for(let [b,c]of a[2])c.buffer.byteLength!==c.byteLength&&(c=c.slice()),this.inodedata[b]=c;this.total_size=a[3];this.used_size=a[4];this.mounts=a.slice(5)};Z.prototype.AddEvent=function(a,b){var c=this.inodes[a];0===c.status||2===c.status?b():this.is_forwarder(c)?this.follow_fs(c).AddEvent(c.foreign_id,b):this.events.push({id:a,
685
- OnEvent:b})};Z.prototype.HandleEvent=function(a){var b=this.inodes[a];this.is_forwarder(b)&&this.follow_fs(b).HandleEvent(b.foreign_id);b=[];for(var c=0;c<this.events.length;c++)this.events[c].id===a?this.events[c].OnEvent():b.push(this.events[c]);this.events=b};Z.prototype.load_from_json=function(a){h(a,"Invalid fs passed to load_from_json");if(3!==a.version)throw"The filesystem JSON format has changed. Please update your fs2json (https://github.com/copy/fs2json) and recreate the filesystem JSON.";
686
- var b=a.fsroot;this.used_size=a.size;for(a=0;a<b.length;a++)this.LoadRecursive(b[a],0)};Z.prototype.LoadRecursive=function(a,b){var c=this.CreateInode();const d=a[0];c.size=a[1];c.mtime=a[2];c.ctime=c.mtime;c.atime=c.mtime;c.mode=a[3];c.uid=a[4];c.gid=a[5];var e=c.mode&61440;e===ia?(this.PushInode(c,b,d),this.LoadDir(this.inodes.length-1,a[6])):e===ka?(c.status=2,c.sha256sum=a[6],h(c.sha256sum),this.PushInode(c,b,d)):40960===e?(c.symlink=a[6],this.PushInode(c,b,d)):49152!==e&&E("Unexpected ifmt: "+
687
- B(e)+" ("+d+")")};Z.prototype.LoadDir=function(a,b){for(var c=0;c<b.length;c++)this.LoadRecursive(b[c],a)};Z.prototype.should_be_linked=function(a){return!this.is_forwarder(a)||0===a.foreign_id};Z.prototype.link_under_dir=function(a,b,c){const d=this.inodes[b],e=this.inodes[a];h(!this.is_forwarder(e),"Filesystem: Shouldn't link under fowarder parents");h(this.IsDirectory(a),"Filesystem: Can't link under non-directories");h(this.should_be_linked(d),"Filesystem: Can't link across filesystems apart from their root");
688
- h(0<=d.nlinks,"Filesystem: Found negative nlinks value of "+d.nlinks);h(!e.direntries.has(c),"Filesystem: Name '"+c+"' is already taken");e.direntries.set(c,b);d.nlinks++;this.IsDirectory(b)&&(h(!d.direntries.has(".."),"Filesystem: Cannot link a directory twice"),d.direntries.has(".")||d.nlinks++,d.direntries.set(".",b),d.direntries.set("..",a),e.nlinks++)};Z.prototype.unlink_from_dir=function(a,b){const c=this.Search(a,b),d=this.inodes[c],e=this.inodes[a];h(!this.is_forwarder(e),"Filesystem: Can't unlink from forwarders");
689
- h(this.IsDirectory(a),"Filesystem: Can't unlink from non-directories");e.direntries.delete(b)?(d.nlinks--,this.IsDirectory(c)&&(h(d.direntries.get("..")===a,"Filesystem: Found directory with bad parent id"),d.direntries.delete(".."),e.nlinks--),h(0<=d.nlinks,"Filesystem: Found negative nlinks value of "+d.nlinks)):h(!1,"Filesystem: Can't unlink non-existent file: "+b)};Z.prototype.PushInode=function(a,b,c){-1!==b?(this.inodes.push(a),a.fid=this.inodes.length-1,this.link_under_dir(b,a.fid,c)):0===
690
- this.inodes.length?(this.inodes.push(a),a.direntries.set(".",0),a.direntries.set("..",0),a.nlinks=2):(w.Debug("Error in Filesystem: Pushed inode with name = "+c+" has no parent"),w.Abort())};function Mc(a){this.direntries=new Map;this.minor=this.major=this.mtime=this.atime=this.ctime=this.fid=this.gid=this.uid=this.size=this.status=0;this.symlink="";this.mode=493;this.qid={type:0,version:0,path:a};this.caps=void 0;this.nlinks=0;this.sha256sum="";this.locks=[];this.foreign_id=this.mount_id=-1}Mc.prototype.get_state=
691
- function(){const a=[];a[0]=this.mode;a[1]=(this.mode&61440)===ia?[...this.direntries]:(this.mode&61440)===ka?this.sha256sum:40960===(this.mode&61440)?this.symlink:49152===(this.mode&61440)?[this.minor,this.major]:null;a[2]=this.locks;a[3]=this.status;a[4]=this.size;a[5]=this.uid;a[6]=this.gid;a[7]=this.fid;a[8]=this.ctime;a[9]=this.atime;a[10]=this.mtime;a[11]=this.qid.version;a[12]=this.qid.path;a[13]=this.nlinks;return a};Mc.prototype.set_state=function(a){this.mode=a[0];if((this.mode&61440)===
692
- ia){this.direntries=new Map;for(const [b,c]of a[1])this.direntries.set(b,c)}else(this.mode&61440)===ka?this.sha256sum=a[1]:40960===(this.mode&61440)?this.symlink=a[1]:49152===(this.mode&61440)&&([this.minor,this.major]=a[1]);this.locks=[];for(const b of a[2]){const c=new Nc;c.set_state(b);this.locks.push(c)}this.status=a[3];this.size=a[4];this.uid=a[5];this.gid=a[6];this.fid=a[7];this.ctime=a[8];this.atime=a[9];this.mtime=a[10];this.qid.type=(this.mode&61440)>>8;this.qid.version=a[11];this.qid.path=
693
- a[12];this.nlinks=a[13]};Z.prototype.divert=function(a,b){const c=this.Search(a,b),d=this.inodes[c],e=new Mc(-1);h(d,"Filesystem divert: name ("+b+") not found");h(this.IsDirectory(c)||1>=d.nlinks,"Filesystem: can't divert hardlinked file '"+b+"' with nlinks="+d.nlinks);Object.assign(e,d);const g=this.inodes.length;this.inodes.push(e);e.fid=g;this.is_forwarder(d)&&this.mounts[d.mount_id].backtrack.set(d.foreign_id,g);this.should_be_linked(d)&&(this.unlink_from_dir(a,b),this.link_under_dir(a,g,b));
694
- if(this.IsDirectory(c)&&!this.is_forwarder(d))for(const [f,l]of e.direntries)"."!==f&&".."!==f&&this.IsDirectory(l)&&this.inodes[l].direntries.set("..",g);this.inodedata[g]=this.inodedata[c];delete this.inodedata[c];d.direntries=new Map;d.nlinks=0;return g};Z.prototype.copy_inode=function(a,b){Object.assign(b,a,{fid:b.fid,direntries:b.direntries,nlinks:b.nlinks})};Z.prototype.CreateInode=function(){const a=Math.round(Date.now()/1E3),b=new Mc(++this.qidcounter.last_qidnumber);b.atime=b.ctime=b.mtime=
695
- a;return b};Z.prototype.CreateDirectory=function(a,b){var c=this.inodes[b];if(0<=b&&this.is_forwarder(c))return b=c.foreign_id,a=this.follow_fs(c).CreateDirectory(a,b),this.create_forwarder(c.mount_id,a);c=this.CreateInode();c.mode=511|ia;0<=b&&(c.uid=this.inodes[b].uid,c.gid=this.inodes[b].gid,c.mode=this.inodes[b].mode&511|ia);c.qid.type=ia>>8;this.PushInode(c,b,a);this.NotifyListeners(this.inodes.length-1,"newdir");return this.inodes.length-1};Z.prototype.CreateFile=function(a,b){var c=this.inodes[b];
696
- if(this.is_forwarder(c))return b=c.foreign_id,a=this.follow_fs(c).CreateFile(a,b),this.create_forwarder(c.mount_id,a);c=this.CreateInode();c.uid=this.inodes[b].uid;c.gid=this.inodes[b].gid;c.qid.type=ka>>8;c.mode=this.inodes[b].mode&438|ka;this.PushInode(c,b,a);this.NotifyListeners(this.inodes.length-1,"newfile");return this.inodes.length-1};Z.prototype.CreateNode=function(a,b,c,d){var e=this.inodes[b];if(this.is_forwarder(e))return b=e.foreign_id,a=this.follow_fs(e).CreateNode(a,b,c,d),this.create_forwarder(e.mount_id,
697
- a);e=this.CreateInode();e.major=c;e.minor=d;e.uid=this.inodes[b].uid;e.gid=this.inodes[b].gid;e.qid.type=192;e.mode=this.inodes[b].mode&438;this.PushInode(e,b,a);return this.inodes.length-1};Z.prototype.CreateSymlink=function(a,b,c){var d=this.inodes[b];if(this.is_forwarder(d))return b=d.foreign_id,a=this.follow_fs(d).CreateSymlink(a,b,c),this.create_forwarder(d.mount_id,a);d=this.CreateInode();d.uid=this.inodes[b].uid;d.gid=this.inodes[b].gid;d.qid.type=160;d.symlink=c;d.mode=40960;this.PushInode(d,
698
- b,a);return this.inodes.length-1};Z.prototype.CreateTextFile=async function(a,b,c){var d=this.inodes[b];if(this.is_forwarder(d))return b=d.foreign_id,c=await this.follow_fs(d).CreateTextFile(a,b,c),this.create_forwarder(d.mount_id,c);d=this.CreateFile(a,b);b=this.inodes[d];a=new Uint8Array(c.length);b.size=c.length;for(b=0;b<c.length;b++)a[b]=c.charCodeAt(b);await this.set_data(d,a);return d};Z.prototype.CreateBinaryFile=async function(a,b,c){var d=this.inodes[b];if(this.is_forwarder(d))return b=
699
- d.foreign_id,c=await this.follow_fs(d).CreateBinaryFile(a,b,c),this.create_forwarder(d.mount_id,c);d=this.CreateFile(a,b);a=this.inodes[d];b=new Uint8Array(c.length);b.set(c);await this.set_data(d,b);a.size=c.length;return d};Z.prototype.OpenInode=function(a,b){var c=this.inodes[a];if(this.is_forwarder(c))return this.follow_fs(c).OpenInode(c.foreign_id,b);(c.mode&61440)===ia&&this.FillDirectory(a);return!0};Z.prototype.CloseInode=async function(a){var b=this.inodes[a];if(this.is_forwarder(b))return await this.follow_fs(b).CloseInode(b.foreign_id);
700
- 2===b.status&&this.storage.uncache(b.sha256sum);b.status===la&&(b.status=-1,await this.DeleteData(a))};Z.prototype.Rename=async function(a,b,c,d){if(a===c&&b===d)return 0;var e=this.Search(a,b);if(-1===e)return-2;var g=this.GetFullPath(a)+"/"+b;if(-1!==this.Search(c,d)){var f=this.Unlink(c,d);if(0>f)return f}var l=this.inodes[e],n=this.inodes[a];f=this.inodes[c];if(this.is_forwarder(n)||this.is_forwarder(f))if(this.is_forwarder(n)&&n.mount_id===f.mount_id){if(a=await this.follow_fs(n).Rename(n.foreign_id,
701
- b,f.foreign_id,d),0>a)return a}else{if(this.is_a_root(e))return E("XXX: Attempted to move mountpoint ("+b+") - skipped",4194304),-1;if(!this.IsDirectory(e)&&1<this.GetInode(e).nlinks)return E("XXX: Attempted to move hardlinked file ("+b+") across filesystems - skipped",4194304),-1;n=this.divert(a,b);const m=this.GetInode(e),q=await this.Read(n,0,m.size);this.is_forwarder(f)?(c=this.follow_fs(f),d=this.IsDirectory(n)?c.CreateDirectory(d,f.foreign_id):c.CreateFile(d,f.foreign_id),c=c.GetInode(d),this.copy_inode(m,
702
- c),this.set_forwarder(e,f.mount_id,d)):(this.delete_forwarder(l),this.copy_inode(m,l),this.link_under_dir(c,e,d));await this.ChangeSize(e,m.size);q&&q.length&&await this.Write(e,0,q.length,q);if(this.IsDirectory(e))for(const r of this.GetChildren(n))if(f=await this.Rename(n,r,e,r),0>f)return f;await this.DeleteData(n);a=this.Unlink(a,b);if(0>a)return a}else this.unlink_from_dir(a,b),this.link_under_dir(c,e,d),l.qid.version++;this.NotifyListeners(e,"rename",{oldpath:g});return 0};Z.prototype.Write=
703
- async function(a,b,c,d){this.NotifyListeners(a,"write");var e=this.inodes[a];if(this.is_forwarder(e))a=e.foreign_id,await this.follow_fs(e).Write(a,b,c,d);else{var g=await this.get_buffer(a);!g||g.length<b+c?(await this.ChangeSize(a,Math.floor(3*(b+c)/2)),e.size=b+c,g=await this.get_buffer(a)):e.size<b+c&&(e.size=b+c);d&&g.set(d.subarray(0,c),b);await this.set_data(a,g)}};Z.prototype.Read=async function(a,b,c){const d=this.inodes[a];return this.is_forwarder(d)?(a=d.foreign_id,await this.follow_fs(d).Read(a,
704
- b,c)):await this.get_data(a,b,c)};Z.prototype.Search=function(a,b){a=this.inodes[a];if(this.is_forwarder(a)){const c=a.foreign_id;b=this.follow_fs(a).Search(c,b);return-1===b?-1:this.get_forwarder(a.mount_id,b)}b=a.direntries.get(b);return void 0===b?-1:b};Z.prototype.CountUsedInodes=function(){let a=this.inodes.length;for(const {fs:b,backtrack:c}of this.mounts)a+=b.CountUsedInodes(),a-=c.size;return a};Z.prototype.CountFreeInodes=function(){let a=1048576;for(const {fs:b}of this.mounts)a+=b.CountFreeInodes();
705
- return a};Z.prototype.GetTotalSize=function(){let a=this.used_size;for(const {fs:b}of this.mounts)a+=b.GetTotalSize();return a};Z.prototype.GetSpace=function(){let a=this.total_size;for(const {fs:b}of this.mounts)a+=b.GetSpace();return this.total_size};Z.prototype.GetDirectoryName=function(a){const b=this.inodes[this.GetParent(a)];if(this.is_forwarder(b))return this.follow_fs(b).GetDirectoryName(this.inodes[a].foreign_id);if(!b)return"";for(const [c,d]of b.direntries)if(d===a)return c;h(!1,"Filesystem: Found directory inode whose parent doesn't link to it");
706
- return""};Z.prototype.GetFullPath=function(a){h(this.IsDirectory(a),"Filesystem: Cannot get full path of non-directory inode");for(var b="";0!==a;)b="/"+this.GetDirectoryName(a)+b,a=this.GetParent(a);return b.substring(1)};Z.prototype.Link=function(a,b,c){if(this.IsDirectory(b))return-1;const d=this.inodes[a],e=this.inodes[b];if(this.is_forwarder(d))return this.is_forwarder(e)&&e.mount_id===d.mount_id?this.follow_fs(d).Link(d.foreign_id,e.foreign_id,c):(E("XXX: Attempted to hardlink a file into a child filesystem - skipped",
707
- 4194304),-1);if(this.is_forwarder(e))return E("XXX: Attempted to hardlink file across filesystems - skipped",4194304),-1;this.link_under_dir(a,b,c);return 0};Z.prototype.Unlink=function(a,b){if("."===b||".."===b)return-1;const c=this.Search(a,b),d=this.inodes[c],e=this.inodes[a];if(this.is_forwarder(e))return h(this.is_forwarder(d),"Children of forwarders should be forwarders"),a=e.foreign_id,this.follow_fs(e).Unlink(a,b);if(this.IsDirectory(c)&&!this.IsEmpty(c))return-39;this.unlink_from_dir(a,b);
708
- 0===d.nlinks&&(d.status=la,this.NotifyListeners(c,"delete"));return 0};Z.prototype.DeleteData=async function(a){const b=this.inodes[a];this.is_forwarder(b)?await this.follow_fs(b).DeleteData(b.foreign_id):(b.size=0,delete this.inodedata[a])};Z.prototype.get_buffer=async function(a){const b=this.inodes[a];h(b,`Filesystem get_buffer: idx ${a} does not point to an inode`);return this.inodedata[a]?this.inodedata[a]:2===b.status?(h(b.sha256sum,"Filesystem get_data: found inode on server without sha256sum"),
709
- await this.storage.read(b.sha256sum,0,b.size)):null};Z.prototype.get_data=async function(a,b,c){const d=this.inodes[a];h(d,`Filesystem get_data: idx ${a} does not point to an inode`);return this.inodedata[a]?this.inodedata[a].subarray(b,b+c):2===d.status?(h(d.sha256sum,"Filesystem get_data: found inode on server without sha256sum"),await this.storage.read(d.sha256sum,b,c)):null};Z.prototype.set_data=async function(a,b){this.inodedata[a]=b;2===this.inodes[a].status&&(this.inodes[a].status=0,this.storage.uncache(this.inodes[a].sha256sum))};
710
- Z.prototype.GetInode=function(a){h(!isNaN(a),"Filesystem GetInode: NaN idx");h(0<=a&&a<this.inodes.length,"Filesystem GetInode: out of range idx:"+a);a=this.inodes[a];return this.is_forwarder(a)?this.follow_fs(a).GetInode(a.foreign_id):a};Z.prototype.ChangeSize=async function(a,b){var c=this.GetInode(a),d=await this.get_data(a,0,c.size);if(b!==c.size){var e=new Uint8Array(b);c.size=b;d&&e.set(d.subarray(0,Math.min(d.length,c.size)),0);await this.set_data(a,e)}};Z.prototype.SearchPath=function(a){a=
711
- a.replace("//","/");a=a.split("/");0<a.length&&0===a[a.length-1].length&&a.pop();0<a.length&&0===a[0].length&&a.shift();const b=a.length;var c=-1,d=0;let e=null;for(var g=0;g<b;g++)if(c=d,d=this.Search(c,a[g]),!e&&this.is_forwarder(this.inodes[c])&&(e="/"+a.slice(g).join("/")),-1===d)return g<b-1?{id:-1,parentid:-1,name:a[g],forward_path:e}:{id:-1,parentid:c,name:a[g],forward_path:e};return{id:d,parentid:c,name:a[g],forward_path:e}};Z.prototype.GetRecursiveList=function(a,b){if(this.is_forwarder(this.inodes[a])){const c=
712
- this.follow_fs(this.inodes[a]),d=this.inodes[a].mount_id,e=b.length;c.GetRecursiveList(this.inodes[a].foreign_id,b);for(a=e;a<b.length;a++)b[a].parentid=this.get_forwarder(d,b[a].parentid)}else for(const [c,d]of this.inodes[a].direntries)"."!==c&&".."!==c&&(b.push({parentid:a,name:c}),this.IsDirectory(d)&&this.GetRecursiveList(d,b))};Z.prototype.RecursiveDelete=function(a){var b=[];a=this.SearchPath(a);if(-1!==a.id)for(this.GetRecursiveList(a.id,b),a=b.length-1;0<=a;a--){const c=this.Unlink(b[a].parentid,
713
- b[a].name);h(0===c,"Filesystem RecursiveDelete failed at parent="+b[a].parentid+", name='"+b[a].name+"' with error code: "+-c)}};Z.prototype.DeleteNode=function(a){var b=this.SearchPath(a);-1!==b.id&&((this.inodes[b.id].mode&61440)===ka?(a=this.Unlink(b.parentid,b.name),h(0===a,"Filesystem DeleteNode failed with error code: "+-a)):(this.inodes[b.id].mode&61440)===ia&&(this.RecursiveDelete(a),a=this.Unlink(b.parentid,b.name),h(0===a,"Filesystem DeleteNode failed with error code: "+-a)))};Z.prototype.NotifyListeners=
714
- function(){};Z.prototype.Check=function(){for(var a=1;a<this.inodes.length;a++)if(-1!==this.inodes[a].status){var b=this.GetInode(a);0>b.nlinks&&w.Debug("Error in filesystem: negative nlinks="+b.nlinks+" at id ="+a);if(this.IsDirectory(a)){b=this.GetInode(a);this.IsDirectory(a)&&0>this.GetParent(a)&&w.Debug("Error in filesystem: negative parent id "+a);for(const [c,d]of b.direntries){0===c.length&&w.Debug("Error in filesystem: inode with no name and id "+d);for(const e of c)32>e&&w.Debug("Error in filesystem: Unallowed char in filename")}}}};
715
- Z.prototype.FillDirectory=function(a){var b=this.inodes[a];if(this.is_forwarder(b))this.follow_fs(b).FillDirectory(b.foreign_id);else{var c=0;for(const d of b.direntries.keys())c+=24+Oc.encode(d).length;a=this.inodedata[a]=new Uint8Array(c);b.size=c;c=0;for(const [d,e]of b.direntries)b=this.GetInode(e),c+=p.Marshall(["Q","d","b","s"],[b.qid,c+13+8+1+2+Oc.encode(d).length,b.mode>>12,d],a,c)}};Z.prototype.RoundToDirentry=function(a,b){const c=this.inodedata[a];h(c,`FS directory data for dirid=${a} should be generated`);
716
- h(c.length,"FS directory should have at least an entry");if(b>=c.length)return c.length;for(a=0;;){const d=p.Unmarshall(["Q","d"],c,{offset:a})[1];if(d>b)break;a=d}return a};Z.prototype.IsDirectory=function(a){a=this.inodes[a];return this.is_forwarder(a)?this.follow_fs(a).IsDirectory(a.foreign_id):(a.mode&61440)===ia};Z.prototype.IsEmpty=function(a){a=this.inodes[a];if(this.is_forwarder(a))return this.follow_fs(a).IsDirectory(a.foreign_id);for(const b of a.direntries.keys())if("."!==b&&".."!==b)return!1;
717
- return!0};Z.prototype.GetChildren=function(a){h(this.IsDirectory(a),"Filesystem: cannot get children of non-directory inode");a=this.inodes[a];if(this.is_forwarder(a))return this.follow_fs(a).GetChildren(a.foreign_id);const b=[];for(const c of a.direntries.keys())"."!==c&&".."!==c&&b.push(c);return b};Z.prototype.GetParent=function(a){h(this.IsDirectory(a),"Filesystem: cannot get parent of non-directory inode");a=this.inodes[a];if(this.should_be_linked(a))return a.direntries.get("..");const b=this.follow_fs(a).GetParent(a.foreign_id);
718
- h(-1!==b,"Filesystem: should not have invalid parent ids");return this.get_forwarder(a.mount_id,b)};Z.prototype.PrepareCAPs=function(a){a=this.GetInode(a);if(a.caps)return a.caps.length;a.caps=new Uint8Array(20);a.caps[0]=0;a.caps[1]=0;a.caps[2]=0;a.caps[3]=2;a.caps[4]=255;a.caps[5]=255;a.caps[6]=255;a.caps[7]=255;a.caps[8]=255;a.caps[9]=255;a.caps[10]=255;a.caps[11]=255;a.caps[12]=63;a.caps[13]=0;a.caps[14]=0;a.caps[15]=0;a.caps[16]=63;a.caps[17]=0;a.caps[18]=0;a.caps[19]=0;return a.caps.length};
719
- function Pc(a){this.fs=a;this.backtrack=new Map}Pc.prototype.get_state=function(){const a=[];a[0]=this.fs;a[1]=[...this.backtrack];return a};Pc.prototype.set_state=function(a){this.fs=a[0];this.backtrack=new Map(a[1])};Z.prototype.set_forwarder=function(a,b,c){const d=this.inodes[a];h(0===d.nlinks,"Filesystem: attempted to convert an inode into forwarder before unlinking the inode");this.is_forwarder(d)&&this.mounts[d.mount_id].backtrack.delete(d.foreign_id);d.status=5;d.mount_id=b;d.foreign_id=c;
720
- this.mounts[b].backtrack.set(c,a)};Z.prototype.create_forwarder=function(a,b){const c=this.CreateInode(),d=this.inodes.length;this.inodes.push(c);c.fid=d;this.set_forwarder(d,a,b);return d};Z.prototype.is_forwarder=function(a){return 5===a.status};Z.prototype.is_a_root=function(a){return 0===this.GetInode(a).fid};Z.prototype.get_forwarder=function(a,b){var c=this.mounts[a];h(0<=b,"Filesystem get_forwarder: invalid foreign_id: "+b);h(c,"Filesystem get_forwarder: invalid mount number: "+a);c=c.backtrack.get(b);
721
- return void 0===c?this.create_forwarder(a,b):c};Z.prototype.delete_forwarder=function(a){h(this.is_forwarder(a),"Filesystem delete_forwarder: expected forwarder");a.status=-1;this.mounts[a.mount_id].backtrack.delete(a.foreign_id)};Z.prototype.follow_fs=function(a){const b=this.mounts[a.mount_id];h(this.is_forwarder(a),"Filesystem follow_fs: inode should be a forwarding inode");h(b,"Filesystem follow_fs: inode<id="+a.fid+"> should point to valid mounted FS");return b.fs};Z.prototype.Mount=function(a,
722
- b){h(b.qidcounter===this.qidcounter,"Cannot mount filesystem whose qid numbers aren't synchronised with current filesystem.");var c=this.SearchPath(a);if(-1===c.parentid)return E("Mount failed: parent for path not found: "+a,4194304),-2;if(-1!==c.id)return E("Mount failed: file already exists at path: "+a,4194304),-17;if(c.forward_path)return a=this.inodes[c.parentid],c=this.follow_fs(a).Mount(c.forward_path,b),0>c?c:this.get_forwarder(a.mount_id,c);a=this.mounts.length;this.mounts.push(new Pc(b));
723
- b=this.create_forwarder(a,0);this.link_under_dir(c.parentid,b,c.name);return b};function Nc(){this.type=2;this.start=0;this.length=Infinity;this.proc_id=-1;this.client_id=""}Nc.prototype.get_state=function(){const a=[];a[0]=this.type;a[1]=this.start;a[2]=Infinity===this.length?0:this.length;a[3]=this.proc_id;a[4]=this.client_id;return a};Nc.prototype.set_state=function(a){this.type=a[0];this.start=a[1];this.length=0===a[2]?Infinity:a[2];this.proc_id=a[3];this.client_id=a[4]};Nc.prototype.clone=function(){const a=
724
- new Nc;a.set_state(this.get_state());return a};Nc.prototype.conflicts_with=function(a){return this.proc_id===a.proc_id&&this.client_id===a.client_id||2===this.type||2===a.type||1!==this.type&&1!==a.type||this.start+this.length<=a.start||a.start+a.length<=this.start?!1:!0};Nc.prototype.is_alike=function(a){return a.proc_id===this.proc_id&&a.client_id===this.client_id&&a.type===this.type};Nc.prototype.may_merge_after=function(a){return this.is_alike(a)&&a.start+a.length===this.start};Z.prototype.DescribeLock=
725
- function(a,b,c,d,e){h(0===a||1===a||2===a,"Filesystem: Invalid lock type: "+a);h(0<=b,"Filesystem: Invalid negative lock starting offset: "+b);h(0<c,"Filesystem: Invalid non-positive lock length: "+c);const g=new Nc;g.type=a;g.start=b;g.length=c;g.proc_id=d;g.client_id=e;return g};Z.prototype.GetLock=function(a,b){a=this.inodes[a];if(this.is_forwarder(a)){var c=a.foreign_id;return this.follow_fs(a).GetLock(c,b)}for(c of a.locks)if(b.conflicts_with(c))return c.clone();return null};Z.prototype.Lock=
726
- function(a,b,c){const d=this.inodes[a];if(this.is_forwarder(d))return a=d.foreign_id,this.follow_fs(d).Lock(a,b,c);b=b.clone();if(2!==b.type&&this.GetLock(a,b))return 1;for(c=0;c<d.locks.length;c++){a=d.locks[c];h(0<a.length,"Filesystem: Found non-positive lock region length: "+a.length);h(0===a.type||1===a.type,"Filesystem: Found invalid lock type: "+a.type);h(!d.locks[c-1]||d.locks[c-1].start<=a.start,"Filesystem: Locks should be sorted by starting offset");if(a.start+a.length<=b.start)continue;
727
- if(b.start+b.length<=a.start)break;if(a.proc_id!==b.proc_id||a.client_id!==b.client_id){h(!a.conflicts_with(b),"Filesytem: Found conflicting lock region, despite already checked for conflicts");continue}var e=b.start+b.length;const g=b.start-a.start,f=a.start+a.length-e;if(0<g&&0<f&&a.type===b.type)return 0;0<g&&(a.length=g);if(0>=g&&0<f)a.start=e,a.length=f;else if(0<f){for(;c<d.locks.length&&d.locks[c].start<e;)c++;d.locks.splice(c,0,this.DescribeLock(a.type,e,f,a.proc_id,a.client_id))}else 0>=
728
- g&&(d.locks.splice(c,1),c--)}if(2!==b.type){c=b;a=!1;for(e=0;e<d.locks.length&&!(c.may_merge_after(d.locks[e])&&(d.locks[e].length+=b.length,c=d.locks[e],a=!0),b.start<=d.locks[e].start);e++);a||(d.locks.splice(e,0,c),e++);for(;e<d.locks.length;e++)if(d.locks[e].is_alike(c)){d.locks[e].may_merge_after(c)&&(c.length+=d.locks[e].length,d.locks.splice(e,1));break}}return 0};Z.prototype.read_dir=function(a){a=this.SearchPath(a);if(-1!==a.id)return a=this.GetInode(a.id),Array.from(a.direntries.keys()).filter(b=>
729
- "."!==b&&".."!==b)};Z.prototype.read_file=function(a){a=this.SearchPath(a);if(-1===a.id)return Promise.resolve(null);const b=this.GetInode(a.id);return this.Read(a.id,0,b.size)};var w={Debug:function(a){E([].slice.apply(arguments).join(" "),4194304)},Abort:function(){throw Error("message.Abort()");}};var p={};const Qc=new TextDecoder,Oc=new TextEncoder;p.Marshall=function(a,b,c,d){for(var e,g=0,f=0;f<a.length;f++)switch(e=b[f],a[f]){case "w":c[d++]=e&255;c[d++]=e>>8&255;c[d++]=e>>16&255;c[d++]=e>>
730
- 24&255;g+=4;break;case "d":c[d++]=e&255;c[d++]=e>>8&255;c[d++]=e>>16&255;c[d++]=e>>24&255;c[d++]=0;c[d++]=0;c[d++]=0;c[d++]=0;g+=8;break;case "h":c[d++]=e&255;c[d++]=e>>8;g+=2;break;case "b":c[d++]=e;g+=1;break;case "s":var l=d,n=0;c[d++]=0;c[d++]=0;g+=2;e=Oc.encode(e);g+=e.byteLength;n+=e.byteLength;c.set(e,d);d+=e.byteLength;c[l+0]=n&255;c[l+1]=n>>8&255;break;case "Q":p.Marshall(["b","w","d"],[e.type,e.version,e.path],c,d);d+=13;g+=13;break;default:w.Debug("Marshall: Unknown type="+a[f])}return g};
731
- p.Unmarshall=function(a,b,c){let d=c.offset;for(var e=[],g=0;g<a.length;g++)switch(a[g]){case "w":var f=b[d++];f+=b[d++]<<8;f+=b[d++]<<16;f+=b[d++]<<24>>>0;e.push(f);break;case "d":f=b[d++];f+=b[d++]<<8;f+=b[d++]<<16;f+=b[d++]<<24>>>0;d+=4;e.push(f);break;case "h":f=b[d++];e.push(f+(b[d++]<<8));break;case "b":e.push(b[d++]);break;case "s":f=b[d++];f+=b[d++]<<8;var l=b.slice(d,d+f);d+=f;e.push(Qc.decode(l));break;case "Q":c.offset=d;f=p.Unmarshall(["b","w","d"],b,c);d=c.offset;e.push({type:f[0],version:f[1],
732
- path:f[2]});break;default:w.Debug("Error in Unmarshall: Unknown type="+a[g])}c.offset=d;return e};export{};; export default module.exports.V86; export let {V86, CPU} = module.exports;
477
+ 18]=0;this.pci_space[b+19]=0};xb.prototype.get_state=function(){let a=[];a[0]=this.device_feature_select;a[1]=this.driver_feature_select;a[2]=this.device_feature;a[3]=this.driver_feature;a[4]=this.features_ok;a[5]=this.device_status;a[6]=this.config_has_changed;a[7]=this.config_generation;a[8]=this.isr_status;a[9]=this.queue_select;return a=a.concat(this.queues)};xb.prototype.set_state=function(a){this.device_feature_select=a[0];this.driver_feature_select=a[1];this.device_feature=a[2];this.driver_feature=
478
+ a[3];this.features_ok=a[4];this.device_status=a[5];this.config_has_changed=a[6];this.config_generation=a[7];this.isr_status=a[8];this.queue_select=a[9];let b=0;for(const c of a.slice(10))this.queues[b].set_state(c),b++;this.queue_selected=this.queues[this.queue_select]||null};xb.prototype.reset=function(){this.driver_feature_select=this.device_feature_select=0;this.driver_feature.set(this.device_feature);this.features_ok=!0;this.queue_select=this.device_status=0;this.queue_selected=this.queues[0];
479
+ for(const a of this.queues)a.reset();this.config_has_changed=!1;this.config_generation=0;this.lower_irq()};xb.prototype.notify_config_changes=function(){this.config_has_changed=!0;this.device_status&4?this.raise_irq(2):m(!1,"VirtIO device<"+this.name+"> attempted to notify driver before DRIVER_OK")};xb.prototype.update_config_generation=function(){this.config_has_changed&&(this.config_generation++,this.config_generation&=255,this.config_has_changed=!1)};xb.prototype.is_feature_negotiated=function(a){return 0<
480
+ (this.driver_feature[a>>>5]&1<<(a&31))};xb.prototype.needs_reset=function(){D("Device<"+this.name+"> experienced error - requires reset",2097152);this.device_status|=64;this.device_status&4&&this.notify_config_changes()};xb.prototype.raise_irq=function(a){D("Raise irq "+z(a),2097152);this.isr_status|=a;this.pci.raise_irq(this.pci_id)};xb.prototype.lower_irq=function(){D("Lower irq ",2097152);this.isr_status=0;this.pci.lower_irq(this.pci_id)};function X(a,b,c){this.cpu=a;this.virtio=b;this.size_supported=
481
+ this.size=c.size_supported;this.mask=this.size-1;this.enabled=!1;this.notify_offset=c.notify_offset;this.num_staged_replies=this.used_addr=this.avail_last_idx=this.avail_addr=this.desc_addr=0;this.reset()}X.prototype.get_state=function(){const a=[];a[0]=this.size;a[1]=this.size_supported;a[2]=this.enabled;a[3]=this.notify_offset;a[4]=this.desc_addr;a[5]=this.avail_addr;a[6]=this.avail_last_idx;a[7]=this.used_addr;a[8]=this.num_staged_replies;a[9]=1;return a};X.prototype.set_state=function(a){this.size=
482
+ a[0];this.size_supported=a[1];this.enabled=a[2];this.notify_offset=a[3];this.desc_addr=a[4];this.avail_addr=a[5];this.avail_last_idx=a[6];this.used_addr=a[7];this.num_staged_replies=a[8];this.mask=this.size-1;this.fix_wrapping=1!==a[9]};X.prototype.reset=function(){this.enabled=!1;this.num_staged_replies=this.used_addr=this.avail_last_idx=this.avail_addr=this.desc_addr=0;this.set_size(this.size_supported)};X.prototype.is_configured=function(){return this.desc_addr&&this.avail_addr&&this.used_addr};
483
+ X.prototype.enable=function(){m(this.is_configured(),"VirtQueue must be configured before enabled");this.enabled=!0};X.prototype.set_size=function(a){m(0===(a&a-1),"VirtQueue size must be power of 2 or zero");m(a<=this.size_supported,"VirtQueue size must be within supported size");this.size=a;this.mask=a-1};X.prototype.count_requests=function(){m(this.avail_addr,"VirtQueue addresses must be configured before use");this.fix_wrapping&&(this.fix_wrapping=!1,this.avail_last_idx=(this.avail_get_idx()&
484
+ ~this.mask)+(this.avail_last_idx&this.mask));return this.avail_get_idx()-this.avail_last_idx&65535};X.prototype.has_request=function(){m(this.avail_addr,"VirtQueue addresses must be configured before use");return 0!==this.count_requests()};X.prototype.pop_request=function(){m(this.avail_addr,"VirtQueue addresses must be configured before use");m(this.has_request(),"VirtQueue must not pop nonexistent request");var a=this.avail_get_entry(this.avail_last_idx);D("Pop request: avail_last_idx="+this.avail_last_idx+
485
+ " desc_idx="+a,2097152);a=new gc(this,a);this.avail_last_idx=this.avail_last_idx+1&65535;return a};X.prototype.push_reply=function(a){m(this.used_addr,"VirtQueue addresses must be configured before use");m(this.num_staged_replies<this.size,"VirtQueue replies must not exceed queue size");const b=this.used_get_idx()+this.num_staged_replies&this.mask;D("Push reply: used_idx="+b+" desc_idx="+a.head_idx,2097152);this.used_set_entry(b,a.head_idx,a.length_written);this.num_staged_replies++};X.prototype.flush_replies=
486
+ function(){m(this.used_addr,"VirtQueue addresses must be configured before use");if(0===this.num_staged_replies)D("flush_replies: Nothing to flush",2097152);else{D("Flushing "+this.num_staged_replies+" replies",2097152);var a=this.used_get_idx()+this.num_staged_replies&65535;this.used_set_idx(a);this.num_staged_replies=0;this.virtio.is_feature_negotiated(29)?(this.avail_get_used_event(),this.virtio.raise_irq(1)):~this.avail_get_flags()&1&&this.virtio.raise_irq(1)}};X.prototype.notify_me_after=function(a){m(0<=
487
+ a,"Must skip a non-negative number of requests");a=this.avail_get_idx()+a&65535;this.used_set_avail_event(a)};X.prototype.get_descriptor=function(a,b){return{addr_low:this.cpu.read32s(a+16*b),addr_high:this.cpu.read32s(a+16*b+4),len:this.cpu.read32s(a+16*b+8),flags:this.cpu.read16(a+16*b+12),next:this.cpu.read16(a+16*b+14)}};X.prototype.avail_get_flags=function(){return this.cpu.read16(this.avail_addr)};X.prototype.avail_get_idx=function(){return this.cpu.read16(this.avail_addr+2)};X.prototype.avail_get_entry=
488
+ function(a){return this.cpu.read16(this.avail_addr+4+2*(a&this.mask))};X.prototype.avail_get_used_event=function(){return this.cpu.read16(this.avail_addr+4+2*this.size)};X.prototype.used_get_flags=function(){return this.cpu.read16(this.used_addr)};X.prototype.used_set_flags=function(a){this.cpu.write16(this.used_addr,a)};X.prototype.used_get_idx=function(){return this.cpu.read16(this.used_addr+2)};X.prototype.used_set_idx=function(a){this.cpu.write16(this.used_addr+2,a)};X.prototype.used_set_entry=
489
+ function(a,b,c){this.cpu.write32(this.used_addr+4+8*a,b);this.cpu.write32(this.used_addr+8+8*a,c)};X.prototype.used_set_avail_event=function(a){this.cpu.write16(this.used_addr+4+8*this.size,a)};function gc(a,b){this.cpu=a.cpu;this.virtio=a.virtio;this.head_idx=b;this.read_buffers=[];this.length_readable=this.read_buffer_offset=this.read_buffer_idx=0;this.write_buffers=[];this.length_writable=this.length_written=this.write_buffer_offset=this.write_buffer_idx=0;let c=a.desc_addr,d=0,e=a.size,f=!1;const h=
490
+ this.virtio.is_feature_negotiated(28);D("<<< Descriptor chain start",2097152);do{const l=a.get_descriptor(c,b);D("descriptor: idx="+b+" addr="+z(l.addr_high,8)+":"+z(l.addr_low,8)+" len="+z(l.len,8)+" flags="+z(l.flags,4)+" next="+z(l.next,4),2097152);if(h&&l.flags&4)l.flags&1&&D("Driver bug: has set VIRTQ_DESC_F_NEXT flag in an indirect table descriptor",2097152),c=l.addr_low,d=b=0,e=l.len/16,D("start indirect",2097152);else{if(l.flags&2)f=!0,this.write_buffers.push(l),this.length_writable+=l.len;
491
+ else{if(f){D("Driver bug: readonly buffer after writeonly buffer within chain",2097152);break}this.read_buffers.push(l);this.length_readable+=l.len}d++;if(d>e){D("Driver bug: descriptor chain cycle detected",2097152);break}if(l.flags&1)b=l.next;else break}}while(1);D("Descriptor chain end >>>",2097152)}gc.prototype.get_next_blob=function(a){let b=0,c=a.length;for(;c;){if(this.read_buffer_idx===this.read_buffers.length){D("Device<"+this.virtio.name+"> Read more than device-readable buffers has",2097152);
492
+ break}var d=this.read_buffers[this.read_buffer_idx];const e=d.addr_low+this.read_buffer_offset;d=d.len-this.read_buffer_offset;d>c?(d=c,this.read_buffer_offset+=c):(this.read_buffer_idx++,this.read_buffer_offset=0);a.set(this.cpu.read_blob(e,d),b);b+=d;c-=d}return b};gc.prototype.set_next_blob=function(a){let b=0,c=a.length;for(;c;){if(this.write_buffer_idx===this.write_buffers.length){D("Device<"+this.virtio.name+"> Write more than device-writable capacity",2097152);break}var d=this.write_buffers[this.write_buffer_idx];
493
+ const e=d.addr_low+this.write_buffer_offset;d=d.len-this.write_buffer_offset;d>c?(d=c,this.write_buffer_offset+=c):(this.write_buffer_idx++,this.write_buffer_offset=0);this.cpu.write_blob(a.subarray(b,b+d),e);b+=d;c-=d}this.length_written+=b;return b};function hc(){this.filedata=new Map}hc.prototype.read=async function(a,b,c){m(a,"MemoryFileStorage read: sha256sum should be a non-empty string");return(a=this.filedata.get(a))?a.subarray(b,b+c):null};hc.prototype.cache=async function(a,b){m(a,"MemoryFileStorage cache: sha256sum should be a non-empty string");
494
+ this.filedata.set(a,b)};hc.prototype.uncache=function(a){this.filedata.delete(a)};function ic(a,b){m(b,"ServerMemoryFileStorage: baseurl should not be empty");b.endsWith("/")||(b+="/");this.storage=a;this.baseurl=b}ic.prototype.load_from_server=function(a){return new Promise(b=>{va(this.baseurl+a,{done:async c=>{c=new Uint8Array(c);await this.cache(a,c);b(c)}})})};ic.prototype.read=async function(a,b,c){const d=await this.storage.read(a,b,c);return d?d:(await this.load_from_server(a)).subarray(b,
495
+ b+c)};ic.prototype.cache=async function(a,b){return await this.storage.cache(a,b)};ic.prototype.uncache=function(a){this.storage.uncache(a)};function Y(a,b){this.inodes=[];this.events=[];this.storage=a;this.qidcounter=b||{last_qidnumber:0};this.inodedata={};this.total_size=274877906944;this.used_size=0;this.mounts=[];this.CreateDirectory("",-1)}Y.prototype.get_state=function(){let a=[];a[0]=this.inodes;a[1]=this.qidcounter.last_qidnumber;a[2]=[];for(const [b,c]of Object.entries(this.inodedata))0===
496
+ (this.inodes[b].mode&16384)&&a[2].push([b,c]);a[3]=this.total_size;a[4]=this.used_size;return a=a.concat(this.mounts)};Y.prototype.set_state=function(a){this.inodes=a[0].map(b=>{const c=new jc(0);c.set_state(b);return c});this.qidcounter.last_qidnumber=a[1];this.inodedata={};for(let [b,c]of a[2])c.buffer.byteLength!==c.byteLength&&(c=c.slice()),this.inodedata[b]=c;this.total_size=a[3];this.used_size=a[4];this.mounts=a.slice(5)};Y.prototype.AddEvent=function(a,b){var c=this.inodes[a];0===c.status||
497
+ 2===c.status?b():this.is_forwarder(c)?this.follow_fs(c).AddEvent(c.foreign_id,b):this.events.push({id:a,OnEvent:b})};Y.prototype.HandleEvent=function(a){var b=this.inodes[a];this.is_forwarder(b)&&this.follow_fs(b).HandleEvent(b.foreign_id);b=[];for(var c=0;c<this.events.length;c++)this.events[c].id===a?this.events[c].OnEvent():b.push(this.events[c]);this.events=b};Y.prototype.load_from_json=function(a){m(a,"Invalid fs passed to load_from_json");if(3!==a.version)throw"The filesystem JSON format has changed. Please update your fs2json (https://github.com/copy/fs2json) and recreate the filesystem JSON.";
498
+ var b=a.fsroot;this.used_size=a.size;for(a=0;a<b.length;a++)this.LoadRecursive(b[a],0)};Y.prototype.LoadRecursive=function(a,b){var c=this.CreateInode();const d=a[0];c.size=a[1];c.mtime=a[2];c.ctime=c.mtime;c.atime=c.mtime;c.mode=a[3];c.uid=a[4];c.gid=a[5];var e=c.mode&61440;16384===e?(this.PushInode(c,b,d),this.LoadDir(this.inodes.length-1,a[6])):32768===e?(c.status=2,c.sha256sum=a[6],m(c.sha256sum),this.PushInode(c,b,d)):40960===e?(c.symlink=a[6],this.PushInode(c,b,d)):49152!==e&&D("Unexpected ifmt: "+
499
+ z(e)+" ("+d+")")};Y.prototype.LoadDir=function(a,b){for(var c=0;c<b.length;c++)this.LoadRecursive(b[c],a)};Y.prototype.should_be_linked=function(a){return!this.is_forwarder(a)||0===a.foreign_id};Y.prototype.link_under_dir=function(a,b,c){const d=this.inodes[b],e=this.inodes[a];m(!this.is_forwarder(e),"Filesystem: Shouldn't link under fowarder parents");m(this.IsDirectory(a),"Filesystem: Can't link under non-directories");m(this.should_be_linked(d),"Filesystem: Can't link across filesystems apart from their root");
500
+ m(0<=d.nlinks,"Filesystem: Found negative nlinks value of "+d.nlinks);m(!e.direntries.has(c),"Filesystem: Name '"+c+"' is already taken");e.direntries.set(c,b);d.nlinks++;this.IsDirectory(b)&&(m(!d.direntries.has(".."),"Filesystem: Cannot link a directory twice"),d.direntries.has(".")||d.nlinks++,d.direntries.set(".",b),d.direntries.set("..",a),e.nlinks++)};Y.prototype.unlink_from_dir=function(a,b){const c=this.Search(a,b),d=this.inodes[c],e=this.inodes[a];m(!this.is_forwarder(e),"Filesystem: Can't unlink from forwarders");
501
+ m(this.IsDirectory(a),"Filesystem: Can't unlink from non-directories");e.direntries.delete(b)?(d.nlinks--,this.IsDirectory(c)&&(m(d.direntries.get("..")===a,"Filesystem: Found directory with bad parent id"),d.direntries.delete(".."),e.nlinks--),m(0<=d.nlinks,"Filesystem: Found negative nlinks value of "+d.nlinks)):m(!1,"Filesystem: Can't unlink non-existent file: "+b)};Y.prototype.PushInode=function(a,b,c){-1!==b?(this.inodes.push(a),a.fid=this.inodes.length-1,this.link_under_dir(b,a.fid,c)):0===
502
+ this.inodes.length?(this.inodes.push(a),a.direntries.set(".",0),a.direntries.set("..",0),a.nlinks=2):(N.Debug("Error in Filesystem: Pushed inode with name = "+c+" has no parent"),N.Abort())};function jc(a){this.direntries=new Map;this.minor=this.major=this.mtime=this.atime=this.ctime=this.fid=this.gid=this.uid=this.size=this.status=0;this.symlink="";this.mode=493;this.qid={type:0,version:0,path:a};this.caps=void 0;this.nlinks=0;this.sha256sum="";this.locks=[];this.foreign_id=this.mount_id=-1}jc.prototype.get_state=
503
+ function(){const a=[];a[0]=this.mode;a[1]=16384===(this.mode&61440)?[...this.direntries]:32768===(this.mode&61440)?this.sha256sum:40960===(this.mode&61440)?this.symlink:49152===(this.mode&61440)?[this.minor,this.major]:null;a[2]=this.locks;a[3]=this.status;a[4]=this.size;a[5]=this.uid;a[6]=this.gid;a[7]=this.fid;a[8]=this.ctime;a[9]=this.atime;a[10]=this.mtime;a[11]=this.qid.version;a[12]=this.qid.path;a[13]=this.nlinks;return a};jc.prototype.set_state=function(a){this.mode=a[0];if(16384===(this.mode&
504
+ 61440)){this.direntries=new Map;for(const [b,c]of a[1])this.direntries.set(b,c)}else 32768===(this.mode&61440)?this.sha256sum=a[1]:40960===(this.mode&61440)?this.symlink=a[1]:49152===(this.mode&61440)&&([this.minor,this.major]=a[1]);this.locks=[];for(const b of a[2]){const c=new kc;c.set_state(b);this.locks.push(c)}this.status=a[3];this.size=a[4];this.uid=a[5];this.gid=a[6];this.fid=a[7];this.ctime=a[8];this.atime=a[9];this.mtime=a[10];this.qid.type=(this.mode&61440)>>8;this.qid.version=a[11];this.qid.path=
505
+ a[12];this.nlinks=a[13]};Y.prototype.divert=function(a,b){const c=this.Search(a,b),d=this.inodes[c],e=new jc(-1);m(d,"Filesystem divert: name ("+b+") not found");m(this.IsDirectory(c)||1>=d.nlinks,"Filesystem: can't divert hardlinked file '"+b+"' with nlinks="+d.nlinks);Object.assign(e,d);const f=this.inodes.length;this.inodes.push(e);e.fid=f;this.is_forwarder(d)&&this.mounts[d.mount_id].backtrack.set(d.foreign_id,f);this.should_be_linked(d)&&(this.unlink_from_dir(a,b),this.link_under_dir(a,f,b));
506
+ if(this.IsDirectory(c)&&!this.is_forwarder(d))for(const [h,l]of e.direntries)"."!==h&&".."!==h&&this.IsDirectory(l)&&this.inodes[l].direntries.set("..",f);this.inodedata[f]=this.inodedata[c];delete this.inodedata[c];d.direntries=new Map;d.nlinks=0;return f};Y.prototype.copy_inode=function(a,b){Object.assign(b,a,{fid:b.fid,direntries:b.direntries,nlinks:b.nlinks})};Y.prototype.CreateInode=function(){const a=Math.round(Date.now()/1E3),b=new jc(++this.qidcounter.last_qidnumber);b.atime=b.ctime=b.mtime=
507
+ a;return b};Y.prototype.CreateDirectory=function(a,b){var c=this.inodes[b];if(0<=b&&this.is_forwarder(c))return b=c.foreign_id,a=this.follow_fs(c).CreateDirectory(a,b),this.create_forwarder(c.mount_id,a);c=this.CreateInode();c.mode=16895;0<=b&&(c.uid=this.inodes[b].uid,c.gid=this.inodes[b].gid,c.mode=this.inodes[b].mode&511|16384);c.qid.type=64;this.PushInode(c,b,a);this.NotifyListeners(this.inodes.length-1,"newdir");return this.inodes.length-1};Y.prototype.CreateFile=function(a,b){var c=this.inodes[b];
508
+ if(this.is_forwarder(c))return b=c.foreign_id,a=this.follow_fs(c).CreateFile(a,b),this.create_forwarder(c.mount_id,a);c=this.CreateInode();c.uid=this.inodes[b].uid;c.gid=this.inodes[b].gid;c.qid.type=128;c.mode=this.inodes[b].mode&438|32768;this.PushInode(c,b,a);this.NotifyListeners(this.inodes.length-1,"newfile");return this.inodes.length-1};Y.prototype.CreateNode=function(a,b,c,d){var e=this.inodes[b];if(this.is_forwarder(e))return b=e.foreign_id,a=this.follow_fs(e).CreateNode(a,b,c,d),this.create_forwarder(e.mount_id,
509
+ a);e=this.CreateInode();e.major=c;e.minor=d;e.uid=this.inodes[b].uid;e.gid=this.inodes[b].gid;e.qid.type=192;e.mode=this.inodes[b].mode&438;this.PushInode(e,b,a);return this.inodes.length-1};Y.prototype.CreateSymlink=function(a,b,c){var d=this.inodes[b];if(this.is_forwarder(d))return b=d.foreign_id,a=this.follow_fs(d).CreateSymlink(a,b,c),this.create_forwarder(d.mount_id,a);d=this.CreateInode();d.uid=this.inodes[b].uid;d.gid=this.inodes[b].gid;d.qid.type=160;d.symlink=c;d.mode=40960;this.PushInode(d,
510
+ b,a);return this.inodes.length-1};Y.prototype.CreateTextFile=async function(a,b,c){var d=this.inodes[b];if(this.is_forwarder(d))return b=d.foreign_id,c=await this.follow_fs(d).CreateTextFile(a,b,c),this.create_forwarder(d.mount_id,c);d=this.CreateFile(a,b);b=this.inodes[d];a=new Uint8Array(c.length);b.size=c.length;for(b=0;b<c.length;b++)a[b]=c.charCodeAt(b);await this.set_data(d,a);return d};Y.prototype.CreateBinaryFile=async function(a,b,c){var d=this.inodes[b];if(this.is_forwarder(d))return b=
511
+ d.foreign_id,c=await this.follow_fs(d).CreateBinaryFile(a,b,c),this.create_forwarder(d.mount_id,c);d=this.CreateFile(a,b);a=this.inodes[d];b=new Uint8Array(c.length);b.set(c);await this.set_data(d,b);a.size=c.length;return d};Y.prototype.OpenInode=function(a,b){var c=this.inodes[a];if(this.is_forwarder(c))return this.follow_fs(c).OpenInode(c.foreign_id,b);16384===(c.mode&61440)&&this.FillDirectory(a);return!0};Y.prototype.CloseInode=async function(a){var b=this.inodes[a];if(this.is_forwarder(b))return await this.follow_fs(b).CloseInode(b.foreign_id);
512
+ 2===b.status&&this.storage.uncache(b.sha256sum);4===b.status&&(b.status=-1,await this.DeleteData(a))};Y.prototype.Rename=async function(a,b,c,d){if(a===c&&b===d)return 0;var e=this.Search(a,b);if(-1===e)return-2;var f=this.GetFullPath(a)+"/"+b;if(-1!==this.Search(c,d)){var h=this.Unlink(c,d);if(0>h)return h}var l=this.inodes[e],n=this.inodes[a];h=this.inodes[c];if(this.is_forwarder(n)||this.is_forwarder(h))if(this.is_forwarder(n)&&n.mount_id===h.mount_id){if(a=await this.follow_fs(n).Rename(n.foreign_id,
513
+ b,h.foreign_id,d),0>a)return a}else{if(this.is_a_root(e))return D("XXX: Attempted to move mountpoint ("+b+") - skipped",4194304),-1;if(!this.IsDirectory(e)&&1<this.GetInode(e).nlinks)return D("XXX: Attempted to move hardlinked file ("+b+") across filesystems - skipped",4194304),-1;n=this.divert(a,b);const p=this.GetInode(e),q=await this.Read(n,0,p.size);this.is_forwarder(h)?(c=this.follow_fs(h),d=this.IsDirectory(n)?c.CreateDirectory(d,h.foreign_id):c.CreateFile(d,h.foreign_id),c=c.GetInode(d),this.copy_inode(p,
514
+ c),this.set_forwarder(e,h.mount_id,d)):(this.delete_forwarder(l),this.copy_inode(p,l),this.link_under_dir(c,e,d));await this.ChangeSize(e,p.size);q&&q.length&&await this.Write(e,0,q.length,q);if(this.IsDirectory(e))for(const r of this.GetChildren(n))if(h=await this.Rename(n,r,e,r),0>h)return h;await this.DeleteData(n);a=this.Unlink(a,b);if(0>a)return a}else this.unlink_from_dir(a,b),this.link_under_dir(c,e,d),l.qid.version++;this.NotifyListeners(e,"rename",{oldpath:f});return 0};Y.prototype.Write=
515
+ async function(a,b,c,d){this.NotifyListeners(a,"write");var e=this.inodes[a];if(this.is_forwarder(e))a=e.foreign_id,await this.follow_fs(e).Write(a,b,c,d);else{var f=await this.get_buffer(a);!f||f.length<b+c?(await this.ChangeSize(a,Math.floor(3*(b+c)/2)),e.size=b+c,f=await this.get_buffer(a)):e.size<b+c&&(e.size=b+c);d&&f.set(d.subarray(0,c),b);await this.set_data(a,f)}};Y.prototype.Read=async function(a,b,c){const d=this.inodes[a];return this.is_forwarder(d)?(a=d.foreign_id,await this.follow_fs(d).Read(a,
516
+ b,c)):await this.get_data(a,b,c)};Y.prototype.Search=function(a,b){a=this.inodes[a];if(this.is_forwarder(a)){const c=a.foreign_id;b=this.follow_fs(a).Search(c,b);return-1===b?-1:this.get_forwarder(a.mount_id,b)}b=a.direntries.get(b);return void 0===b?-1:b};Y.prototype.CountUsedInodes=function(){let a=this.inodes.length;for(const {fs:b,backtrack:c}of this.mounts)a+=b.CountUsedInodes(),a-=c.size;return a};Y.prototype.CountFreeInodes=function(){let a=1048576;for(const {fs:b}of this.mounts)a+=b.CountFreeInodes();
517
+ return a};Y.prototype.GetTotalSize=function(){let a=this.used_size;for(const {fs:b}of this.mounts)a+=b.GetTotalSize();return a};Y.prototype.GetSpace=function(){let a=this.total_size;for(const {fs:b}of this.mounts)a+=b.GetSpace();return this.total_size};Y.prototype.GetDirectoryName=function(a){const b=this.inodes[this.GetParent(a)];if(this.is_forwarder(b))return this.follow_fs(b).GetDirectoryName(this.inodes[a].foreign_id);if(!b)return"";for(const [c,d]of b.direntries)if(d===a)return c;m(!1,"Filesystem: Found directory inode whose parent doesn't link to it");
518
+ return""};Y.prototype.GetFullPath=function(a){m(this.IsDirectory(a),"Filesystem: Cannot get full path of non-directory inode");for(var b="";0!==a;)b="/"+this.GetDirectoryName(a)+b,a=this.GetParent(a);return b.substring(1)};Y.prototype.Link=function(a,b,c){if(this.IsDirectory(b))return-1;const d=this.inodes[a],e=this.inodes[b];if(this.is_forwarder(d))return this.is_forwarder(e)&&e.mount_id===d.mount_id?this.follow_fs(d).Link(d.foreign_id,e.foreign_id,c):(D("XXX: Attempted to hardlink a file into a child filesystem - skipped",
519
+ 4194304),-1);if(this.is_forwarder(e))return D("XXX: Attempted to hardlink file across filesystems - skipped",4194304),-1;this.link_under_dir(a,b,c);return 0};Y.prototype.Unlink=function(a,b){if("."===b||".."===b)return-1;const c=this.Search(a,b),d=this.inodes[c],e=this.inodes[a];if(this.is_forwarder(e))return m(this.is_forwarder(d),"Children of forwarders should be forwarders"),a=e.foreign_id,this.follow_fs(e).Unlink(a,b);if(this.IsDirectory(c)&&!this.IsEmpty(c))return-39;this.unlink_from_dir(a,b);
520
+ 0===d.nlinks&&(d.status=4,this.NotifyListeners(c,"delete"));return 0};Y.prototype.DeleteData=async function(a){const b=this.inodes[a];this.is_forwarder(b)?await this.follow_fs(b).DeleteData(b.foreign_id):(b.size=0,delete this.inodedata[a])};Y.prototype.get_buffer=async function(a){const b=this.inodes[a];m(b,`Filesystem get_buffer: idx ${a} does not point to an inode`);return this.inodedata[a]?this.inodedata[a]:2===b.status?(m(b.sha256sum,"Filesystem get_data: found inode on server without sha256sum"),
521
+ await this.storage.read(b.sha256sum,0,b.size)):null};Y.prototype.get_data=async function(a,b,c){const d=this.inodes[a];m(d,`Filesystem get_data: idx ${a} does not point to an inode`);return this.inodedata[a]?this.inodedata[a].subarray(b,b+c):2===d.status?(m(d.sha256sum,"Filesystem get_data: found inode on server without sha256sum"),await this.storage.read(d.sha256sum,b,c)):null};Y.prototype.set_data=async function(a,b){this.inodedata[a]=b;2===this.inodes[a].status&&(this.inodes[a].status=0,this.storage.uncache(this.inodes[a].sha256sum))};
522
+ Y.prototype.GetInode=function(a){m(!isNaN(a),"Filesystem GetInode: NaN idx");m(0<=a&&a<this.inodes.length,"Filesystem GetInode: out of range idx:"+a);a=this.inodes[a];return this.is_forwarder(a)?this.follow_fs(a).GetInode(a.foreign_id):a};Y.prototype.ChangeSize=async function(a,b){var c=this.GetInode(a),d=await this.get_data(a,0,c.size);if(b!==c.size){var e=new Uint8Array(b);c.size=b;d&&e.set(d.subarray(0,Math.min(d.length,c.size)),0);await this.set_data(a,e)}};Y.prototype.SearchPath=function(a){a=
523
+ a.replace("//","/");a=a.split("/");0<a.length&&0===a[a.length-1].length&&a.pop();0<a.length&&0===a[0].length&&a.shift();const b=a.length;var c=-1,d=0;let e=null;for(var f=0;f<b;f++)if(c=d,d=this.Search(c,a[f]),!e&&this.is_forwarder(this.inodes[c])&&(e="/"+a.slice(f).join("/")),-1===d)return f<b-1?{id:-1,parentid:-1,name:a[f],forward_path:e}:{id:-1,parentid:c,name:a[f],forward_path:e};return{id:d,parentid:c,name:a[f],forward_path:e}};Y.prototype.GetRecursiveList=function(a,b){if(this.is_forwarder(this.inodes[a])){const c=
524
+ this.follow_fs(this.inodes[a]),d=this.inodes[a].mount_id,e=b.length;c.GetRecursiveList(this.inodes[a].foreign_id,b);for(a=e;a<b.length;a++)b[a].parentid=this.get_forwarder(d,b[a].parentid)}else for(const [c,d]of this.inodes[a].direntries)"."!==c&&".."!==c&&(b.push({parentid:a,name:c}),this.IsDirectory(d)&&this.GetRecursiveList(d,b))};Y.prototype.RecursiveDelete=function(a){var b=[];a=this.SearchPath(a);if(-1!==a.id)for(this.GetRecursiveList(a.id,b),a=b.length-1;0<=a;a--){const c=this.Unlink(b[a].parentid,
525
+ b[a].name);m(0===c,"Filesystem RecursiveDelete failed at parent="+b[a].parentid+", name='"+b[a].name+"' with error code: "+-c)}};Y.prototype.DeleteNode=function(a){var b=this.SearchPath(a);-1!==b.id&&(32768===(this.inodes[b.id].mode&61440)?(a=this.Unlink(b.parentid,b.name),m(0===a,"Filesystem DeleteNode failed with error code: "+-a)):16384===(this.inodes[b.id].mode&61440)&&(this.RecursiveDelete(a),a=this.Unlink(b.parentid,b.name),m(0===a,"Filesystem DeleteNode failed with error code: "+-a)))};Y.prototype.NotifyListeners=
526
+ function(){};Y.prototype.Check=function(){for(var a=1;a<this.inodes.length;a++)if(-1!==this.inodes[a].status){var b=this.GetInode(a);0>b.nlinks&&N.Debug("Error in filesystem: negative nlinks="+b.nlinks+" at id ="+a);if(this.IsDirectory(a)){b=this.GetInode(a);this.IsDirectory(a)&&0>this.GetParent(a)&&N.Debug("Error in filesystem: negative parent id "+a);for(const [c,d]of b.direntries){0===c.length&&N.Debug("Error in filesystem: inode with no name and id "+d);for(const e of c)32>e&&N.Debug("Error in filesystem: Unallowed char in filename")}}}};
527
+ Y.prototype.FillDirectory=function(a){var b=this.inodes[a];if(this.is_forwarder(b))this.follow_fs(b).FillDirectory(b.foreign_id);else{var c=0;for(const d of b.direntries.keys())c+=24+rb.encode(d).length;a=this.inodedata[a]=new Uint8Array(c);b.size=c;c=0;for(const [d,e]of b.direntries)b=this.GetInode(e),c+=O.Marshall(["Q","d","b","s"],[b.qid,c+13+8+1+2+rb.encode(d).length,b.mode>>12,d],a,c)}};Y.prototype.RoundToDirentry=function(a,b){const c=this.inodedata[a];m(c,`FS directory data for dirid=${a} should be generated`);
528
+ m(c.length,"FS directory should have at least an entry");if(b>=c.length)return c.length;for(a=0;;){const d=O.Unmarshall(["Q","d"],c,{offset:a})[1];if(d>b)break;a=d}return a};Y.prototype.IsDirectory=function(a){a=this.inodes[a];return this.is_forwarder(a)?this.follow_fs(a).IsDirectory(a.foreign_id):16384===(a.mode&61440)};Y.prototype.IsEmpty=function(a){a=this.inodes[a];if(this.is_forwarder(a))return this.follow_fs(a).IsDirectory(a.foreign_id);for(const b of a.direntries.keys())if("."!==b&&".."!==
529
+ b)return!1;return!0};Y.prototype.GetChildren=function(a){m(this.IsDirectory(a),"Filesystem: cannot get children of non-directory inode");a=this.inodes[a];if(this.is_forwarder(a))return this.follow_fs(a).GetChildren(a.foreign_id);const b=[];for(const c of a.direntries.keys())"."!==c&&".."!==c&&b.push(c);return b};Y.prototype.GetParent=function(a){m(this.IsDirectory(a),"Filesystem: cannot get parent of non-directory inode");a=this.inodes[a];if(this.should_be_linked(a))return a.direntries.get("..");
530
+ const b=this.follow_fs(a).GetParent(a.foreign_id);m(-1!==b,"Filesystem: should not have invalid parent ids");return this.get_forwarder(a.mount_id,b)};Y.prototype.PrepareCAPs=function(a){a=this.GetInode(a);if(a.caps)return a.caps.length;a.caps=new Uint8Array(20);a.caps[0]=0;a.caps[1]=0;a.caps[2]=0;a.caps[3]=2;a.caps[4]=255;a.caps[5]=255;a.caps[6]=255;a.caps[7]=255;a.caps[8]=255;a.caps[9]=255;a.caps[10]=255;a.caps[11]=255;a.caps[12]=63;a.caps[13]=0;a.caps[14]=0;a.caps[15]=0;a.caps[16]=63;a.caps[17]=
531
+ 0;a.caps[18]=0;a.caps[19]=0;return a.caps.length};function lc(a){this.fs=a;this.backtrack=new Map}lc.prototype.get_state=function(){const a=[];a[0]=this.fs;a[1]=[...this.backtrack];return a};lc.prototype.set_state=function(a){this.fs=a[0];this.backtrack=new Map(a[1])};Y.prototype.set_forwarder=function(a,b,c){const d=this.inodes[a];m(0===d.nlinks,"Filesystem: attempted to convert an inode into forwarder before unlinking the inode");this.is_forwarder(d)&&this.mounts[d.mount_id].backtrack.delete(d.foreign_id);
532
+ d.status=5;d.mount_id=b;d.foreign_id=c;this.mounts[b].backtrack.set(c,a)};Y.prototype.create_forwarder=function(a,b){const c=this.CreateInode(),d=this.inodes.length;this.inodes.push(c);c.fid=d;this.set_forwarder(d,a,b);return d};Y.prototype.is_forwarder=function(a){return 5===a.status};Y.prototype.is_a_root=function(a){return 0===this.GetInode(a).fid};Y.prototype.get_forwarder=function(a,b){var c=this.mounts[a];m(0<=b,"Filesystem get_forwarder: invalid foreign_id: "+b);m(c,"Filesystem get_forwarder: invalid mount number: "+
533
+ a);c=c.backtrack.get(b);return void 0===c?this.create_forwarder(a,b):c};Y.prototype.delete_forwarder=function(a){m(this.is_forwarder(a),"Filesystem delete_forwarder: expected forwarder");a.status=-1;this.mounts[a.mount_id].backtrack.delete(a.foreign_id)};Y.prototype.follow_fs=function(a){const b=this.mounts[a.mount_id];m(this.is_forwarder(a),"Filesystem follow_fs: inode should be a forwarding inode");m(b,"Filesystem follow_fs: inode<id="+a.fid+"> should point to valid mounted FS");return b.fs};Y.prototype.Mount=
534
+ function(a,b){m(b.qidcounter===this.qidcounter,"Cannot mount filesystem whose qid numbers aren't synchronised with current filesystem.");var c=this.SearchPath(a);if(-1===c.parentid)return D("Mount failed: parent for path not found: "+a,4194304),-2;if(-1!==c.id)return D("Mount failed: file already exists at path: "+a,4194304),-17;if(c.forward_path)return a=this.inodes[c.parentid],c=this.follow_fs(a).Mount(c.forward_path,b),0>c?c:this.get_forwarder(a.mount_id,c);a=this.mounts.length;this.mounts.push(new lc(b));
535
+ b=this.create_forwarder(a,0);this.link_under_dir(c.parentid,b,c.name);return b};function kc(){this.type=2;this.start=0;this.length=Infinity;this.proc_id=-1;this.client_id=""}kc.prototype.get_state=function(){const a=[];a[0]=this.type;a[1]=this.start;a[2]=Infinity===this.length?0:this.length;a[3]=this.proc_id;a[4]=this.client_id;return a};kc.prototype.set_state=function(a){this.type=a[0];this.start=a[1];this.length=0===a[2]?Infinity:a[2];this.proc_id=a[3];this.client_id=a[4]};kc.prototype.clone=function(){const a=
536
+ new kc;a.set_state(this.get_state());return a};kc.prototype.conflicts_with=function(a){return this.proc_id===a.proc_id&&this.client_id===a.client_id||2===this.type||2===a.type||1!==this.type&&1!==a.type||this.start+this.length<=a.start||a.start+a.length<=this.start?!1:!0};kc.prototype.is_alike=function(a){return a.proc_id===this.proc_id&&a.client_id===this.client_id&&a.type===this.type};kc.prototype.may_merge_after=function(a){return this.is_alike(a)&&a.start+a.length===this.start};Y.prototype.DescribeLock=
537
+ function(a,b,c,d,e){m(0===a||1===a||2===a,"Filesystem: Invalid lock type: "+a);m(0<=b,"Filesystem: Invalid negative lock starting offset: "+b);m(0<c,"Filesystem: Invalid non-positive lock length: "+c);const f=new kc;f.type=a;f.start=b;f.length=c;f.proc_id=d;f.client_id=e;return f};Y.prototype.GetLock=function(a,b){a=this.inodes[a];if(this.is_forwarder(a)){var c=a.foreign_id;return this.follow_fs(a).GetLock(c,b)}for(c of a.locks)if(b.conflicts_with(c))return c.clone();return null};Y.prototype.Lock=
538
+ function(a,b,c){const d=this.inodes[a];if(this.is_forwarder(d))return a=d.foreign_id,this.follow_fs(d).Lock(a,b,c);b=b.clone();if(2!==b.type&&this.GetLock(a,b))return 1;for(c=0;c<d.locks.length;c++){a=d.locks[c];m(0<a.length,"Filesystem: Found non-positive lock region length: "+a.length);m(0===a.type||1===a.type,"Filesystem: Found invalid lock type: "+a.type);m(!d.locks[c-1]||d.locks[c-1].start<=a.start,"Filesystem: Locks should be sorted by starting offset");if(a.start+a.length<=b.start)continue;
539
+ if(b.start+b.length<=a.start)break;if(a.proc_id!==b.proc_id||a.client_id!==b.client_id){m(!a.conflicts_with(b),"Filesytem: Found conflicting lock region, despite already checked for conflicts");continue}var e=b.start+b.length;const f=b.start-a.start,h=a.start+a.length-e;if(0<f&&0<h&&a.type===b.type)return 0;0<f&&(a.length=f);if(0>=f&&0<h)a.start=e,a.length=h;else if(0<h){for(;c<d.locks.length&&d.locks[c].start<e;)c++;d.locks.splice(c,0,this.DescribeLock(a.type,e,h,a.proc_id,a.client_id))}else 0>=
540
+ f&&(d.locks.splice(c,1),c--)}if(2!==b.type){c=b;a=!1;for(e=0;e<d.locks.length&&!(c.may_merge_after(d.locks[e])&&(d.locks[e].length+=b.length,c=d.locks[e],a=!0),b.start<=d.locks[e].start);e++);a||(d.locks.splice(e,0,c),e++);for(;e<d.locks.length;e++)if(d.locks[e].is_alike(c)){d.locks[e].may_merge_after(c)&&(c.length+=d.locks[e].length,d.locks.splice(e,1));break}}return 0};Y.prototype.read_dir=function(a){a=this.SearchPath(a);if(-1!==a.id)return a=this.GetInode(a.id),Array.from(a.direntries.keys()).filter(b=>
541
+ "."!==b&&".."!==b)};Y.prototype.read_file=function(a){a=this.SearchPath(a);if(-1===a.id)return Promise.resolve(null);const b=this.GetInode(a.id);return this.Read(a.id,0,b.size)};const mc=["shared","exclusive","unlock"];function fc(a,b,c){this.fs=a;this.bus=c;this.configspace_tagname=[104,111,115,116,57,112];this.configspace_taglen=this.configspace_tagname.length;this.VERSION="9P2000.L";this.msize=this.BLOCKSIZE=8192;this.replybuffer=new Uint8Array(2*this.msize);this.replybuffersize=0;this.fids=[];
542
+ this.virtio=new xb(b,{name:"virtio-9p",pci_id:48,device_id:4169,subsystem_device_id:9,common:{initial_port:43008,queues:[{size_supported:32,notify_offset:0}],features:[0,32,29,28],on_driver_ok:()=>{}},notification:{initial_port:43264,single_handler:!1,handlers:[d=>{if(0!==d)m(!1,"Virtio9P Notified for non-existent queue: "+d+" (expected queue_id of 0)");else{for(;this.virtqueue.has_request();)d=this.virtqueue.pop_request(),this.ReceiveRequest(d);this.virtqueue.notify_me_after(0)}}]},isr_status:{initial_port:42752},
543
+ device_specific:{initial_port:42496,struct:[{bytes:2,name:"mount tag length",read:()=>this.configspace_taglen,write:()=>{}}].concat(Array.from(Array(254).keys()).map(d=>({bytes:1,name:"mount tag name "+d,read:()=>this.configspace_tagname[d]||0,write:()=>{}})))}});this.virtqueue=this.virtio.queues[0]}fc.prototype.get_state=function(){var a=[];a[0]=this.configspace_tagname;a[1]=this.configspace_taglen;a[2]=this.virtio;a[3]=this.VERSION;a[4]=this.BLOCKSIZE;a[5]=this.msize;a[6]=this.replybuffer;a[7]=
544
+ this.replybuffersize;a[8]=this.fids.map(function(b){return[b.inodeid,b.type,b.uid,b.dbg_name]});a[9]=this.fs;return a};fc.prototype.set_state=function(a){this.configspace_tagname=a[0];this.configspace_taglen=a[1];this.virtio.set_state(a[2]);this.virtqueue=this.virtio.queues[0];this.VERSION=a[3];this.BLOCKSIZE=a[4];this.msize=a[5];this.replybuffer=a[6];this.replybuffersize=a[7];this.fids=a[8].map(function(b){return{inodeid:b[0],type:b[1],uid:b[2],dbg_name:b[3]}});this.fs.set_state(a[9])};fc.prototype.Createfid=
545
+ function(a,b,c,d){return{inodeid:a,type:b,uid:c,dbg_name:d}};fc.prototype.update_dbg_name=function(a,b){for(const c of this.fids)c.inodeid===a&&(c.dbg_name=b)};fc.prototype.reset=function(){this.fids=[];this.virtio.reset()};fc.prototype.BuildReply=function(a,b,c){m(0<=c,"9P: Negative payload size");O.Marshall(["w","b","h"],[c+7,a+1,b],this.replybuffer,0);c+7>=this.replybuffer.length&&N.Debug("Error in 9p: payloadsize exceeds maximum length");this.replybuffersize=c+7};fc.prototype.SendError=function(a,
546
+ b,c){b=O.Marshall(["w"],[c],this.replybuffer,7);this.BuildReply(6,a,b)};fc.prototype.SendReply=function(a){m(0<=this.replybuffersize,"9P: Negative replybuffersize");a.set_next_blob(this.replybuffer.subarray(0,this.replybuffersize));this.virtqueue.push_reply(a);this.virtqueue.flush_replies()};fc.prototype.ReceiveRequest=async function(a){var b=new Uint8Array(a.length_readable);a.get_next_blob(b);var c={offset:0},d=O.Unmarshall(["w","b","h"],b,c),e=d[0],f=d[1],h=d[2];switch(f){case 8:e=this.fs.GetTotalSize();
547
+ b=this.fs.GetSpace();d=[16914839];d[1]=this.BLOCKSIZE;d[2]=Math.floor(b/d[1]);d[3]=d[2]-Math.floor(e/d[1]);d[4]=d[2]-Math.floor(e/d[1]);d[5]=this.fs.CountUsedInodes();d[6]=this.fs.CountFreeInodes();d[7]=0;d[8]=256;e=O.Marshall("wwddddddw".split(""),d,this.replybuffer,7);this.BuildReply(f,h,e);this.SendReply(a);break;case 112:case 12:d=O.Unmarshall(["w","w"],b,c);var l=d[0];c=d[1];N.Debug("[open] fid="+l+", mode="+c);b=this.fids[l].inodeid;var n=this.fs.GetInode(b);N.Debug("file open "+this.fids[l].dbg_name);
548
+ d=this.fs.OpenInode(b,c);this.fs.AddEvent(this.fids[l].inodeid,function(){N.Debug("file opened "+this.fids[l].dbg_name+" tag:"+h);var t=[];t[0]=n.qid;t[1]=this.msize-24;O.Marshall(["Q","w"],t,this.replybuffer,7);this.BuildReply(f,h,17);this.SendReply(a)}.bind(this));break;case 70:d=O.Unmarshall(["w","w","s"],b,c);b=d[0];l=d[1];e=d[2];N.Debug("[link] dfid="+b+", name="+e);d=this.fs.Link(this.fids[b].inodeid,this.fids[l].inodeid,e);if(0>d){e="";-1===d?e="Operation not permitted":(e="Unknown error: "+
549
+ -d,m(!1,"[link]: Unexpected error code: "+-d));this.SendError(h,e,-d);this.SendReply(a);break}this.BuildReply(f,h,0);this.SendReply(a);break;case 16:d=O.Unmarshall(["w","s","s","w"],b,c);l=d[0];e=d[1];b=d[2];d=d[3];N.Debug("[symlink] fid="+l+", name="+e+", symgt="+b+", gid="+d);b=this.fs.CreateSymlink(e,this.fids[l].inodeid,b);n=this.fs.GetInode(b);n.uid=this.fids[l].uid;n.gid=d;O.Marshall(["Q"],[n.qid],this.replybuffer,7);this.BuildReply(f,h,13);this.SendReply(a);break;case 18:d=O.Unmarshall("wswwww".split(""),
550
+ b,c);l=d[0];e=d[1];c=d[2];b=d[3];var p=d[4];d=d[5];N.Debug("[mknod] fid="+l+", name="+e+", major="+b+", minor="+p);b=this.fs.CreateNode(e,this.fids[l].inodeid,b,p);n=this.fs.GetInode(b);n.mode=c;n.uid=this.fids[l].uid;n.gid=d;O.Marshall(["Q"],[n.qid],this.replybuffer,7);this.BuildReply(f,h,13);this.SendReply(a);break;case 22:d=O.Unmarshall(["w"],b,c);l=d[0];n=this.fs.GetInode(this.fids[l].inodeid);N.Debug("[readlink] fid="+l+" name="+this.fids[l].dbg_name+" target="+n.symlink);e=O.Marshall(["s"],
551
+ [n.symlink],this.replybuffer,7);this.BuildReply(f,h,e);this.SendReply(a);break;case 72:d=O.Unmarshall(["w","s","w","w"],b,c);l=d[0];e=d[1];c=d[2];d=d[3];N.Debug("[mkdir] fid="+l+", name="+e+", mode="+c+", gid="+d);b=this.fs.CreateDirectory(e,this.fids[l].inodeid);n=this.fs.GetInode(b);n.mode=c|16384;n.uid=this.fids[l].uid;n.gid=d;O.Marshall(["Q"],[n.qid],this.replybuffer,7);this.BuildReply(f,h,13);this.SendReply(a);break;case 14:d=O.Unmarshall(["w","s","w","w","w"],b,c);l=d[0];e=d[1];b=d[2];c=d[3];
552
+ d=d[4];this.bus.send("9p-create",[e,this.fids[l].inodeid]);N.Debug("[create] fid="+l+", name="+e+", flags="+b+", mode="+c+", gid="+d);b=this.fs.CreateFile(e,this.fids[l].inodeid);this.fids[l].inodeid=b;this.fids[l].type=1;this.fids[l].dbg_name=e;n=this.fs.GetInode(b);n.uid=this.fids[l].uid;n.gid=d;n.mode=c|32768;O.Marshall(["Q","w"],[n.qid,this.msize-24],this.replybuffer,7);this.BuildReply(f,h,17);this.SendReply(a);break;case 52:d=O.Unmarshall("wbwddws".split(""),b,c);l=d[0];b=d[2];e=0===d[4]?Infinity:
553
+ d[4];e=this.fs.DescribeLock(d[1],d[3],e,d[5],d[6]);N.Debug("[lock] fid="+l+", type="+mc[e.type]+", start="+e.start+", length="+e.length+", proc_id="+e.proc_id);d=this.fs.Lock(this.fids[l].inodeid,e,b);O.Marshall(["b"],[d],this.replybuffer,7);this.BuildReply(f,h,1);this.SendReply(a);break;case 54:d=O.Unmarshall("wbddws".split(""),b,c);l=d[0];e=0===d[3]?Infinity:d[3];e=this.fs.DescribeLock(d[1],d[2],e,d[4],d[5]);N.Debug("[getlock] fid="+l+", type="+mc[e.type]+", start="+e.start+", length="+e.length+
554
+ ", proc_id="+e.proc_id);d=this.fs.GetLock(this.fids[l].inodeid,e);d||(d=e,d.type=2);e=O.Marshall(["b","d","d","w","s"],[d.type,d.start,Infinity===d.length?0:d.length,d.proc_id,d.client_id],this.replybuffer,7);this.BuildReply(f,h,e);this.SendReply(a);break;case 24:d=O.Unmarshall(["w","d"],b,c);l=d[0];n=this.fs.GetInode(this.fids[l].inodeid);N.Debug("[getattr]: fid="+l+" name="+this.fids[l].dbg_name+" request mask="+d[1]);if(!n||4===n.status){N.Debug("getattr: unlinked");this.SendError(h,"No such file or directory",
555
+ 2);this.SendReply(a);break}d[0]=d[1];d[1]=n.qid;d[2]=n.mode;d[3]=n.uid;d[4]=n.gid;d[5]=n.nlinks;d[6]=n.major<<8|n.minor;d[7]=n.size;d[8]=this.BLOCKSIZE;d[9]=Math.floor(n.size/512+1);d[10]=n.atime;d[11]=0;d[12]=n.mtime;d[13]=0;d[14]=n.ctime;d[15]=0;d[16]=0;d[17]=0;d[18]=0;d[19]=0;O.Marshall("dQwwwddddddddddddddd".split(""),d,this.replybuffer,7);this.BuildReply(f,h,153);this.SendReply(a);break;case 26:d=O.Unmarshall("wwwwwddddd".split(""),b,c);l=d[0];n=this.fs.GetInode(this.fids[l].inodeid);N.Debug("[setattr]: fid="+
556
+ l+" request mask="+d[1]+" name="+this.fids[l].dbg_name);d[1]&1&&(n.mode=d[2]);d[1]&2&&(n.uid=d[3]);d[1]&4&&(n.gid=d[4]);d[1]&16&&(n.atime=Math.floor((new Date).getTime()/1E3));d[1]&32&&(n.mtime=Math.floor((new Date).getTime()/1E3));d[1]&64&&(n.ctime=Math.floor((new Date).getTime()/1E3));d[1]&128&&(n.atime=d[6]);d[1]&256&&(n.mtime=d[8]);d[1]&8&&await this.fs.ChangeSize(this.fids[l].inodeid,d[5]);this.BuildReply(f,h,0);this.SendReply(a);break;case 50:d=O.Unmarshall(["w","d"],b,c);l=d[0];this.BuildReply(f,
557
+ h,0);this.SendReply(a);break;case 40:case 116:d=O.Unmarshall(["w","d","w"],b,c);l=d[0];e=d[1];p=d[2];n=this.fs.GetInode(this.fids[l].inodeid);40===f&&N.Debug("[treaddir]: fid="+l+" offset="+e+" count="+p);116===f&&N.Debug("[read]: fid="+l+" ("+this.fids[l].dbg_name+") offset="+e+" count="+p+" fidtype="+this.fids[l].type);if(!n||4===n.status){N.Debug("read/treaddir: unlinked");this.SendError(h,"No such file or directory",2);this.SendReply(a);break}if(2===this.fids[l].type)for(n.caps.length<e+p&&(p=
558
+ n.caps.length-e),d=0;d<p;d++)this.replybuffer[11+d]=n.caps[e+d];else this.fs.OpenInode(this.fids[l].inodeid,void 0),d=this.fids[l].inodeid,p=Math.min(p,this.replybuffer.length-11),n.size<e+p?p=n.size-e:40===f&&(p=this.fs.RoundToDirentry(d,e+p)-e),e>n.size&&(p=0),this.bus.send("9p-read-start",[this.fids[l].dbg_name]),d=await this.fs.Read(d,e,p),this.bus.send("9p-read-end",[this.fids[l].dbg_name,p]),d&&this.replybuffer.set(d,11);O.Marshall(["w"],[p],this.replybuffer,7);this.BuildReply(f,h,4+p);this.SendReply(a);
559
+ break;case 118:d=O.Unmarshall(["w","d","w"],b,c);l=d[0];e=d[1];p=d[2];d=this.fids[l].dbg_name;N.Debug("[write]: fid="+l+" ("+d+") offset="+e+" count="+p+" fidtype="+this.fids[l].type);if(2===this.fids[l].type){this.SendError(h,"Setxattr not supported",95);this.SendReply(a);break}else await this.fs.Write(this.fids[l].inodeid,e,p,b.subarray(c.offset));this.bus.send("9p-write-end",[d,p]);O.Marshall(["w"],[p],this.replybuffer,7);this.BuildReply(f,h,4);this.SendReply(a);break;case 74:d=O.Unmarshall(["w",
560
+ "s","w","s"],b,c);e=d[0];b=d[1];c=d[2];d=d[3];N.Debug("[renameat]: oldname="+b+" newname="+d);d=await this.fs.Rename(this.fids[e].inodeid,b,this.fids[c].inodeid,d);if(0>d){e="";-2===d?e="No such file or directory":-1===d?e="Operation not permitted":-39===d?e="Directory not empty":(e="Unknown error: "+-d,m(!1,"[renameat]: Unexpected error code: "+-d));this.SendError(h,e,-d);this.SendReply(a);break}this.BuildReply(f,h,0);this.SendReply(a);break;case 76:d=O.Unmarshall(["w","s","w"],b,c);c=d[0];e=d[1];
561
+ b=d[2];N.Debug("[unlink]: dirfd="+c+" name="+e+" flags="+b);l=this.fs.Search(this.fids[c].inodeid,e);if(-1===l){this.SendError(h,"No such file or directory",2);this.SendReply(a);break}d=this.fs.Unlink(this.fids[c].inodeid,e);if(0>d){e="";-39===d?e="Directory not empty":-1===d?e="Operation not permitted":(e="Unknown error: "+-d,m(!1,"[unlink]: Unexpected error code: "+-d));this.SendError(h,e,-d);this.SendReply(a);break}this.BuildReply(f,h,0);this.SendReply(a);break;case 100:d=O.Unmarshall(["w","s"],
562
+ b,c);N.Debug("[version]: msize="+d[0]+" version="+d[1]);this.msize!==d[0]&&(this.msize=d[0],this.replybuffer=new Uint8Array(Math.min(16777216,2*this.msize)));e=O.Marshall(["w","s"],[this.msize,this.VERSION],this.replybuffer,7);this.BuildReply(f,h,e);this.SendReply(a);break;case 104:d=O.Unmarshall(["w","w","s","s","w"],b,c);l=d[0];e=d[4];N.Debug("[attach]: fid="+l+" afid="+z(d[1])+" uname="+d[2]+" aname="+d[3]);this.fids[l]=this.Createfid(0,1,e,"");n=this.fs.GetInode(this.fids[l].inodeid);O.Marshall(["Q"],
563
+ [n.qid],this.replybuffer,7);this.BuildReply(f,h,13);this.SendReply(a);this.bus.send("9p-attach");break;case 108:d=O.Unmarshall(["h"],b,c);N.Debug("[flush] "+h);this.BuildReply(f,h,0);this.SendReply(a);break;case 110:d=O.Unmarshall(["w","w","h"],b,c);l=d[0];p=d[1];var q=d[2];N.Debug("[walk]: fid="+d[0]+" nwfid="+d[1]+" nwname="+q);if(0===q){this.fids[p]=this.Createfid(this.fids[l].inodeid,1,this.fids[l].uid,this.fids[l].dbg_name);O.Marshall(["h"],[0],this.replybuffer,7);this.BuildReply(f,h,2);this.SendReply(a);
564
+ break}e=[];for(d=0;d<q;d++)e.push("s");c=O.Unmarshall(e,b,c);b=this.fids[l].inodeid;e=9;var r=0;N.Debug("walk in dir "+this.fids[l].dbg_name+" to: "+c.toString());for(d=0;d<q;d++){b=this.fs.Search(b,c[d]);if(-1===b){N.Debug("Could not find: "+c[d]);break}e+=O.Marshall(["Q"],[this.fs.GetInode(b).qid],this.replybuffer,e);r++;this.fids[p]=this.Createfid(b,1,this.fids[l].uid,c[d])}O.Marshall(["h"],[r],this.replybuffer,7);this.BuildReply(f,h,e-7);this.SendReply(a);break;case 120:d=O.Unmarshall(["w"],b,
565
+ c);N.Debug("[clunk]: fid="+d[0]);this.fids[d[0]]&&0<=this.fids[d[0]].inodeid&&(await this.fs.CloseInode(this.fids[d[0]].inodeid),this.fids[d[0]].inodeid=-1,this.fids[d[0]].type=-1);this.BuildReply(f,h,0);this.SendReply(a);break;case 32:d=O.Unmarshall(["w","s","d","w"],b,c);l=d[0];e=d[1];c=d[2];b=d[3];N.Debug("[txattrcreate]: fid="+l+" name="+e+" attr_size="+c+" flags="+b);this.fids[l].type=2;this.BuildReply(f,h,0);this.SendReply(a);break;case 30:d=O.Unmarshall(["w","w","s"],b,c);l=d[0];e=d[2];N.Debug("[xattrwalk]: fid="+
566
+ d[0]+" newfid="+d[1]+" name="+d[2]);this.SendError(h,"Setxattr not supported",95);this.SendReply(a);break;default:N.Debug("Error in Virtio9p: Unknown id "+f+" received"),N.Abort()}};K.prototype.mmap_read8=function(a){a=this.memory_map_read8[a>>>17](a);m(0<=a&&255>=a);return a};K.prototype.mmap_write8=function(a,b){m(0<=b&&255>=b);this.memory_map_write8[a>>>17](a,b)};K.prototype.mmap_read16=function(a){var b=this.memory_map_read8[a>>>17];a=b(a)|b(a+1|0)<<8;m(0<=a&&65535>=a);return a};K.prototype.mmap_write16=
567
+ function(a,b){var c=this.memory_map_write8[a>>>17];m(0<=b&&65535>=b);c(a,b&255);c(a+1|0,b>>8)};K.prototype.mmap_read32=function(a){return this.memory_map_read32[a>>>17](a)};K.prototype.mmap_write32=function(a,b){this.memory_map_write32[a>>>17](a,b)};K.prototype.mmap_write64=function(a,b,c){var d=a>>>17;m(d===a+7>>>17);d=this.memory_map_write32[d];d(a,b);d(a+4,c)};K.prototype.mmap_write128=function(a,b,c,d,e){var f=a>>>17;m(f===a+12>>>17);f=this.memory_map_write32[f];f(a,b);f(a+4,c);f(a+8,d);f(a+12,
568
+ e)};K.prototype.write_blob=function(a,b){m(a&&0<=a.length);a.length&&(m(!this.in_mapped_range(b)),m(!this.in_mapped_range(b+a.length-1)),this.jit_dirty_cache(b,b+a.length),this.mem8.set(a,b))};K.prototype.read_blob=function(a,b){b&&(m(!this.in_mapped_range(a)),m(!this.in_mapped_range(a+b-1)));return this.mem8.subarray(a,a+b)};function nc(a){this.message=a}nc.prototype=Error();const oc={Uint8Array,Int8Array,Uint16Array,Int16Array,Uint32Array,Int32Array,Float32Array,Float64Array};function pc(a,b){if("object"!==
569
+ typeof a||null===a)return m("function"!==typeof a),a;if(Array.isArray(a))return a.map(f=>pc(f,b));a.constructor===Object&&(console.log(a),m(a.constructor!==Object,"Expected non-object"));if(a.BYTES_PER_ELEMENT){var c=new Uint8Array(a.buffer,a.byteOffset,a.length*a.BYTES_PER_ELEMENT);a=a.constructor.name.replace("bound ","");m(oc[a]);return{__state_type__:a,buffer_id:b.push(c)-1}}!a.get_state&&console.log("Object without get_state: ",a);c=a.get_state();a=[];for(var d=0;d<c.length;d++){var e=c[d];m("function"!==
570
+ typeof e);a[d]=pc(e,b)}return a}function qc(a,b){if("object"!==typeof a||null===a)return m("function"!==typeof a),a;if(Array.isArray(a)){for(var c=0;c<a.length;c++)a[c]=qc(a[c],b);return a}c=a.__state_type__;m(void 0!==c);const d=oc[c];m(d,"Unkown type: "+c);return new d(b[a.buffer_id])}K.prototype.save_state=function(){for(var a=[],b=pc(this,a),c=[],d=0,e=0;e<a.length;e++){var f=a[e].byteLength;c[e]={offset:d,length:f};d+=f;d=d+3&-4}b=JSON.stringify({buffer_infos:c,state:b});b=(new TextEncoder).encode(b);
571
+ e=16+b.length;e=e+3&-4;var h=e+d;d=new ArrayBuffer(h);var l=new Int32Array(d,0,4);(new Uint8Array(d,16,b.length)).set(b);f=new Uint8Array(d,e);l[0]=-2039052682;l[1]=6;l[2]=h;l[3]=b.length;for(e=0;e<a.length;e++)h=a[e],m(h.constructor===Uint8Array),f.set(h,c[e].offset);D("State: json size "+(b.byteLength>>10)+"k");D("State: Total buffers size "+(f.byteLength>>10)+"k");return d};K.prototype.restore_state=function(a){function b(t,v){const y=t.length;if(16>y)throw new nc("Invalid length: "+y);t=new Int32Array(t.buffer,
572
+ t.byteOffset,4);if(-2039052682!==t[0])throw new nc("Invalid header: "+z(t[0]>>>0));if(6!==t[1])throw new nc("Version mismatch: dump="+t[1]+" we=6");if(v&&t[2]!==y)throw new nc("Length doesn't match header: real="+y+" header="+t[2]);return t[3]}function c(t){t=(new TextDecoder).decode(t);return JSON.parse(t)}a=new Uint8Array(a);if(4247762216===(new Uint32Array(a.buffer,0,1))[0]){var d=this.zstd_create_ctx(a.length);(new Uint8Array(this.wasm_memory.buffer,this.zstd_get_src_ptr(d),a.length)).set(a);
573
+ var e=this.zstd_read(d,16),f=new Uint8Array(this.wasm_memory.buffer,e,16),h=b(f,!1);this.zstd_read_free(e,16);e=this.zstd_read(d,h);f=new Uint8Array(this.wasm_memory.buffer,e,h);f=c(f);this.zstd_read_free(e,h);e=f.state;var l=f.buffer_infos;f=[];h=16+h;for(var n of l){l=(h+3&-4)-h;if(1048576<n.length){var p=this.zstd_read(d,l);this.zstd_read_free(p,l);p=new Uint8Array(n.length);f.push(p.buffer);for(var q=0;q<n.length;){var r=n.length-q;m(0<=r);r=Math.min(r,1048576);const t=this.zstd_read(d,r);p.set(new Uint8Array(this.wasm_memory.buffer,
574
+ t,r),q);this.zstd_read_free(t,r);q+=r}}else p=this.zstd_read(d,l+n.length),q=p+l,f.push(this.wasm_memory.buffer.slice(q,q+n.length)),this.zstd_read_free(p,l+n.length);h+=l+n.length}e=qc(e,f);this.set_state(e);this.zstd_free_ctx(d)}else{d=b(a,!0);if(0>d||d+12>=a.length)throw new nc("Invalid info block length: "+d);n=a.subarray(16,16+d);e=c(n);n=e.state;e=e.buffer_infos;let t=16+d;t=t+3&-4;d=e.map(v=>{const y=t+v.offset;return a.buffer.slice(y,y+v.length)});n=qc(n,d);this.set_state(n)}};K.prototype.debug_init=
575
+ function(){function a(p){for(var q=e.protected_mode[0]?"prot":"real",r=e.get_eflags(),t=e.getiopl(),v=e.cpl[0],y=z(e.sreg[1],4)+":"+z(e.get_real_eip()>>>0,8),C=z(e.sreg[2],4)+":"+z(e.reg32[0]>>>0,8),u=e.is_32[0]?"32":"16",B=e.flags[0]&512?1:0,w={[1]:"c",[4]:"p",[16]:"a",[64]:"z",[128]:"s",[256]:"t",[512]:"i",[1024]:"d",[2048]:"o"},G="",L=0;16>L;L++)w[1<<L]&&(G=r&1<<L?G+w[1<<L]:G+" ");return"mode="+q+"/"+u+" paging="+ +(0!==(e.cr[0]&-2147483648))+" pae="+ +(0!==(e.cr[4]&32))+" iopl="+t+" cpl="+v+" if="+
576
+ B+" cs:eip="+y+" cs_off="+z(e.get_seg_cs()>>>0,8)+" flgs="+z(e.get_eflags()>>>0,6)+" ("+G+") ss:esp="+C+" ssize="+ +e.stack_size_32[0]+(p?" in "+p:"")}function b(){for(var p={eax:0,ecx:1,edx:2,ebx:3,esp:4,ebp:5,esi:6,edi:7},q="eax ecx edx ebx esp ebp esi edi".split(" "),r="",t="",v=0;4>v;v++)r+=q[v]+"="+z(e.reg32[p[q[v]]]>>>0,8)+" ",t+=q[v+4]+"="+z(e.reg32[p[q[v+4]]]>>>0,8)+" ";r+=" ds="+z(e.sreg[3],4)+" es="+z(e.sreg[0],4)+" fs="+z(e.sreg[4],4);t+=" gs="+z(e.sreg[5],4)+" cs="+z(e.sreg[1],4)+" ss="+
577
+ z(e.sreg[2],4);return[r,t]}function c(p,q,r){if(!(p&1))return!1;var t=128===(p&128);return{size:t,global:256===(p&256),accessed:32===(p&32),dirty:64===(p&64),cache_disable:16===(p&16),user:4===(p&4),read_write:2===(p&2),address:(t&&!r?p&(q?4292870144:4290772992):p&4294963200)>>>0}}function d(p,q,r){for(var t=q?512:1024,v=q?8:4,y=q?21:22,C=0;C<t;C++){var u=e.read32s(p+C*v),B=c(u,q,!0);if(B)if(u="",u+=B.size?"S ":" ",u+=B.accessed?"A ":" ",u+=B.cache_disable?"Cd ":" ",u+=B.user?"U ":" ",u+=B.read_write?
578
+ "Rw ":" ",B.size)D("=== "+z(r+(C<<y)>>>0,8)+" -> "+z(B.address>>>0,8)+" | "+u);else{D("=== "+z(r+(C<<y)>>>0,8)+" | "+u);for(var w=0;w<t;w++){var G=B.address+w*v;u=e.read32s(G);var L=c(u,q,!1);L&&(u="",u+=L.cache_disable?"Cd ":" ",u+=L.user?"U ":" ",u+=L.read_write?"Rw ":" ",u+=L.global?"G ":" ",u+=L.accessed?"A ":" ",u+=L.dirty?"Di ":" ",D("# "+z(r+(C<<y|w<<12)>>>0,8)+" -> "+z(L.address,8)+" | "+u+" (at "+z(G,8)+")"))}}}}var e=this,f={};this.debug=f;f.init=function(){function p(r){10===
579
+ r?(D(q,4096),q=""):q+=String.fromCharCode(r)}if(e.io){var q="";e.io.register_write(1026,this,p);e.io.register_write(1280,this,p)}};f.get_regs_short=b;f.dump_regs=function(){var p=b();D(p[0],2);D(p[1],2)};f.get_state=a;f.dump_state=function(p){D(a(p),2)};f.dump_stack=function(p,q){var r=e.reg32[4];D("========= STACK ==========");if(q>=p||void 0===q)p=5,q=-5;for(;p>q;p--){var t=" ";p||(t="=> ");t+=z(p,2)+" | ";D(t+z(r+4*p,8)+" | "+z(e.read32s(r+4*p)>>>0))}};f.dump_page_structures=function(){if(e.cr[4]&
580
+ 32){D("PAE enabled");for(var p=0;4>p;p++){var q=e.read32s(e.cr[3]+8*p);q&1&&d(q&4294963200,!0,p<<30)}}else D("PAE disabled"),d(e.cr[3],!1,0)};f.dump_gdt_ldt=function(){function p(q,r){for(var t=0;t<r;t+=8,q+=8){var v=e.read16(q+2)|e.read8(q+4)<<16|e.read8(q+7)<<24,y=e.read16(q)|(e.read8(q+6)&15)<<16,C=e.read8(q+5),u=e.read8(q+6)>>4,B="",w=C>>5&3;B=C&128?B+" P ":B+"NP ";C&16?(B=u&4?B+"32b ":B+"16b ",C&8?(B+="X ",C&4&&(B+="C ")):B+="R ",B+="RW "):B+="sys: "+z(C&15);u&8&&(y=y<<12|4095);D(z(t&-8,4)+" "+
581
+ z(v>>>0,8)+" ("+z(y>>>0,8)+" bytes) "+B+"; dpl = "+w+", a = "+C.toString(2)+", f = "+u.toString(2))}}D("gdt: (len = "+z(e.gdtr_size[0])+")");p(e.translate_address_system_read(e.gdtr_offset[0]),e.gdtr_size[0]);D("\nldt: (len = "+z(e.segment_limits[7])+")");p(e.translate_address_system_read(e.segment_offsets[7]),e.segment_limits[7])};f.dump_idt=function(){for(var p=0;p<e.idtr_size[0];p+=8){var q=e.translate_address_system_read(e.idtr_offset[0]+p),r=e.read16(q)|e.read16(q+6)<<16,t=e.read16(q+2);q=e.read8(q+
582
+ 5);var v=q>>5&3;var y=5===(q&31)?"task gate ":14===(q&31)?"intr gate ":15===(q&31)?"trap gate ":"invalid ";y=q&128?y+" P":y+"NP";D(z(p>>3,4)+" "+z(r>>>0,8)+", "+z(t,4)+"; "+y+"; dpl = "+v+", t = "+q.toString(2))}};f.get_memory_dump=function(p,q){void 0===p?(p=0,q=e.memory_size[0]):void 0===q&&(q=p,p=0);return e.mem8.slice(p,p+q).buffer};f.memory_hex_dump=function(p,q){q=q||64;for(var r,t,v=0;v<q>>4;v++){r=z(p+(v<<4),5)+" ";for(var y=0;16>y;y++)t=e.read8(p+(v<<4)+y),r+=z(t,2)+" ";r+=" ";for(y=
583
+ 0;16>y;y++)t=e.read8(p+(v<<4)+y),r+=33>t||126<t?".":String.fromCharCode(t);D(r)}};f.used_memory_dump=function(){for(var p=e.memory_size[0]/128/16|0,q,r=0;16>r;r++){q=z(128*r*p,8)+" | ";for(var t=0;128>t;t++)q+=0<e.mem32s[(128*r+t)*p]?"X":" ";D(q)}};f.debug_interrupt=function(){};let h,l;f.dump_code=function(p,q,r){if(!l){if(void 0===h&&(h="function"===typeof require?require("./capstone-x86.min.js"):window.cs,void 0===h)){D("Warning: Missing capstone library, disassembly not available");return}l=[new h.Capstone(h.ARCH_X86,
584
+ h.MODE_16),new h.Capstone(h.ARCH_X86,h.MODE_32)]}try{l[p].disasm(q,r).forEach(function(t){D(z(t.address>>>0)+": "+da(t.bytes.map(v=>z(v,2).slice(-2)).join(" "),20)+" "+t.mnemonic+" "+t.op_str)}),D("")}catch(t){D("Could not disassemble: "+Array.from(q).map(v=>z(v,2)).join(" "))}};let n;f.dump_wasm=function(p){if(void 0===n&&(n="function"===typeof require?require("./libwabt.cjs"):new window.WabtModule,void 0===n)){D("Warning: Missing libwabt, wasm dump not available");return}p=p.slice();try{var q=n.readWasm(p,
585
+ {readDebugNames:!1});q.generateNames();q.applyNames();const v=q.toText({foldExprs:!0,inlineExport:!0});D(v)}catch(v){var r=new Blob([p]),t=document.createElement("a");t.download="failed.wasm";t.href=window.URL.createObjectURL(r);t.dataset.downloadurl=["application/octet-stream",t.download,t.href].join(":");t.click();window.URL.revokeObjectURL(t.src);console.log(v.toString())}finally{q&&q.destroy()}}};const rc="undefined"!==typeof window&&0<=window.navigator.platform.toString().toLowerCase().search("win");
586
+ function sc(a){function b(w){return w.shiftKey&&w.ctrlKey&&(73===w.keyCode||74===w.keyCode||75===w.keyCode)||!v.emu_enabled?!1:w.target?w.target.classList.contains("phone_keyboard")||"INPUT"!==w.target.nodeName&&"TEXTAREA"!==w.target.nodeName:!0}function c(w){!w.altKey&&p[56]&&l(56,!1);return f(w,!1)}function d(w){!w.altKey&&p[56]&&l(56,!1);return f(w,!0)}function e(){for(var w=Object.keys(p),G,L=0;L<w.length;L++)G=+w[L],p[G]&&l(G,!1);p={}}function f(w,G){if(v.bus&&b(w)){w.preventDefault&&w.preventDefault();
587
+ if(rc&&(q&&(clearTimeout(t),w.getModifierState&&w.getModifierState("AltGraph")&&r===G&&"ControlLeft"===q.code&&"AltRight"===w.code||h(q,r),q=null),"ControlLeft"===w.code))return q=w,r=G,t=setTimeout(()=>{h(q,r);q=null},10),!1;h(w,G);return!1}}function h(w,G){a:{if(void 0!==w.code){var L=B[w.code];if(void 0!==L)break a}L=y[w.keyCode]}L?l(L,G,w.repeat):console.log("Missing char in map: keyCode="+(w.keyCode||-1).toString(16)+" code="+w.code)}function l(w,G,L){if(G)p[w]&&!L&&l(w,!1);else if(!p[w])return;
588
+ (p[w]=G)||(w|=128);255<w?(n(w>>8),n(w&255)):n(w)}function n(w){v.bus.send("keyboard-code",w)}var p={},q=null,r=!1,t=0,v=this;this.emu_enabled=!0;var y=new Uint16Array([0,0,0,0,0,0,0,0,14,15,0,0,0,28,0,0,42,29,56,0,58,0,0,0,0,0,0,1,0,0,0,0,57,57417,57425,57423,57415,57419,57416,57421,80,0,0,0,0,82,83,0,11,2,3,4,5,6,7,8,9,10,0,39,0,13,0,0,0,30,48,46,32,18,33,34,35,23,36,37,38,50,49,24,25,16,19,31,20,22,47,17,45,21,44,57435,57436,57437,0,0,82,79,80,81,75,76,77,71,72,73,0,0,0,0,0,0,59,60,61,62,63,64,
589
+ 65,66,67,68,87,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,39,13,51,12,52,53,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,43,27,40,0,57435,57400,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),C={8:8,10:13,32:32,39:222,44:188,45:189,46:190,47:191,48:48,49:49,50:50,51:51,52:52,53:53,54:54,55:55,56:56,57:57,59:186,61:187,91:219,92:220,93:221,96:192,97:65,98:66,99:67,100:68,101:69,102:70,103:71,104:72,105:73,106:74,107:75,
590
+ 108:76,109:77,110:78,111:79,112:80,113:81,114:82,115:83,116:84,117:85,118:86,119:87,120:88,121:89,122:90},u={33:49,34:222,35:51,36:52,37:53,38:55,40:57,41:48,42:56,43:187,58:186,60:188,62:190,63:191,64:50,65:65,66:66,67:67,68:68,69:69,70:70,71:71,72:72,73:73,74:74,75:75,76:76,77:77,78:78,79:79,80:80,81:81,82:82,83:83,84:84,85:85,86:86,87:87,88:88,89:89,90:90,94:54,95:189,123:219,124:220,125:221,126:192},B={Escape:1,Digit1:2,Digit2:3,Digit3:4,Digit4:5,Digit5:6,Digit6:7,Digit7:8,Digit8:9,Digit9:10,
591
+ Digit0:11,Minus:12,Equal:13,Backspace:14,Tab:15,KeyQ:16,KeyW:17,KeyE:18,KeyR:19,KeyT:20,KeyY:21,KeyU:22,KeyI:23,KeyO:24,KeyP:25,BracketLeft:26,BracketRight:27,Enter:28,ControlLeft:29,KeyA:30,KeyS:31,KeyD:32,KeyF:33,KeyG:34,KeyH:35,KeyJ:36,KeyK:37,KeyL:38,Semicolon:39,Quote:40,Backquote:41,ShiftLeft:42,Backslash:43,KeyZ:44,KeyX:45,KeyC:46,KeyV:47,KeyB:48,KeyN:49,KeyM:50,Comma:51,Period:52,Slash:53,IntlRo:53,ShiftRight:54,NumpadMultiply:55,AltLeft:56,Space:57,CapsLock:58,F1:59,F2:60,F3:61,F4:62,F5:63,
592
+ F6:64,F7:65,F8:66,F9:67,F10:68,NumLock:69,ScrollLock:70,Numpad7:71,Numpad8:72,Numpad9:73,NumpadSubtract:74,Numpad4:75,Numpad5:76,Numpad6:77,NumpadAdd:78,Numpad1:79,Numpad2:80,Numpad3:81,Numpad0:82,NumpadDecimal:83,IntlBackslash:86,F11:87,F12:88,NumpadEnter:57372,ControlRight:57373,NumpadDivide:57397,AltRight:57400,Home:57415,ArrowUp:57416,PageUp:57417,ArrowLeft:57419,ArrowRight:57421,End:57423,ArrowDown:57424,PageDown:57425,Insert:57426,Delete:57427,OSLeft:57435,OSRight:57436,ContextMenu:57437};this.bus=
593
+ a;this.destroy=function(){"undefined"!==typeof window&&(window.removeEventListener("keyup",c,!1),window.removeEventListener("keydown",d,!1),window.removeEventListener("blur",e,!1))};this.init=function(){"undefined"!==typeof window&&(this.destroy(),window.addEventListener("keyup",c,!1),window.addEventListener("keydown",d,!1),window.addEventListener("blur",e,!1))};this.init();this.simulate_press=function(w){w={keyCode:w};f(w,!0);f(w,!1)};this.simulate_char=function(w){var G=w.charCodeAt(0);G in C?this.simulate_press(C[G]):
594
+ G in u?(n(42),this.simulate_press(u[G]),n(170)):console.log("ascii -> keyCode not found: ",G,w)}}function tc(a,b){function c(u){if(!C.enabled||!C.emu_enabled)return!1;var B=b||document.body,w;if(!(w=document.pointerLockElement))a:{for(u=u.target;u.parentNode;){if(u===B){w=!0;break a}u=u.parentNode}w=!1}return w}function d(u){c(u)&&(u=u.changedTouches)&&u.length&&(u=u[u.length-1],v=u.clientX,y=u.clientY)}function e(){if(q||t||r)C.bus.send("mouse-click",[!1,!1,!1]),q=t=r=!1}function f(u){if(C.bus&&
595
+ c(u)&&C.is_running){var B=0,w=0,G=u.changedTouches;G?G.length&&(G=G[G.length-1],B=G.clientX-v,w=G.clientY-y,v=G.clientX,y=G.clientY,u.preventDefault()):"number"===typeof u.movementX?(B=u.movementX,w=u.movementY):"number"===typeof u.webkitMovementX?(B=u.webkitMovementX,w=u.webkitMovementY):"number"===typeof u.mozMovementX?(B=u.mozMovementX,w=u.mozMovementY):(B=u.clientX-v,w=u.clientY-y,v=u.clientX,y=u.clientY);C.bus.send("mouse-delta",[.15*B,-(.15*w)]);b&&C.bus.send("mouse-absolute",[u.pageX-b.offsetLeft,
596
+ u.pageY-b.offsetTop,b.offsetWidth,b.offsetHeight])}}function h(u){c(u)&&n(u,!0)}function l(u){c(u)&&n(u,!1)}function n(u,B){C.bus&&(1===u.which?q=B:2===u.which?t=B:3===u.which?r=B:D("Unknown event.which: "+u.which),C.bus.send("mouse-click",[q,t,r]),u.preventDefault())}function p(u){if(c(u)){var B=u.wheelDelta||-u.detail;0>B?B=-1:0<B&&(B=1);C.bus.send("mouse-wheel",[B,0]);u.preventDefault()}}var q=!1,r=!1,t=!1,v=0,y=0,C=this;this.enabled=!1;this.emu_enabled=!0;this.bus=a;this.bus.register("mouse-enable",
597
+ function(u){this.enabled=u},this);this.is_running=!1;this.bus.register("emulator-stopped",function(){this.is_running=!1},this);this.bus.register("emulator-started",function(){this.is_running=!0},this);this.destroy=function(){"undefined"!==typeof window&&(window.removeEventListener("touchstart",d,!1),window.removeEventListener("touchend",e,!1),window.removeEventListener("touchmove",f,!1),window.removeEventListener("mousemove",f,!1),window.removeEventListener("mousedown",h,!1),window.removeEventListener("mouseup",
598
+ l,!1),window.removeEventListener("wheel",p,{passive:!1}))};this.init=function(){"undefined"!==typeof window&&(this.destroy(),window.addEventListener("touchstart",d,!1),window.addEventListener("touchend",e,!1),window.addEventListener("touchmove",f,!1),window.addEventListener("mousemove",f,!1),window.addEventListener("mousedown",h,!1),window.addEventListener("mouseup",l,!1),window.addEventListener("wheel",p,{passive:!1}))};this.init()}function uc(a){if("undefined"!==typeof window)if(window.AudioContext||
599
+ window.webkitAudioContext){var b=window.AudioWorklet?vc:wc;this.bus=a;this.audio_context=window.AudioContext?new AudioContext:new webkitAudioContext;this.mixer=new xc(a,this.audio_context);this.pcspeaker=new yc(a,this.audio_context,this.mixer);this.dac=new b(a,this.audio_context,this.mixer);this.pcspeaker.start();a.register("emulator-stopped",function(){this.audio_context.suspend()},this);a.register("emulator-started",function(){this.audio_context.resume()},this);a.register("speaker-confirm-initialized",
600
+ function(){a.send("speaker-has-initialized")},this);a.send("speaker-has-initialized")}else console.warn("Web browser doesn't support Web Audio API")}uc.prototype.destroy=function(){this.audio_context&&this.audio_context.close();this.audio_context=null;this.dac&&this.dac.node_processor&&this.dac.node_processor.port.close();this.dac=null};function xc(a,b){function c(d){return function(e){d.gain.setValueAtTime(e,this.audio_context.currentTime)}}this.audio_context=b;this.sources=new Map;this.gain_right=
601
+ this.gain_left=this.volume_right=this.volume_left=this.volume_both=1;this.node_treble_left=this.audio_context.createBiquadFilter();this.node_treble_right=this.audio_context.createBiquadFilter();this.node_treble_left.type="highshelf";this.node_treble_right.type="highshelf";this.node_treble_left.frequency.setValueAtTime(2E3,this.audio_context.currentTime);this.node_treble_right.frequency.setValueAtTime(2E3,this.audio_context.currentTime);this.node_bass_left=this.audio_context.createBiquadFilter();this.node_bass_right=
602
+ this.audio_context.createBiquadFilter();this.node_bass_left.type="lowshelf";this.node_bass_right.type="lowshelf";this.node_bass_left.frequency.setValueAtTime(200,this.audio_context.currentTime);this.node_bass_right.frequency.setValueAtTime(200,this.audio_context.currentTime);this.node_gain_left=this.audio_context.createGain();this.node_gain_right=this.audio_context.createGain();this.node_merger=this.audio_context.createChannelMerger(2);this.input_left=this.node_treble_left;this.input_right=this.node_treble_right;
603
+ this.node_treble_left.connect(this.node_bass_left);this.node_bass_left.connect(this.node_gain_left);this.node_gain_left.connect(this.node_merger,0,0);this.node_treble_right.connect(this.node_bass_right);this.node_bass_right.connect(this.node_gain_right);this.node_gain_right.connect(this.node_merger,0,1);this.node_merger.connect(this.audio_context.destination);a.register("mixer-connect",function(d){this.connect_source(d[0],d[1])},this);a.register("mixer-disconnect",function(d){this.disconnect_source(d[0],
604
+ d[1])},this);a.register("mixer-volume",function(d){var e=d[0],f=d[1];d=Math.pow(10,d[2]/20);var h=0===e?this:this.sources.get(e);void 0===h?m(!1,"Mixer set volume - cannot set volume for undefined source: "+e):h.set_volume(d,f)},this);a.register("mixer-gain-left",function(d){this.gain_left=Math.pow(10,d/20);this.update()},this);a.register("mixer-gain-right",function(d){this.gain_right=Math.pow(10,d/20);this.update()},this);a.register("mixer-treble-left",c(this.node_treble_left),this);a.register("mixer-treble-right",
605
+ c(this.node_treble_right),this);a.register("mixer-bass-left",c(this.node_bass_left),this);a.register("mixer-bass-right",c(this.node_bass_right),this)}xc.prototype.add_source=function(a,b){a=new zc(this.audio_context,a,this.input_left,this.input_right);m(!this.sources.has(b),"Mixer add source - overwritting source: "+b);this.sources.set(b,a);return a};xc.prototype.connect_source=function(a,b){var c=this.sources.get(a);void 0===c?m(!1,"Mixer connect - cannot connect undefined source: "+a):c.connect(b)};
606
+ xc.prototype.disconnect_source=function(a,b){var c=this.sources.get(a);void 0===c?m(!1,"Mixer disconnect - cannot disconnect undefined source: "+a):c.disconnect(b)};xc.prototype.set_volume=function(a,b){void 0===b&&(b=2);switch(b){case 0:this.volume_left=a;break;case 1:this.volume_right=a;break;case 2:this.volume_both=a;break;default:m(!1,"Mixer set master volume - unknown channel: "+b);return}this.update()};xc.prototype.update=function(){var a=this.volume_both*this.volume_right*this.gain_right;this.node_gain_left.gain.setValueAtTime(this.volume_both*
607
+ this.volume_left*this.gain_left,this.audio_context.currentTime);this.node_gain_right.gain.setValueAtTime(a,this.audio_context.currentTime)};function zc(a,b,c,d){this.audio_context=a;this.connected_right=this.connected_left=!0;this.volume_right=this.volume_left=this.volume_both=this.gain_hidden=1;this.node_splitter=a.createChannelSplitter(2);this.node_gain_left=a.createGain();this.node_gain_right=a.createGain();b.connect(this.node_splitter);this.node_splitter.connect(this.node_gain_left,0);this.node_gain_left.connect(c);
608
+ this.node_splitter.connect(this.node_gain_right,1);this.node_gain_right.connect(d)}zc.prototype.update=function(){var a=this.connected_right*this.gain_hidden*this.volume_both*this.volume_right;this.node_gain_left.gain.setValueAtTime(this.connected_left*this.gain_hidden*this.volume_both*this.volume_left,this.audio_context.currentTime);this.node_gain_right.gain.setValueAtTime(a,this.audio_context.currentTime)};zc.prototype.connect=function(a){var b=!a||2===a;if(b||0===a)this.connected_left=!0;if(b||
609
+ 1===a)this.connected_right=!0;this.update()};zc.prototype.disconnect=function(a){var b=!a||2===a;if(b||0===a)this.connected_left=!1;if(b||1===a)this.connected_right=!1;this.update()};zc.prototype.set_volume=function(a,b){void 0===b&&(b=2);switch(b){case 0:this.volume_left=a;break;case 1:this.volume_right=a;break;case 2:this.volume_both=a;break;default:m(!1,"Mixer set volume - unknown channel: "+b);return}this.update()};zc.prototype.set_gain_hidden=function(a){this.gain_hidden=a};function yc(a,b,c){this.node_oscillator=
610
+ b.createOscillator();this.node_oscillator.type="square";this.node_oscillator.frequency.setValueAtTime(440,b.currentTime);this.mixer_connection=c.add_source(this.node_oscillator,1);this.mixer_connection.disconnect();a.register("pcspeaker-enable",function(){c.connect_source(1)},this);a.register("pcspeaker-disable",function(){c.disconnect_source(1)},this);a.register("pcspeaker-update",function(d){var e=d[1],f=0;3===d[0]&&(f=Math.min(1193181.6665999999/e,this.node_oscillator.frequency.maxValue),f=Math.max(f,
611
+ 0));this.node_oscillator.frequency.setValueAtTime(f,b.currentTime)},this)}yc.prototype.start=function(){this.node_oscillator.start()};function vc(a,b,c){this.bus=a;this.audio_context=b;this.enabled=!1;this.sampling_rate=48E3;b=function(){function h(p){if(0===p)return 1;p*=Math.PI;return Math.sin(p)/p}function l(){var p=Reflect.construct(AudioWorkletProcessor,[],l);p.kernel_size=3;p.queue_data=Array(1024);p.queue_start=0;p.queue_end=0;p.queue_length=0;p.queue_size=p.queue_data.length;p.queued_samples=
612
+ 0;p.source_buffer_previous=n;p.source_buffer_current=n;p.source_samples_per_destination=1;p.source_block_start=0;p.source_time=0;p.source_offset=0;p.port.onmessage=q=>{switch(q.data.type){case "queue":p.queue_push(q.data.value);break;case "sampling-rate":p.source_samples_per_destination=q.data.value/sampleRate}};return p}var n=[new Float32Array(256),new Float32Array(256)];Reflect.setPrototypeOf(l.prototype,AudioWorkletProcessor.prototype);Reflect.setPrototypeOf(l,AudioWorkletProcessor);l.prototype.process=
613
+ l.prototype.process=function(p,q){for(p=0;p<q[0][0].length;p++){for(var r=0,t=0,v=this.source_offset+this.kernel_size,y=this.source_offset-this.kernel_size+1;y<=v;y++){var C=this.source_block_start+y;r+=this.get_sample(C,0)*this.kernel(this.source_time-y);t+=this.get_sample(C,1)*this.kernel(this.source_time-y)}if(isNaN(r)||isNaN(t))r=t=0,this.dbg_log("ERROR: NaN values! Ignoring for now.");q[0][0][p]=r;q[0][1][p]=t;this.source_time+=this.source_samples_per_destination;this.source_offset=Math.floor(this.source_time)}q=
614
+ this.source_offset;q+=this.kernel_size+2;this.source_time-=this.source_offset;this.source_block_start+=this.source_offset;this.source_offset=0;this.ensure_enough_data(q);return!0};l.prototype.kernel=function(p){return h(p)*h(p/this.kernel_size)};l.prototype.get_sample=function(p,q){return 0>p?(p+=this.source_buffer_previous[0].length,this.source_buffer_previous[q][p]):this.source_buffer_current[q][p]};l.prototype.ensure_enough_data=function(p){var q=this.source_buffer_current[0].length;q-this.source_block_start<
615
+ p&&(this.prepare_next_buffer(),this.source_block_start-=q)};l.prototype.prepare_next_buffer=function(){256>this.queued_samples&&this.queue_length&&this.dbg_log("Not enough samples - should not happen during midway of playback");this.source_buffer_previous=this.source_buffer_current;this.source_buffer_current=this.queue_shift();var p=this.source_buffer_current[0].length;if(256>p){for(var q=this.queue_start,r=0;256>p&&r<this.queue_length;)p+=this.queue_data[q][0].length,q=q+1&this.queue_size-1,r++;
616
+ p=Math.max(p,256);p=[new Float32Array(p),new Float32Array(p)];p[0].set(this.source_buffer_current[0]);p[1].set(this.source_buffer_current[1]);q=this.source_buffer_current[0].length;for(var t=0;t<r;t++){var v=this.queue_shift();p[0].set(v[0],q);p[1].set(v[1],q);q+=v[0].length}this.source_buffer_current=p}this.pump()};l.prototype.pump=function(){1024>this.queued_samples/this.source_samples_per_destination&&this.port.postMessage({type:"pump"})};l.prototype.queue_push=function(p){this.queue_length<this.queue_size&&
617
+ (this.queue_data[this.queue_end]=p,this.queue_end=this.queue_end+1&this.queue_size-1,this.queue_length++,this.queued_samples+=p[0].length,this.pump())};l.prototype.queue_shift=function(){if(!this.queue_length)return n;var p=this.queue_data[this.queue_start];this.queue_data[this.queue_start]=null;this.queue_start=this.queue_start+1&this.queue_size-1;this.queue_length--;this.queued_samples-=p[0].length;return p};l.prototype.dbg_log=function(p){this.port.postMessage({type:"debug-log",value:p})};registerProcessor("dac-processor",
618
+ l)}.toString();var d=b.indexOf("{")+1,e=b.lastIndexOf("}");b=b.substring(d,e);b=new Blob(["var DEBUG = true;\n"+b],{type:"application/javascript"});var f=URL.createObjectURL(b);this.node_processor=null;this.node_output=this.audio_context.createGain();this.audio_context.audioWorklet.addModule(f).then(()=>{URL.revokeObjectURL(f);this.node_processor=new AudioWorkletNode(this.audio_context,"dac-processor",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2],parameterData:{},processorOptions:{}});
619
+ this.node_processor.port.postMessage({type:"sampling-rate",value:this.sampling_rate});this.node_processor.port.onmessage=h=>{switch(h.data.type){case "pump":this.pump();break;case "debug-log":D("SpeakerWorkletDAC - Worklet: "+h.data.value)}};this.node_processor.connect(this.node_output)});this.mixer_connection=c.add_source(this.node_output,2);this.mixer_connection.set_gain_hidden(3);a.register("dac-send-data",function(h){this.queue(h)},this);a.register("dac-enable",function(){this.enabled=!0},this);
620
+ a.register("dac-disable",function(){this.enabled=!1},this);a.register("dac-tell-sampling-rate",function(h){m(0<h,"Sampling rate should be nonzero");this.sampling_rate=h;this.node_processor&&this.node_processor.port.postMessage({type:"sampling-rate",value:h})},this);this.debugger=new Ac(this.audio_context,this.node_output)}vc.prototype.queue=function(a){this.node_processor&&(this.debugger.push_queued_data(a),this.node_processor.port.postMessage({type:"queue",value:a},[a[0].buffer,a[1].buffer]))};vc.prototype.pump=
621
+ function(){this.enabled&&this.bus.send("dac-request-data")};function wc(a,b,c){this.bus=a;this.audio_context=b;this.enabled=!1;this.sampling_rate=22050;this.buffered_time=0;this.rate_ratio=1;this.node_lowpass=this.audio_context.createBiquadFilter();this.node_lowpass.type="lowpass";this.node_output=this.node_lowpass;this.mixer_connection=c.add_source(this.node_output,2);this.mixer_connection.set_gain_hidden(3);a.register("dac-send-data",function(d){this.queue(d)},this);a.register("dac-enable",function(){this.enabled=
622
+ !0;this.pump()},this);a.register("dac-disable",function(){this.enabled=!1},this);a.register("dac-tell-sampling-rate",function(d){m(0<d,"Sampling rate should be nonzero");this.sampling_rate=d;this.rate_ratio=Math.ceil(8E3/d);this.node_lowpass.frequency.setValueAtTime(d/2,this.audio_context.currentTime)},this);this.debugger=new Ac(this.audio_context,this.node_output)}wc.prototype.queue=function(a){this.debugger.push_queued_data(a);var b=a[0].length,c=b/this.sampling_rate;if(1<this.rate_ratio){var d=
623
+ this.audio_context.createBuffer(2,b*this.rate_ratio,this.sampling_rate*this.rate_ratio);for(var e=d.getChannelData(0),f=d.getChannelData(1),h=0,l=0;l<b;l++)for(var n=0;n<this.rate_ratio;n++,h++)e[h]=a[0][l],f[h]=a[1][l]}else d=this.audio_context.createBuffer(2,b,this.sampling_rate),d.copyToChannel?(d.copyToChannel(a[0],0),d.copyToChannel(a[1],1)):(d.getChannelData(0).set(a[0]),d.getChannelData(1).set(a[1]));a=this.audio_context.createBufferSource();a.buffer=d;a.connect(this.node_lowpass);a.addEventListener("ended",
624
+ this.pump.bind(this));d=this.audio_context.currentTime;if(this.buffered_time<d)for(D("Speaker DAC - Creating/Recreating reserve - shouldn't occur frequently during playback"),this.buffered_time=d,d=.2-c,b=0;b<=d;)b+=c,this.buffered_time+=c,setTimeout(()=>this.pump(),1E3*b);a.start(this.buffered_time);this.buffered_time+=c;setTimeout(()=>this.pump(),0)};wc.prototype.pump=function(){this.enabled&&(.2<this.buffered_time-this.audio_context.currentTime||this.bus.send("dac-request-data"))};function Ac(a,
625
+ b){this.audio_context=a;this.node_source=b;this.node_processor=null;this.node_gain=this.audio_context.createGain();this.node_gain.gain.setValueAtTime(0,this.audio_context.currentTime);this.node_gain.connect(this.audio_context.destination);this.is_active=!1;this.queued_history=[];this.output_history=[];this.queued=[[],[]];this.output=[[],[]]}Ac.prototype.start=function(a){this.is_active=!0;this.queued=[[],[]];this.output=[[],[]];this.queued_history.push(this.queued);this.output_history.push(this.output);
626
+ this.node_processor=this.audio_context.createScriptProcessor(1024,2,2);this.node_processor.onaudioprocess=b=>{this.output[0].push(b.inputBuffer.getChannelData(0).slice());this.output[1].push(b.inputBuffer.getChannelData(1).slice())};this.node_source.connect(this.node_processor);this.node_processor.connect(this.node_gain);setTimeout(()=>{this.stop()},a)};Ac.prototype.stop=function(){this.is_active=!1;this.node_source.disconnect(this.node_processor);this.node_processor.disconnect();this.node_processor=
627
+ null};Ac.prototype.push_queued_data=function(a){this.is_active&&(this.queued[0].push(a[0].slice()),this.queued[1].push(a[1].slice()))};Ac.prototype.download_txt=function(a,b){a=this.output_history[a][b].map(c=>c.join(" ")).join(" ");sa(a,"dacdata.txt")};Ac.prototype.download_csv=function(a){a=this.output_history[a];for(var b=[],c=0;c<a[0].length;c++)for(var d=0;d<a[0][c].length;d++)b.push(`${a[0][c][d]},${a[1][c][d]}`);sa(b.join("\n"),"dacdata.csv")};function Bc(a,b){function c(l){h.bus&&h.enabled&&
628
+ (h.send_char(l.which),l.preventDefault())}function d(l){var n=l.which;8===n?(h.send_char(127),l.preventDefault()):9===n&&(h.send_char(9),l.preventDefault())}function e(l){if(h.enabled){for(var n=l.clipboardData.getData("text/plain"),p=0;p<n.length;p++)h.send_char(n.charCodeAt(p));l.preventDefault()}}function f(l){l.target!==a&&a.blur()}var h=this;this.enabled=!0;this.bus=b;this.text="";this.text_new_line=!1;this.last_update=0;this.bus.register("serial0-output-byte",function(l){l=String.fromCharCode(l);
629
+ this.show_char(l)},this);this.destroy=function(){a.removeEventListener("keypress",c,!1);a.removeEventListener("keydown",d,!1);a.removeEventListener("paste",e,!1);window.removeEventListener("mousedown",f,!1)};this.init=function(){this.destroy();a.style.display="block";a.addEventListener("keypress",c,!1);a.addEventListener("keydown",d,!1);a.addEventListener("paste",e,!1);window.addEventListener("mousedown",f,!1)};this.init();this.show_char=function(l){"\b"===l?(this.text=this.text.slice(0,-1),this.update()):
630
+ "\r"!==l&&(this.text+=l,"\n"===l&&(this.text_new_line=!0),this.update())};this.update=function(){var l=Date.now(),n=l-this.last_update;16>n?void 0===this.update_timer&&(this.update_timer=setTimeout(()=>{this.update_timer=void 0;var p=Date.now();m(15<=p-this.last_update);this.last_update=p;this.render()},16-n)):(void 0!==this.update_timer&&(clearTimeout(this.update_timer),this.update_timer=void 0),this.last_update=l,this.render())};this.render=function(){a.value=this.text;this.text_new_line&&(this.text_new_line=
631
+ !1,a.scrollTop=1E9)};this.send_char=function(l){h.bus&&h.bus.send("serial0-input",l)}}function Cc(a,b){this.element=a;if(window.Terminal){var c=this.term=new window.Terminal({logLevel:"off"});c.write("This is the serial console. Whatever you type or paste here will be sent to COM1");var d=c.onData(function(e){for(let f=0;f<e.length;f++)b.send("serial0-input",e.charCodeAt(f))});b.register("serial0-output-byte",function(e){c.write(Uint8Array.of(e))},this);this.destroy=function(){d.dispose();c.dispose()}}}
632
+ Cc.prototype.show=function(){this.term&&this.term.open(this.element)};function Dc(a,b,c){this.bus=b;this.socket=void 0;this.id=c||0;this.send_queue=[];this.url=a;this.reconnect_interval=1E4;this.last_connect_attempt=Date.now()-this.reconnect_interval;this.send_queue_limit=64;this.destroyed=!1;this.bus.register("net"+this.id+"-send",function(d){this.send(d)},this)}Dc.prototype.handle_message=function(a){this.bus&&this.bus.send("net"+this.id+"-receive",new Uint8Array(a.data))};Dc.prototype.handle_close=
633
+ function(){this.destroyed||(this.connect(),setTimeout(this.connect.bind(this),this.reconnect_interval))};Dc.prototype.handle_open=function(){for(var a=0;a<this.send_queue.length;a++)this.send(this.send_queue[a]);this.send_queue=[]};Dc.prototype.handle_error=function(){};Dc.prototype.destroy=function(){this.destroyed=!0;this.socket&&this.socket.close()};Dc.prototype.connect=function(){if("undefined"!==typeof WebSocket){if(this.socket){var a=this.socket.readyState;if(0===a||1===a)return}a=Date.now();
634
+ if(!(this.last_connect_attempt+this.reconnect_interval>a)){this.last_connect_attempt=Date.now();try{this.socket=new WebSocket(this.url)}catch(b){console.error(b);return}this.socket.binaryType="arraybuffer";this.socket.onopen=this.handle_open.bind(this);this.socket.onmessage=this.handle_message.bind(this);this.socket.onclose=this.handle_close.bind(this);this.socket.onerror=this.handle_error.bind(this)}}};Dc.prototype.send=function(a){this.socket&&1===this.socket.readyState?this.socket.send(a):(this.send_queue.push(a),
635
+ this.send_queue.length>2*this.send_queue_limit&&(this.send_queue=this.send_queue.slice(-this.send_queue_limit)),this.connect())};Dc.prototype.change_proxy=function(a){this.url=a;this.socket&&(this.socket.onclose=function(){},this.socket.onerror=function(){},this.socket.close(),this.socket=void 0)};const Ec={stats_to_string:function(a){return Ec.print_misc_stats(a)+Ec.print_instruction_counts(a)},print_misc_stats:function(a){let b="";var c="COMPILE COMPILE_SKIPPED_NO_NEW_ENTRY_POINTS COMPILE_WRONG_ADDRESS_SPACE COMPILE_CUT_OFF_AT_END_OF_PAGE COMPILE_WITH_LOOP_SAFETY COMPILE_PAGE COMPILE_PAGE/COMPILE COMPILE_BASIC_BLOCK COMPILE_DUPLICATED_BASIC_BLOCK COMPILE_WASM_BLOCK COMPILE_WASM_LOOP COMPILE_DISPATCHER COMPILE_ENTRY_POINT COMPILE_WASM_TOTAL_BYTES COMPILE_WASM_TOTAL_BYTES/COMPILE_PAGE RUN_INTERPRETED RUN_INTERPRETED_NEW_PAGE RUN_INTERPRETED_PAGE_HAS_CODE RUN_INTERPRETED_PAGE_HAS_ENTRY_AFTER_PAGE_WALK RUN_INTERPRETED_NEAR_END_OF_PAGE RUN_INTERPRETED_DIFFERENT_STATE RUN_INTERPRETED_DIFFERENT_STATE_CPL3 RUN_INTERPRETED_DIFFERENT_STATE_FLAT RUN_INTERPRETED_DIFFERENT_STATE_IS32 RUN_INTERPRETED_DIFFERENT_STATE_SS32 RUN_INTERPRETED_MISSED_COMPILED_ENTRY_RUN_INTERPRETED RUN_INTERPRETED_STEPS RUN_FROM_CACHE RUN_FROM_CACHE_STEPS RUN_FROM_CACHE_STEPS/RUN_FROM_CACHE RUN_FROM_CACHE_STEPS/RUN_INTERPRETED_STEPS DIRECT_EXIT INDIRECT_JUMP INDIRECT_JUMP_NO_ENTRY NORMAL_PAGE_CHANGE NORMAL_FALLTHRU NORMAL_FALLTHRU_WITH_TARGET_BLOCK NORMAL_BRANCH NORMAL_BRANCH_WITH_TARGET_BLOCK CONDITIONAL_JUMP CONDITIONAL_JUMP_PAGE_CHANGE CONDITIONAL_JUMP_EXIT CONDITIONAL_JUMP_FALLTHRU CONDITIONAL_JUMP_FALLTHRU_WITH_TARGET_BLOCK CONDITIONAL_JUMP_BRANCH CONDITIONAL_JUMP_BRANCH_WITH_TARGET_BLOCK DISPATCHER_SMALL DISPATCHER_LARGE LOOP LOOP_SAFETY CONDITION_OPTIMISED CONDITION_UNOPTIMISED CONDITION_UNOPTIMISED_PF CONDITION_UNOPTIMISED_UNHANDLED_L CONDITION_UNOPTIMISED_UNHANDLED_LE FAILED_PAGE_CHANGE SAFE_READ_FAST SAFE_READ_SLOW_PAGE_CROSSED SAFE_READ_SLOW_NOT_VALID SAFE_READ_SLOW_NOT_USER SAFE_READ_SLOW_IN_MAPPED_RANGE SAFE_WRITE_FAST SAFE_WRITE_SLOW_PAGE_CROSSED SAFE_WRITE_SLOW_NOT_VALID SAFE_WRITE_SLOW_NOT_USER SAFE_WRITE_SLOW_IN_MAPPED_RANGE SAFE_WRITE_SLOW_READ_ONLY SAFE_WRITE_SLOW_HAS_CODE SAFE_READ_WRITE_FAST SAFE_READ_WRITE_SLOW_PAGE_CROSSED SAFE_READ_WRITE_SLOW_NOT_VALID SAFE_READ_WRITE_SLOW_NOT_USER SAFE_READ_WRITE_SLOW_IN_MAPPED_RANGE SAFE_READ_WRITE_SLOW_READ_ONLY SAFE_READ_WRITE_SLOW_HAS_CODE PAGE_FAULT TLB_MISS MAIN_LOOP MAIN_LOOP_IDLE DO_MANY_CYCLES CYCLE_INTERNAL INVALIDATE_ALL_MODULES_NO_FREE_WASM_INDICES INVALIDATE_MODULE_WRITTEN_WHILE_COMPILED INVALIDATE_MODULE_UNUSED_AFTER_OVERWRITE INVALIDATE_MODULE_DIRTY_PAGE INVALIDATE_PAGE_HAD_CODE INVALIDATE_PAGE_HAD_ENTRY_POINTS DIRTY_PAGE_DID_NOT_HAVE_CODE RUN_FROM_CACHE_EXIT_SAME_PAGE RUN_FROM_CACHE_EXIT_NEAR_END_OF_PAGE RUN_FROM_CACHE_EXIT_DIFFERENT_PAGE CLEAR_TLB FULL_CLEAR_TLB TLB_FULL TLB_GLOBAL_FULL MODRM_SIMPLE_REG MODRM_SIMPLE_REG_WITH_OFFSET MODRM_SIMPLE_CONST_OFFSET MODRM_COMPLEX SEG_OFFSET_OPTIMISED SEG_OFFSET_NOT_OPTIMISED SEG_OFFSET_NOT_OPTIMISED_ES SEG_OFFSET_NOT_OPTIMISED_FS SEG_OFFSET_NOT_OPTIMISED_GS SEG_OFFSET_NOT_OPTIMISED_NOT_FLAT".split(" "),
636
+ d=0;const e={};for(let h=0;h<c.length;h++){const l=c[h];var f=void 0;if(l.includes("/")){d++;const [n,p]=l.split("/");f=e[n]/e[p]}else f=e[l]=a.wm.exports.profiler_stat_get(h-d),f=1E8<=f?Math.round(f/1E6)+"m":1E5<=f?Math.round(f/1E3)+"k":f;b+=l+"="+f+"\n"}b+="\n";c=a.wm.exports.get_valid_tlb_entries_count();d=a.wm.exports.get_valid_global_tlb_entries_count();b=b+("TLB_ENTRIES="+c+" ("+d+" global, "+(c-d)+" non-global)\nWASM_TABLE_FREE=")+(a.wm.exports.jit_get_wasm_table_index_free_list_count()+"\n");
637
+ b+="JIT_CACHE_SIZE="+a.wm.exports.jit_get_cache_size()+"\n";b+="FLAT_SEGMENTS="+a.wm.exports.has_flat_segmentation()+"\n";b+="wasm memory size: "+(a.wasm_memory.buffer.byteLength>>20)+"m\n";b=b+"Config:\nJIT_DISABLED="+(a.wm.exports.get_jit_config(0)+"\n");b+="MAX_PAGES="+a.wm.exports.get_jit_config(1)+"\n";b+="JIT_USE_LOOP_SAFETY="+!!a.wm.exports.get_jit_config(2)+"\n";return b+="MAX_EXTRA_BASIC_BLOCKS="+a.wm.exports.get_jit_config(3)+"\n"},print_instruction_counts:function(a){return[Ec.print_instruction_counts_offset(a,
638
+ !1,!1,!1,!1),Ec.print_instruction_counts_offset(a,!0,!1,!1,!1),Ec.print_instruction_counts_offset(a,!1,!0,!1,!1),Ec.print_instruction_counts_offset(a,!1,!1,!0,!1),Ec.print_instruction_counts_offset(a,!1,!1,!1,!0)].join("\n\n")},print_instruction_counts_offset:function(a,b,c,d,e){let f="";var h=[],l=b?"compiled":c?"jit exit":d?"unguarded register":e?"wasm size":"executed";for(let q=0;256>q;q++)for(let r=0;8>r;r++)for(const t of[!1,!0]){var n=a.wm.exports.get_opstats_buffer(b,c,d,e,q,!1,t,r);h.push({opcode:q,
639
+ count:n,is_mem:t,fixed_g:r});n=a.wm.exports.get_opstats_buffer(b,c,d,e,q,!0,t,r);h.push({opcode:3840|q,count:n,is_mem:t,fixed_g:r})}a=0;b=new Set([38,46,54,62,100,101,102,103,240,242,243]);for(const {count:q,opcode:r}of h)b.has(r)||(a+=q);if(0===a)return"";c=new Uint32Array(256);b=new Uint32Array(256);for(const {opcode:q,count:r}of h)3840===(q&65280)?b[q&255]+=r:c[q&255]+=r;f=f+"------------------\nTotal: "+(a+"\n");const p=1E7<a?1E3:1;d=Math.max.apply(Math,h.map(({count:q})=>Math.round(q/p)));d=
640
+ String(d).length;f+=`Instruction counts ${l} (in ${p}):\n`;for(e=0;256>e;e++)f+=e.toString(16).padStart(2,"0")+":"+da(Math.round(c[e]/p),d),f=15===e%16?f+"\n":f+" ";f=f+"\n"+`Instruction counts ${l} (0f, in ${p}):\n`;for(l=0;256>l;l++)f+=(l&255).toString(16).padStart(2,"0")+":"+da(Math.round(b[l]/p),d),f=15===l%16?f+"\n":f+" ";f+="\n";h=h.filter(({count:q})=>q).sort(({count:q},{count:r})=>r-q);for(const {opcode:q,is_mem:r,fixed_g:t,count:v}of h.slice(0,200))h=q.toString(16)+"_"+t+(r?"_m":"_r"),f+=
641
+ h+":"+(v/a*100).toFixed(2)+" ";return f+"\n"}};g.exportSymbol("print_stats$$module$src$browser$print_stats",Ec);const Fc=(new Date("1970-01-01T00:00:00Z")).getTime(),Gc=(new Date("1900-01-01T00:00:00Z")).getTime(),Hc=Fc-Gc,Ic=Math.pow(2,32),Jc=[118,56,54];function Kc(a){return[0,1,2,3,4,5].map(b=>a[b].toString(16)).map(b=>1===b.length?"0"+b:b).join(":")}function Lc(a){return a[0]<<24|a[1]<<16|a[2]<<8|a[3]}class Mc{constructor(a,b){a=Math.min(a,16);this.maximum_capacity=b?Math.max(b,a):0;this.length=
642
+ this.head=this.tail=0;this.buffer=new Uint8Array(a)}write(a){const b=a.length;var c=this.length+b;let d=this.buffer.length;if(d<c){for(;d<c;)d*=2;if(this.maximum_capacity&&d>this.maximum_capacity)throw Error("stream capacity overflow in GrowableRingbuffer.write(), package dropped");c=new Uint8Array(d);this.peek(c);this.tail=0;this.head=this.length;this.buffer=c}c=this.buffer;const e=this.head+b;if(e>d){const f=d-this.head;c.set(a.subarray(0,f),this.head);c.set(a.subarray(f))}else c.set(a,this.head);
643
+ this.head=e%d;this.length+=b}peek(a){const b=Math.min(this.length,a.length);if(b){const e=this.buffer;var c=e.length,d=this.tail+b;d>c?(d%=c,c-=this.tail,a.set(e.subarray(this.tail)),a.set(e.subarray(0,d),c)):a.set(e.subarray(this.tail,d))}return b}remove(a){a>this.length&&(a=this.length);a&&(this.tail=(this.tail+a)%this.buffer.length,this.length-=a);return a}}function Nc(){const a=new Uint8Array(1518),b=a.buffer,c=a.byteOffset;return{eth_frame:a,eth_frame_view:new DataView(b),eth_payload_view:new DataView(b,
644
+ c+14,1500),ipv4_payload_view:new DataView(b,c+34,1480),udp_payload_view:new DataView(b,c+42,1472),text_encoder:new TextEncoder}}function Oc(a,b,c,d){d.eth_frame.set(b,c.byteOffset+a);return b.length}function Pc(a,b,c,d){const e=c.byteOffset+(a&-2);d=d.eth_frame;for(c=c.byteOffset;c<e;c+=2)b+=d[c]<<8|d[c+1];for(a&1&&(b+=d[e]<<8);b>>16;)b=(b&65535)+(b>>16);return~b&65535}function Qc(a,b){m(b.eth);a.eth_frame.fill(0);var c=a.eth_frame,d=c.subarray,e=a.eth_frame_view;Oc(0,b.eth.dest,e,a);Oc(6,b.eth.src,
645
+ e,a);e.setUint16(12,b.eth.ethertype);e=14;if(b.arp){var f=a.eth_payload_view;f.setUint16(0,b.arp.htype);f.setUint16(2,b.arp.ptype);f.setUint8(4,b.arp.sha.length);f.setUint8(5,b.arp.spa.length);f.setUint16(6,b.arp.oper);Oc(8,b.arp.sha,f,a);Oc(14,b.arp.spa,f,a);Oc(18,b.arp.tha,f,a);Oc(24,b.arp.tpa,f,a);e+=28}else if(b.ipv4){f=a.eth_payload_view;var h=20;if(b.icmp){var l=a.ipv4_payload_view;l.setUint8(0,b.icmp.type);l.setUint8(1,b.icmp.code);l.setUint16(2,0);var n=4+Oc(4,b.icmp.data,l,a);l.setUint16(2,
646
+ Pc(n,0,l,a));h+=n}else if(b.udp){l=a.ipv4_payload_view;var p=8;if(b.dhcp){n=p;var q=a.udp_payload_view;q.setUint8(0,b.dhcp.op);q.setUint8(1,b.dhcp.htype);q.setUint8(2,b.dhcp.hlen);q.setUint8(3,b.dhcp.hops);q.setUint32(4,b.dhcp.xid);q.setUint16(8,b.dhcp.secs);q.setUint16(10,b.dhcp.flags);q.setUint32(12,b.dhcp.ciaddr);q.setUint32(16,b.dhcp.yiaddr);q.setUint32(20,b.dhcp.siaddr);q.setUint32(24,b.dhcp.giaddr);Oc(28,b.dhcp.chaddr,q,a);q.setUint32(236,1669485411);p=240;for(var r of b.dhcp.options)p+=Oc(p,
647
+ r,q,a);n+=p}else if(b.dns){r=p;p=a.udp_payload_view;p.setUint16(0,b.dns.id);p.setUint16(2,b.dns.flags);p.setUint16(4,b.dns.questions.length);p.setUint16(6,b.dns.answers.length);let y=12;for(var t=0;t<b.dns.questions.length;++t){var v=b.dns.questions[t];for(q of v.name){const C=a.text_encoder.encodeInto(q,a.eth_frame.subarray(p.byteOffset+(y+1))).written;p.setUint8(y,C);y+=1+C}p.setUint16(y,v.type);y+=2;p.setUint16(y,v.class);y+=2}for(t=0;t<b.dns.answers.length;++t){q=b.dns.answers[t];for(n of q.name)v=
648
+ a.text_encoder.encodeInto(n,a.eth_frame.subarray(p.byteOffset+(y+1))).written,p.setUint8(y,v),y+=1+v;p.setUint16(y,q.type);y+=2;p.setUint16(y,q.class);y+=2;p.setUint32(y,q.ttl);y+=4;p.setUint16(y,q.data.length);y+=2;y+=Oc(y,q.data,p,a)}n=r+y}else b.ntp?(n=p,q=a.udp_payload_view,q.setUint8(0,b.ntp.flags),q.setUint8(1,b.ntp.stratum),q.setUint8(2,b.ntp.poll),q.setUint8(3,b.ntp.precision),q.setUint32(4,b.ntp.root_delay),q.setUint32(8,b.ntp.root_disp),q.setUint32(12,b.ntp.ref_id),q.setUint32(16,b.ntp.ref_ts_i),
649
+ q.setUint32(20,b.ntp.ref_ts_f),q.setUint32(24,b.ntp.ori_ts_i),q.setUint32(28,b.ntp.ori_ts_f),q.setUint32(32,b.ntp.rec_ts_i),q.setUint32(36,b.ntp.rec_ts_f),q.setUint32(40,b.ntp.trans_ts_i),q.setUint32(44,b.ntp.trans_ts_f),n+=48):n=p+Oc(0,b.udp.data,a.udp_payload_view,a);p=n;l.setUint16(0,b.udp.sport);l.setUint16(2,b.udp.dport);l.setUint16(4,p);l.setUint16(6,0);l.setUint16(6,Pc(p,(b.ipv4.src[0]<<8|b.ipv4.src[1])+(b.ipv4.src[2]<<8|b.ipv4.src[3])+(b.ipv4.dest[0]<<8|b.ipv4.dest[1])+(b.ipv4.dest[2]<<8|
650
+ b.ipv4.dest[3])+17+p,l,a));h+=p}else b.tcp&&(l=a.ipv4_payload_view,n=0,q=b.tcp,q.fin&&(n|=1),q.syn&&(n|=2),q.rst&&(n|=4),q.psh&&(n|=8),q.ack&&(n|=16),q.urg&&(n|=32),q.ece&&(n|=64),q.cwr&&(n|=128),l.setUint16(0,q.sport),l.setUint16(2,q.dport),l.setUint32(4,q.seq),l.setUint32(8,q.ackn),l.setUint8(12,80),l.setUint8(13,n),l.setUint16(14,q.winsize),l.setUint16(16,0),l.setUint16(18,q.urgent||0),n=20,b.tcp_data&&(n+=Oc(20,b.tcp_data,l,a)),l.setUint16(16,Pc(n,(b.ipv4.src[0]<<8|b.ipv4.src[1])+(b.ipv4.src[2]<<
651
+ 8|b.ipv4.src[3])+(b.ipv4.dest[0]<<8|b.ipv4.dest[1])+(b.ipv4.dest[2]<<8|b.ipv4.dest[3])+6+n,l,a)),h+=n);f.setUint8(0,69);f.setUint8(1,b.ipv4.tos||0);f.setUint16(2,h);f.setUint16(4,b.ipv4.id||0);f.setUint8(6,64);f.setUint8(8,b.ipv4.ttl||32);f.setUint8(9,b.ipv4.proto);f.setUint16(10,0);Oc(12,b.ipv4.src,f,a);Oc(16,b.ipv4.dest,f,a);f.setUint16(10,Pc(20,0,f,a));e+=h}return d.call(c,0,e)}function Rc(a,b){fetch(`https://${b.doh_server||"cloudflare-dns.com"}/dns-query`,{method:"POST",headers:[["content-type",
652
+ "application/dns-message"]],body:a.udp.data}).then(async c=>{c={eth:{ethertype:2048,src:b.router_mac,dest:a.eth.src},ipv4:{proto:17,src:b.router_ip,dest:a.ipv4.src},udp:{sport:53,dport:a.udp.sport,data:new Uint8Array(await c.arrayBuffer())}};b.receive(Qc(b.eth_encoder_buf,c))});return!0}function Sc(a,b){let c={};c.eth={ethertype:2048,src:b.router_mac,dest:a.eth.src};c.ipv4={proto:17,src:b.router_ip,dest:b.vm_ip};c.udp={sport:67,dport:68};c.dhcp={htype:1,hlen:6,hops:0,xid:a.dhcp.xid,secs:0,flags:0,
653
+ ciaddr:0,yiaddr:Lc(b.vm_ip),siaddr:Lc(b.router_ip),giaddr:Lc(b.router_ip),chaddr:a.dhcp.chaddr};let d=[],e=a.dhcp.options.find(function(f){return 53===f[0]});e&&3===e[2]&&(a.dhcp.op=3);1===a.dhcp.op&&(c.dhcp.op=2,d.push(new Uint8Array([53,1,2])));3===a.dhcp.op&&(c.dhcp.op=2,d.push(new Uint8Array([53,1,5])),d.push(new Uint8Array([51,4,8,0,0,0])));a=[b.router_ip[0],b.router_ip[1],b.router_ip[2],b.router_ip[3]];d.push(new Uint8Array([1,4,255,255,255,0]));b.masquerade&&(d.push(new Uint8Array([3,4].concat(a))),
654
+ d.push(new Uint8Array([6,4].concat(a))));d.push(new Uint8Array([54,4].concat(a)));d.push(new Uint8Array([60,3].concat(Jc)));d.push(new Uint8Array([255,0]));c.dhcp.options=d;b.receive(Qc(b.eth_encoder_buf,c))}function Tc(a,b){let c={};var d=(new DataView(a.buffer,a.byteOffset,a.byteLength)).getUint16(12),e={ethertype:d,dest:a.subarray(0,6),dest_s:Kc(a.subarray(0,6)),src:a.subarray(6,12),src_s:Kc(a.subarray(6,12))};c.eth=e;a=a.subarray(14,a.length);if(2048===d){var f=new DataView(a.buffer,a.byteOffset,
655
+ a.byteLength),h=a[0]>>4&15;e=a[0]&15;var l=f.getUint8(1),n=f.getUint16(2);let p=f.getUint8(8);d=f.getUint8(9);f=f.getUint16(10);h={version:h,ihl:e,tos:l,len:n,ttl:p,proto:d,ip_checksum:f,src:a.subarray(12,16),dest:a.subarray(16,20)};Math.max(n,46)!==a.length&&D(`ipv4 Length mismatch: ${n} != ${a.length}`,16777216);c.ipv4=h;e=a.subarray(4*e,n);if(1===d)a=new DataView(e.buffer,e.byteOffset,e.byteLength),a={type:a.getUint8(0),code:a.getUint8(1),checksum:a.getUint16(2),data:e.subarray(4)},c.icmp=a;else if(6===
656
+ d)d=new DataView(e.buffer,e.byteOffset,e.byteLength),a={sport:d.getUint16(0),dport:d.getUint16(2),seq:d.getUint32(4),ackn:d.getUint32(8),doff:d.getUint8(12)>>4,winsize:d.getUint16(14),checksum:d.getUint16(16),urgent:d.getUint16(18)},d=d.getUint8(13),a.fin=!!(d&1),a.syn=!!(d&2),a.rst=!!(d&4),a.psh=!!(d&8),a.ack=!!(d&16),a.urg=!!(d&32),a.ece=!!(d&64),a.cwr=!!(d&128),c.tcp=a,c.tcp_data=e.subarray(4*a.doff);else if(17===d){a=new DataView(e.buffer,e.byteOffset,e.byteLength);a={sport:a.getUint16(0),dport:a.getUint16(2),
657
+ len:a.getUint16(4),checksum:a.getUint16(6),data:e.subarray(8),data_s:(new TextDecoder).decode(e.subarray(8))};if(67===a.dport||67===a.sport){e=e.subarray(8);d=new DataView(e.buffer,e.byteOffset,e.byteLength);e.subarray(44,236);d={op:d.getUint8(0),htype:d.getUint8(1),hlen:d.getUint8(2),hops:d.getUint8(3),xid:d.getUint32(4),secs:d.getUint16(8),flags:d.getUint16(10),ciaddr:d.getUint32(12),yiaddr:d.getUint32(16),siaddr:d.getUint32(20),giaddr:d.getUint32(24),chaddr:e.subarray(28,44),magic:d.getUint32(236),
658
+ options:[]};e=e.subarray(240);for(n=0;n<e.length;++n)h=n,0!==e[n]&&(++n,l=e[n],n+=l,d.options.push(e.subarray(h,h+l+2)));c.dhcp=d;c.dhcp_options=d.options}else 53===a.dport||53===a.sport?Uc(e.subarray(8),c):123===a.dport&&(d=e.subarray(8),d=new DataView(d.buffer,d.byteOffset,d.byteLength),c.ntp={flags:d.getUint8(0),stratum:d.getUint8(1),poll:d.getUint8(2),precision:d.getUint8(3),root_delay:d.getUint32(4),root_disp:d.getUint32(8),ref_id:d.getUint32(12),ref_ts_i:d.getUint32(16),ref_ts_f:d.getUint32(20),
659
+ ori_ts_i:d.getUint32(24),ori_ts_f:d.getUint32(28),rec_ts_i:d.getUint32(32),rec_ts_f:d.getUint32(36),trans_ts_i:d.getUint32(40),trans_ts_f:d.getUint32(44)});c.udp=a}}else 2054===d?(d=new DataView(a.buffer,a.byteOffset,a.byteLength),a={htype:d.getUint16(0),ptype:d.getUint16(2),oper:d.getUint16(6),sha:a.subarray(8,14),spa:a.subarray(14,18),tha:a.subarray(18,24),tpa:a.subarray(24,28)},c.arp=a):34525===d?D("Unimplemented: ipv6"):D("Unknown ethertype: "+z(d),16777216);if(c.ipv4)if(c.tcp)a:{a=`${c.ipv4.src.join(".")}:${c.tcp.sport}:${c.ipv4.dest.join(".")}:${c.tcp.dport}`;
660
+ if(c.tcp.syn&&(b.tcp_conn[a]&&D("SYN to already opened port",16777216),b.on_tcp_connection(c,a)))break a;if(b.tcp_conn[a])b.tcp_conn[a].process(c);else{D(`I dont know about ${a}, so resetting`,16777216);a=c.tcp.ackn;if(c.tcp.fin||c.tcp.syn)a+=1;d={};d.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src};d.ipv4={proto:6,src:c.ipv4.dest,dest:c.ipv4.src};d.tcp={sport:c.tcp.dport,dport:c.tcp.sport,seq:a,ackn:c.tcp.seq+(c.tcp.syn?1:0),winsize:c.tcp.winsize,rst:!0,ack:c.tcp.syn};b.receive(Qc(b.eth_encoder_buf,
661
+ d))}}else if(c.udp)if(c.dns)if("static"===b.dns_method){a={};a.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src};a.ipv4={proto:17,src:b.router_ip,dest:c.ipv4.src};a.udp={sport:53,dport:c.udp.sport};d=[];for(e=0;e<c.dns.questions.length;++e)switch(n=c.dns.questions[e],n.type){case 1:d.push({name:n.name,type:n.type,class:n.class,ttl:600,data:[192,168,87,1]})}a.dns={id:c.dns.id,flags:33152,questions:c.dns.questions,answers:d};b.receive(Qc(b.eth_encoder_buf,a))}else Rc(c,b);else c.dhcp?Sc(c,b):c.ntp?
662
+ (a=Date.now()+Hc,d=a%1E3/1E3*Ic,e={},e.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src},e.ipv4={proto:17,src:c.ipv4.dest,dest:c.ipv4.src},e.udp={sport:123,dport:c.udp.sport},e.ntp=Object.assign({},c.ntp),e.ntp.flags=36,e.ntp.poll=10,e.ntp.ori_ts_i=c.ntp.trans_ts_i,e.ntp.ori_ts_f=c.ntp.trans_ts_f,e.ntp.rec_ts_i=a/1E3,e.ntp.rec_ts_f=d,e.ntp.trans_ts_i=a/1E3,e.ntp.trans_ts_f=d,e.ntp.stratum=2,b.receive(Qc(b.eth_encoder_buf,e))):8===c.udp.dport&&(a={},a.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src},
663
+ a.ipv4={proto:17,src:c.ipv4.dest,dest:c.ipv4.src},a.udp={sport:c.udp.dport,dport:c.udp.sport,data:(new TextEncoder).encode(c.udp.data_s)},b.receive(Qc(b.eth_encoder_buf,a)));else c.icmp&&8===c.icmp.type&&(a={},a.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src},a.ipv4={proto:1,src:c.ipv4.dest,dest:c.ipv4.src},a.icmp={type:0,code:c.icmp.code,data:c.icmp.data},b.receive(Qc(b.eth_encoder_buf,a)));else c.arp&&1===c.arp.oper&&2048===c.arp.ptype&&(a=Lc(c.arp.tpa)&4294967040,d=Lc(b.router_ip)&4294967040,
664
+ !b.masquerade&&a!==d||a===d&&99<c.arp.tpa[3]||(a={},a.eth={ethertype:2054,src:b.router_mac,dest:c.eth.src},a.arp={htype:1,ptype:2048,oper:2,sha:b.router_mac,spa:c.arp.tpa,tha:c.eth.src,tpa:c.arp.spa},b.receive(Qc(b.eth_encoder_buf,a))))}function Uc(a,b){function c(){let p=[],q;do q=d.getUint8(l),p.push((new TextDecoder).decode(a.subarray(l+1,l+1+q))),l+=q+1;while(0<q);return p}let d=new DataView(a.buffer,a.byteOffset,a.byteLength),e={id:d.getUint16(0),flags:d.getUint16(2),questions:[],answers:[]};
665
+ var f=d.getUint16(4);let h=d.getUint16(6);d.getUint16(8);d.getUint16(10);let l=12;for(var n=0;n<f;n++)e.questions.push({name:c(),type:d.getInt16(l),class:d.getInt16(l+2)}),l+=4;for(f=0;f<h;f++){n={name:c(),type:d.getInt16(l),class:d.getUint16(l+2),ttl:d.getUint32(l+4)};l+=8;let p=d.getUint16(l);l+=2;n.data=a.subarray(l,l+p);l+=p;e.answers.push(n)}b.dns=e}function Vc(a,b){var c=b.vm_ip.join(".");const d=b.router_ip.join("."),e=16383*Math.random()|0;let f,h,l=0;do f=49152+(e+l)%16383,h=`${c}:${a}:${d}:${f}`;
666
+ while(16383>++l&&b.tcp_conn[h]);if(b.tcp_conn[h])throw Error("pool of dynamic TCP port numbers exhausted, connection aborted");c=new Wc;c.tuple=h;c.hsrc=b.router_mac;c.psrc=b.router_ip;c.sport=f;c.hdest=b.vm_mac;c.dport=a;c.pdest=b.vm_ip;c.net=b;b.tcp_conn[h]=c;c.connect();return c}function Xc(a,b){return new Promise(c=>{let d=Vc(a,b);d.state="syn-probe";d.on("probe",c)})}function Wc(){this.state="closed";this.net=null;this.send_buffer=new Mc(2048,0);this.send_chunk_buf=new Uint8Array(1460);this.delayed_send_fin=
667
+ this.in_active_close=!1;this.delayed_state=void 0;this.events_handlers={}}Wc.prototype.on=function(a,b){this.events_handlers[a]=b};Wc.prototype.emit=function(a,...b){this.events_handlers[a]&&this.events_handlers[a].apply(this,b)};Wc.prototype.ipv4_reply=function(){let a={};a.eth={ethertype:2048,src:this.hsrc,dest:this.hdest};a.ipv4={proto:6,src:this.psrc,dest:this.pdest};a.tcp={sport:this.sport,dport:this.dport,winsize:this.winsize,ackn:this.ack,seq:this.seq,ack:!0};return a};Wc.prototype.packet_reply=
668
+ function(a,b){a={sport:a.tcp.dport,dport:a.tcp.sport,winsize:a.tcp.winsize,ackn:this.ack,seq:this.seq};if(b)for(const c in b)a[c]=b[c];b=this.ipv4_reply();b.tcp=a;return b};Wc.prototype.connect=function(){this.seq=1338;this.ack=1;this.start_seq=0;this.winsize=64240;this.state="syn-sent";let a=this.ipv4_reply();a.ipv4.id=2345;a.tcp={sport:this.sport,dport:this.dport,seq:1337,ackn:0,winsize:0,syn:!0};this.net.receive(Qc(this.net.eth_encoder_buf,a))};Wc.prototype.accept=function(a){this.seq=1338;this.ack=
669
+ a.tcp.seq+1;this.start_seq=a.tcp.seq;this.hsrc=this.net.router_mac;this.psrc=a.ipv4.dest;this.sport=a.tcp.dport;this.hdest=a.eth.src;this.dport=a.tcp.sport;this.pdest=a.ipv4.src;this.winsize=a.tcp.winsize;let b=this.ipv4_reply();b.tcp={sport:this.sport,dport:this.dport,seq:1337,ackn:this.ack,winsize:a.tcp.winsize,syn:!0,ack:!0};this.state="established";this.net.receive(Qc(this.net.eth_encoder_buf,b))};Wc.prototype.process=function(a){if("closed"===this.state)a=this.packet_reply(a,{rst:!0}),this.net.receive(Qc(this.net.eth_encoder_buf,
670
+ a));else if(a.tcp.rst){if("syn-probe"===this.state)this.emit("probe",!1);else this.on_close();this.release()}else if(a.tcp.syn){if("syn-sent"===this.state&&a.tcp.ack){this.ack=a.tcp.seq+1;this.start_seq=a.tcp.seq;this.last_received_ackn=a.tcp.ackn;var b=this.ipv4_reply();this.net.receive(Qc(this.net.eth_encoder_buf,b));this.state="established";this.emit("connect")}else"syn-probe"===this.state&&a.tcp.ack?(this.emit("probe",!0),b=this.packet_reply(a,{rst:!0}),this.net.receive(Qc(this.net.eth_encoder_buf,
671
+ b)),this.release()):D(`TCP[${this.tuple}]: WARNING: unexpected SYN packet dropped`,16777216);a.tcp_data.length&&D(`TCP[${this.tuple}]: WARNING: ${a.tcp_data.length} bytes of unexpected SYN packet payload dropped`,16777216)}else{if(a.tcp.ack)if("syn-received"===this.state)this.state="established";else if("fin-wait-1"===this.state)a.tcp.fin||(this.state="fin-wait-2");else if("closing"===this.state||"last-ack"===this.state){this.release();return}if(void 0===this.last_received_ackn)this.last_received_ackn=
672
+ a.tcp.ackn;else if(b=a.tcp.ackn-this.last_received_ackn,0<b){if(this.last_received_ackn=a.tcp.ackn,this.send_buffer.remove(b),this.seq+=b,this.pending=!1,this.delayed_send_fin&&!this.send_buffer.length){this.delayed_send_fin=!1;this.state=this.delayed_state;a=this.ipv4_reply();a.tcp.fin=!0;this.net.receive(Qc(this.net.eth_encoder_buf,a));return}}else if(0>b){D(`TCP[${this.tuple}]: ERROR: ack underflow (pkt=${a.tcp.ackn} last=${this.last_received_ackn}), resetting`,16777216);a=this.packet_reply(a,
673
+ {rst:!0});this.net.receive(Qc(this.net.eth_encoder_buf,a));this.on_close();this.release();return}a.tcp.fin?(this.ack!==a.tcp.seq&&D(`TCP[${this.tuple}]: WARNING: closing connection in state "${this.state}" with invalid seq (${this.ack} != ${a.tcp.seq})`,16777216),++this.ack,b=this.packet_reply(a,{}),"established"===this.state?(b.tcp.ack=!0,this.state="close-wait",this.on_shutdown()):"fin-wait-1"===this.state?(a.tcp.ack?this.release():this.state="closing",b.tcp.ack=!0):"fin-wait-2"===this.state?(this.release(),
674
+ b.tcp.ack=!0):(this.release(),this.on_close(),b.tcp.rst=!0),this.net.receive(Qc(this.net.eth_encoder_buf,b))):this.ack!==a.tcp.seq?(this.ack!==a.tcp.seq+1&&D(`Packet seq was wrong ex: ${this.ack} ~${this.ack-this.start_seq} `+`pk: ${a.tcp.seq} ~${this.start_seq-a.tcp.seq} `+`(${this.ack-a.tcp.seq}) = ${this.name}`,16777216),a=this.packet_reply(a,{ack:!0}),this.net.receive(Qc(this.net.eth_encoder_buf,a))):a.tcp.ack&&0<a.tcp_data.length&&(this.ack+=a.tcp_data.length,b=this.ipv4_reply(),this.net.receive(Qc(this.net.eth_encoder_buf,
675
+ b)),this.emit("data",a.tcp_data));this.pump()}};Wc.prototype.write=function(a){this.in_active_close||this.send_buffer.write(a);this.pump()};Wc.prototype.writev=function(a){if(!this.in_active_close)for(const b of a)this.send_buffer.write(b);this.pump()};Wc.prototype.close=function(){if(!this.in_active_close){this.in_active_close=!0;if("established"===this.state||"syn-received"===this.state)var a="fin-wait-1";else if("close-wait"===this.state)a="last-ack";else{"syn-sent"!==this.state&&D(`TCP[${this.tuple}]: active close in unexpected state "${this.state}"`,
676
+ 16777216);this.release();return}this.send_buffer.length||this.pending?(this.delayed_send_fin=!0,this.delayed_state=a):(this.state=a,a=this.ipv4_reply(),a.tcp.fin=!0,this.net.receive(Qc(this.net.eth_encoder_buf,a)))}this.pump()};Wc.prototype.on_shutdown=function(){this.emit("shutdown")};Wc.prototype.on_close=function(){this.emit("close")};Wc.prototype.release=function(){this.net.tcp_conn[this.tuple]&&(this.state="closed",delete this.net.tcp_conn[this.tuple])};Wc.prototype.pump=function(){if(this.send_buffer.length&&
677
+ !this.pending){const a=this.send_chunk_buf,b=this.send_buffer.peek(a),c=this.ipv4_reply();c.tcp.psh=!0;c.tcp_data=a.subarray(0,b);this.net.receive(Qc(this.net.eth_encoder_buf,c));this.pending=!0}};function Yc(a,b){b=b||{};this.bus=a;this.id=b.id||0;this.router_mac=new Uint8Array((b.router_mac||"52:54:0:1:2:3").split(":").map(function(c){return parseInt(c,16)}));this.router_ip=new Uint8Array((b.router_ip||"192.168.86.1").split(".").map(function(c){return parseInt(c,10)}));this.vm_ip=new Uint8Array((b.vm_ip||
678
+ "192.168.86.100").split(".").map(function(c){return parseInt(c,10)}));this.masquerade=void 0===b.masquerade||!!b.masquerade;this.vm_mac=new Uint8Array(6);this.dns_method=b.dns_method||"static";this.doh_server=b.doh_server;this.tcp_conn={};this.eth_encoder_buf=Nc();this.fetch=(...c)=>fetch(...c);this.cors_proxy=b.cors_proxy;this.bus.register("net"+this.id+"-mac",function(c){this.vm_mac=new Uint8Array(c.split(":").map(function(d){return parseInt(d,16)}))},this);this.bus.register("net"+this.id+"-send",
679
+ function(c){this.send(c)},this)}g.exportSymbol("FetchNetworkAdapter$$module$src$browser$fetch_network",Yc);Yc.prototype.destroy=function(){};Yc.prototype.on_tcp_connection=function(a,b){if(80===a.tcp.dport){let c=new Wc;c.state="syn-received";c.net=this;c.on("data",Zc);c.tuple=b;c.accept(a);this.tcp_conn[b]=c;return!0}return!1};Yc.prototype.connect=function(a){return Vc(a,this)};Yc.prototype.tcp_probe=function(a){return Xc(a,this)};async function Zc(a){this.read=this.read||"";if((this.read+=(new TextDecoder).decode(a))&&
680
+ -1!==this.read.indexOf("\r\n\r\n")){var b=this.read.indexOf("\r\n\r\n");a=this.read.substring(0,b).split(/\r\n/);b=this.read.substring(b+4);this.read="";let c=a[0].split(" "),d;d=/^https?:/.test(c[1])?new URL(c[1]):new URL("http://host"+c[1]);"undefined"!==typeof window&&"http:"===d.protocol&&"https:"===window.location.protocol&&(d.protocol="https:");let e=new Headers;for(let n=1;n<a.length;++n){const p=this.net.parse_http_header(a[n]);if(!p){console.warn('The request contains an invalid header: "%s"',
681
+ a[n]);this.write((new TextEncoder).encode("HTTP/1.1 400 Bad Request\r\nContent-Length: 0"));return}"host"===p.key.toLowerCase()?d.host=p.value:e.append(p.key,p.value)}D("HTTP Dispatch: "+d.href,16777216);this.name=d.href;a={method:c[0],headers:e};-1!==["put","post"].indexOf(a.method.toLowerCase())&&(a.body=b);const f=this.net.cors_proxy?this.net.cors_proxy+encodeURIComponent(d.href):d.href,h=new TextEncoder;let l=!1;this.net.fetch(f,a).then(n=>{const p=[`HTTP/1.1 ${n.status} ${n.statusText}`,`x-was-fetch-redirected: ${!!n.redirected}`,
682
+ `x-fetch-resp-url: ${n.url}`,"Connection: closed"];for(const [q,r]of n.headers.entries())["content-encoding","connection","content-length","transfer-encoding"].includes(q.toLowerCase())||p.push(`${q}: ${r}`);this.write(h.encode(p.join("\r\n")+"\r\n\r\n"));l=!0;if(n.body&&n.body.getReader){const q=n.body.getReader(),r=({value:t,done:v})=>{t&&this.write(t);if(v)this.close();else return q.read().then(r)};q.read().then(r)}else n.arrayBuffer().then(q=>{this.write(new Uint8Array(q));this.close()})}).catch(n=>
683
+ {console.warn("Fetch Failed: "+f+"\n"+n);l||(n=h.encode(`Fetch ${f} failed:\n\n${n.stack||n.message}`),this.writev([h.encode(["HTTP/1.1 502 Fetch Error","Content-Type: text/plain",`Content-Length: ${n.length}`,"Connection: closed"].join("\r\n")+"\r\n\r\n"),n]));this.close()})}}Yc.prototype.fetch=async function(a,b){this.cors_proxy&&(a=this.cors_proxy+encodeURIComponent(a));try{const c=await fetch(a,b),d=await c.arrayBuffer();return[c,d]}catch(c){return console.warn("Fetch Failed: "+a+"\n"+c),b=new Headers,
684
+ b.set("Content-Type","text/plain"),[{status:502,statusText:"Fetch Error",headers:b},(new TextEncoder).encode(`Fetch ${a} failed:\n\n${c.stack}`).buffer]}};Yc.prototype.parse_http_header=function(a){var b=a.match(/^([^:]*):(.*)$/);if(b)if(a=b[1],b=b[2].trim(),0===a.length)D("Header key is empty, raw header",16777216);else if(0===b.length)D("Header value is empty",16777216);else if(/^[\w-]+$/.test(a)){if(/^[\x20-\x7E]+$/.test(b))return{key:a,value:b};D("Header value contains forbidden characters",16777216)}else D("Header key contains forbidden characters",
685
+ 16777216);else D("Unable to parse HTTP header",16777216)};Yc.prototype.send=function(a){Tc(a,this)};Yc.prototype.receive=function(a){this.bus.send("net"+this.id+"-receive",new Uint8Array(a))};function $c(a,b,c){this.register_ws(a);this.last_stream=1;this.connections={0:{congestion:0}};this.congested_buffer=[];c=c||{};this.bus=b;this.id=c.id||0;this.router_mac=new Uint8Array((c.router_mac||"52:54:0:1:2:3").split(":").map(function(d){return parseInt(d,16)}));this.router_ip=new Uint8Array((c.router_ip||
686
+ "192.168.86.1").split(".").map(function(d){return parseInt(d,10)}));this.vm_ip=new Uint8Array((c.vm_ip||"192.168.86.100").split(".").map(function(d){return parseInt(d,10)}));this.masquerade=void 0===c.masquerade||!!c.masquerade;this.vm_mac=new Uint8Array(6);this.dns_method=c.dns_method||"doh";this.doh_server=c.doh_server;this.tcp_conn={};this.eth_encoder_buf=Nc();this.bus.register("net"+this.id+"-mac",function(d){this.vm_mac=new Uint8Array(d.split(":").map(function(e){return parseInt(e,16)}))},this);
687
+ this.bus.register("net"+this.id+"-send",function(d){this.send(d)},this)}$c.prototype.register_ws=function(a){this.wispws=new WebSocket(a.replace("wisp://","ws://").replace("wisps://","wss://"));this.wispws.binaryType="arraybuffer";this.wispws.onmessage=b=>{this.process_incoming_wisp_frame(new Uint8Array(b.data))};this.wispws.onclose=()=>{setTimeout(()=>{this.register_ws(a)},1E4)}};$c.prototype.send_packet=function(a,b,c){this.connections[c]&&(0<this.connections[c].congestion?("DATA"===b&&this.connections[c].congestion--,
688
+ this.wispws.send(a)):(this.connections[c].congested=!0,this.congested_buffer.push({data:a,type:b})))};$c.prototype.process_incoming_wisp_frame=function(a){const b=new DataView(a.buffer),c=b.getUint32(1,!0);switch(a[0]){case 1:D("Server sent client-only packet CONNECT",1048576);break;case 2:if(this.connections[c])this.connections[c].data_callback(a.slice(5));else throw Error("Got a DATA packet but stream not registered. ID: "+c);break;case 3:this.connections[c]&&(this.connections[c].congestion=b.getUint32(5,
689
+ !0));if(this.connections[c].congested){for(const d of this.congested_buffer)this.send_packet(d.data,d.type,c);this.connections[c].congested=!1}break;case 4:this.connections[c]&&this.connections[c].close_callback(b.getUint8(5));delete this.connections[c];break;case 5:D("got a wisp V2 upgrade request, ignoring",1048576);break;default:D("Wisp server returned unknown packet: "+a[0],1048576)}};$c.prototype.send_wisp_frame=function(a){let b,c;switch(a.type){case "CONNECT":const d=(new TextEncoder).encode(a.hostname);
690
+ b=new Uint8Array(8+d.length);c=new DataView(b.buffer);c.setUint8(0,1);c.setUint32(1,a.stream_id,!0);c.setUint8(5,1);c.setUint16(6,a.port,!0);b.set(d,8);this.connections[a.stream_id]={data_callback:a.data_callback,close_callback:a.close_callback,congestion:this.connections[0].congestion};break;case "DATA":b=new Uint8Array(5+a.data.length);c=new DataView(b.buffer);c.setUint8(0,2);c.setUint32(1,a.stream_id,!0);b.set(a.data,5);break;case "CLOSE":b=new Uint8Array(6);c=new DataView(b.buffer);c.setUint8(0,
691
+ 4);c.setUint32(1,a.stream_id,!0);c.setUint8(5,a.reason);break;default:D("Client tried to send unknown packet: "+a.type,1048576)}this.send_packet(b,a.type,a.stream_id)};$c.prototype.destroy=function(){this.wispws&&(this.wispws.onmessage=null,this.wispws.onclose=null,this.wispws.close(),this.wispws=null)};$c.prototype.on_tcp_connection=function(a,b){let c=new Wc;c.state="syn-received";c.net=this;c.tuple=b;c.stream_id=this.last_stream++;this.tcp_conn[b]=c;c.on("data",d=>{0!==d.length&&this.send_wisp_frame({type:"DATA",
692
+ stream_id:c.stream_id,data:d})});c.on_close=()=>{this.send_wisp_frame({type:"CLOSE",stream_id:c.stream_id,reason:2})};c.on_shutdown=c.on_close;this.send_wisp_frame({type:"CONNECT",stream_id:c.stream_id,hostname:a.ipv4.dest.join("."),port:a.tcp.dport,data_callback:d=>{c.write(d)},close_callback:()=>{c.close()}});c.accept(a);return!0};$c.prototype.send=function(a){Tc(a,this)};$c.prototype.receive=function(a){this.bus.send("net"+this.id+"-receive",new Uint8Array(a))};function ad(a,b){b=b.id||0;this.bus=
693
+ a;this.bus_send_msgid=`net${b}-send`;this.bus_recv_msgid=`net${b}-receive`;this.channel=new BroadcastChannel(`v86-inbrowser-${b}`);this.is_open=!0;this.nic_to_hub_fn=c=>{this.channel.postMessage(c)};this.bus.register(this.bus_send_msgid,this.nic_to_hub_fn,this);this.hub_to_nic_fn=c=>{this.bus.send(this.bus_recv_msgid,c.data)};this.channel.addEventListener("message",this.hub_to_nic_fn)}ad.prototype.destroy=function(){this.is_open&&(this.bus.unregister(this.bus_send_msgid,this.nic_to_hub_fn),this.channel.removeEventListener("message",
694
+ this.hub_to_nic_fn),this.channel.close(),this.is_open=!1)};function Z(a){"number"===typeof a.log_level&&(ca=a.log_level);this.cpu_is_running=!1;this.cpu_exception_hook=function(){};var b=Ka.create();this.bus=b[0];this.emulator_bus=b[1];var c,d;const e=new WebAssembly.Table({element:"anyfunc",initial:1924});b={cpu_exception_hook:h=>this.cpu_exception_hook(h),run_hardware_timers:function(h,l){return c.run_hardware_timers(h,l)},cpu_event_halt:()=>{this.emulator_bus.send("cpu-event-halt")},abort:function(){m(!1)},
695
+ microtick:J.microtick,get_rand_int:function(){return fa()},apic_acknowledge_irq:function(){return c.devices.apic.acknowledge_irq()},stop_idling:function(){return c.stop_idling()},io_port_read8:function(h){return c.io.port_read8(h)},io_port_read16:function(h){return c.io.port_read16(h)},io_port_read32:function(h){return c.io.port_read32(h)},io_port_write8:function(h,l){c.io.port_write8(h,l)},io_port_write16:function(h,l){c.io.port_write16(h,l)},io_port_write32:function(h,l){c.io.port_write32(h,l)},
696
+ mmap_read8:function(h){return c.mmap_read8(h)},mmap_read16:function(h){return c.mmap_read16(h)},mmap_read32:function(h){return c.mmap_read32(h)},mmap_write8:function(h,l){c.mmap_write8(h,l)},mmap_write16:function(h,l){c.mmap_write16(h,l)},mmap_write32:function(h,l){c.mmap_write32(h,l)},mmap_write64:function(h,l,n){c.mmap_write64(h,l,n)},mmap_write128:function(h,l,n,p,q){c.mmap_write128(h,l,n,p,q)},log_from_wasm:function(h,l){h=String.fromCharCode(...(new Uint8Array(d.buffer,h>>>0,l>>>0)));D(h,2)},
697
+ console_log_from_wasm:function(h,l){h=String.fromCharCode(...(new Uint8Array(d.buffer,h>>>0,l>>>0)));console.error(h)},dbg_trace_from_wasm:function(){D(Error().stack,2)},codegen_finalize:(h,l,n,p,q)=>{c.codegen_finalize(h,l,n,p,q)},jit_clear_func:h=>c.jit_clear_func(h),jit_clear_all_funcs:()=>c.jit_clear_all_funcs(),__indirect_function_table:e};let f=a.wasm_fn;f||(f=h=>new Promise(l=>{let n="v86-debug.wasm",p="v86-fallback.wasm";if(a.wasm_path){n=a.wasm_path;const q=n.lastIndexOf("/");p=(-1===q?"":
698
+ n.substr(0,q))+"/"+p}else"undefined"===typeof window&&"string"===typeof __dirname?(n=__dirname+"/"+n,p=__dirname+"/"+p):(n="build/"+n,p="build/"+p);va(n,{done:async q=>{try{const {instance:r}=await WebAssembly.instantiate(q,h);this.wasm_source=q;l(r.exports)}catch(r){va(p,{done:async t=>{const {instance:v}=await WebAssembly.instantiate(t,h);this.wasm_source=t;l(v.exports)}})}},progress:q=>{this.emulator_bus.send("download-progress",{file_index:0,file_count:1,file_name:n,lengthComputable:q.lengthComputable,
699
+ total:q.total,loaded:q.loaded})}})}));f({env:b}).then(h=>{d=h.memory;h.rust_init();h=this.v86=new J(this.emulator_bus,{exports:h,wasm_table:e});c=h.cpu;this.continue_init(h,a)});this.zstd_worker=null;this.zstd_worker_request_id=0}g.exportSymbol("V86$$module$src$browser$starter",Z);Z.prototype.continue_init=async function(a,b){function c(t,v){switch(t){case "hda":e.hda=this.disk_images.hda=v;break;case "hdb":e.hdb=this.disk_images.hdb=v;break;case "cdrom":e.cdrom=this.disk_images.cdrom=v;break;case "fda":e.fda=
700
+ this.disk_images.fda=v;break;case "fdb":e.fdb=this.disk_images.fdb=v;break;case "multiboot":e.multiboot=this.disk_images.multiboot=v.buffer;break;case "bzimage":e.bzimage=this.disk_images.bzimage=v.buffer;break;case "initrd":e.initrd=this.disk_images.initrd=v.buffer;break;case "bios":e.bios=v.buffer;break;case "vga_bios":e.vga_bios=v.buffer;break;case "initial_state":e.initial_state=v.buffer;break;case "fs9p_json":e.fs9p_json=v;break;default:m(!1,t)}}async function d(){if(e.fs9p&&e.fs9p_json)if(e.initial_state)D("Filesystem basefs ignored: Overridden by state image");
701
+ else{if(e.fs9p.load_from_json(e.fs9p_json),b.bzimage_initrd_from_filesystem){const {bzimage_path:t,initrd_path:v}=this.get_bzimage_initrd_from_filesystem(e.fs9p);D("Found bzimage: "+t+" and initrd: "+v);const [y,C]=await Promise.all([e.fs9p.read_file(v),e.fs9p.read_file(t)]);c.call(this,"initrd",new Aa(y.buffer));c.call(this,"bzimage",new Aa(C.buffer))}}else m(!b.bzimage_initrd_from_filesystem||e.initial_state,"bzimage_initrd_from_filesystem: Requires a filesystem");this.serial_adapter&&this.serial_adapter.show&&
702
+ this.serial_adapter.show();this.v86.init(e);e.initial_state&&(a.restore_state(e.initial_state),e.initial_state=void 0);b.autostart&&this.v86.run();this.emulator_bus.send("emulator-loaded")}this.bus.register("emulator-stopped",function(){this.cpu_is_running=!1;this.screen_adapter.pause()},this);this.bus.register("emulator-started",function(){this.cpu_is_running=!0;this.screen_adapter.continue()},this);var e={};this.disk_images={fda:void 0,fdb:void 0,hda:void 0,hdb:void 0,cdrom:void 0};var f=b.boot_order?
703
+ b.boot_order:b.fda?801:b.hda?786:291;e.acpi=b.acpi;e.disable_jit=b.disable_jit;e.load_devices=!0;e.memory_size=b.memory_size||67108864;e.vga_memory_size=b.vga_memory_size||8388608;e.boot_order=f;e.fastboot=b.fastboot||!1;e.fda=void 0;e.fdb=void 0;e.uart1=b.uart1;e.uart2=b.uart2;e.uart3=b.uart3;e.cmdline=b.cmdline;e.preserve_mac_from_state_image=b.preserve_mac_from_state_image;e.mac_address_translation=b.mac_address_translation;e.cpuid_level=b.cpuid_level;e.virtio_balloon=b.virtio_balloon;e.virtio_console=
704
+ b.virtio_console;e.virtio_net=b.virtio_net;e.screen_options=b.screen_options;if(f=b.network_relay_url||b.net_device&&b.net_device.relay_url)"fetch"===f?this.network_adapter=new Yc(this.bus,b.net_device):"inbrowser"===f?this.network_adapter=new ad(this.bus,b.net_device):f.startsWith("wisp://")||f.startsWith("wisps://")?this.network_adapter=new $c(f,this.bus,b.net_device):this.network_adapter=new Dc(f,this.bus);e.net_device=b.net_device||{type:"ne2k"};f=b.screen||{};b.screen_container&&(f.container=
705
+ b.screen_container);b.disable_keyboard||(this.keyboard_adapter=new sc(this.bus));b.disable_mouse||(this.mouse_adapter=new tc(this.bus,f.container));this.screen_adapter=f.container?new za(f,()=>this.v86.cpu.devices.vga&&this.v86.cpu.devices.vga.screen_fill_buffer()):new Ub;e.screen=this.screen_adapter;e.screen_options=f;b.serial_container&&(this.serial_adapter=new Bc(b.serial_container,this.bus));b.serial_container_xtermjs&&(this.serial_adapter=new Cc(b.serial_container_xtermjs,this.bus));b.disable_speaker||
706
+ (this.speaker_adapter=new uc(this.bus));var h=[];f=(t,v)=>{if(v)if(v.get&&v.set&&v.load)h.push({name:t,loadable:v});else{if("bios"===t||"vga_bios"===t||"initial_state"===t||"multiboot"===t||"bzimage"===t||"initrd"===t)v.async=!1;if("fda"===t||"fdb"===t)v.async=!1;v.url&&!v.async?h.push({name:t,url:v.url,size:v.size}):h.push({name:t,loadable:Ga(v,this.zstd_decompress_worker.bind(this))})}};b.state&&console.warn("Warning: Unknown option 'state'. Did you mean 'initial_state'?");f("bios",b.bios);f("vga_bios",
707
+ b.vga_bios);f("cdrom",b.cdrom);f("hda",b.hda);f("hdb",b.hdb);f("fda",b.fda);f("fdb",b.fdb);f("initial_state",b.initial_state);f("multiboot",b.multiboot);f("bzimage",b.bzimage);f("initrd",b.initrd);if(b.filesystem){f=b.filesystem.basefs;var l=b.filesystem.baseurl;let t=new hc;l&&(t=new ic(t,l));e.fs9p=this.fs9p=new Y(t);if(f){m(l,"Filesystem: baseurl must be specified");if("object"===typeof f){var n=f.size;f=f.url}m("string"===typeof f);h.push({name:"fs9p_json",url:f,size:n,as_json:!0})}}var p=this,
708
+ q=h.length,r=function(t){if(t===q)setTimeout(d.bind(this),0);else{var v=h[t];v.loadable?(v.loadable.onload=function(){c.call(this,v.name,v.loadable);r(t+1)}.bind(this),v.loadable.load()):va(v.url,{done:function(y){v.url.endsWith(".zst")&&"initial_state"!==v.name&&(m(v.size,"A size must be provided for compressed images"),y=this.zstd_decompress(v.size,new Uint8Array(y)));c.call(this,v.name,v.as_json?y:new Aa(y));r(t+1)}.bind(this),progress:function(y){200===y.target.status?p.emulator_bus.send("download-progress",
709
+ {file_index:t,file_count:q,file_name:v.url,lengthComputable:y.lengthComputable,total:y.total||v.size,loaded:y.loaded}):p.emulator_bus.send("download-error",{file_index:t,file_count:q,file_name:v.url,request:y.target})},as_json:v.as_json})}}.bind(this);r(0)};Z.prototype.zstd_decompress=function(a,b){const c=this.v86.cpu;m(!this.zstd_context);this.zstd_context=c.zstd_create_ctx(b.length);(new Uint8Array(c.wasm_memory.buffer)).set(b,c.zstd_get_src_ptr(this.zstd_context));b=c.zstd_read(this.zstd_context,
710
+ a);const d=c.wasm_memory.buffer.slice(b,b+a);c.zstd_read_free(b,a);c.zstd_free_ctx(this.zstd_context);this.zstd_context=null;return d};Z.prototype.zstd_decompress_worker=async function(a,b){if(!this.zstd_worker){const c=URL.createObjectURL(new Blob(["("+function(){let d;globalThis.onmessage=function(e){if(d){var {src:f,decompressed_size:h,id:l}=e.data;e=d.exports;var n=e.zstd_create_ctx(f.length);(new Uint8Array(e.memory.buffer)).set(f,e.zstd_get_src_ptr(n));var p=e.zstd_read(n,h),q=e.memory.buffer.slice(p,
711
+ p+h);e.zstd_read_free(p,h);e.zstd_free_ctx(n);postMessage({result:q,id:l},[q])}else n=Object.fromEntries("cpu_exception_hook run_hardware_timers cpu_event_halt microtick get_rand_int apic_acknowledge_irq stop_idling io_port_read8 io_port_read16 io_port_read32 io_port_write8 io_port_write16 io_port_write32 mmap_read8 mmap_read16 mmap_read32 mmap_write8 mmap_write16 mmap_write32 mmap_write64 mmap_write128 codegen_finalize jit_clear_func jit_clear_all_funcs".split(" ").map(r=>[r,()=>console.error("zstd worker unexpectedly called "+
712
+ r)])),n.__indirect_function_table=new WebAssembly.Table({element:"anyfunc",initial:1024}),n.abort=()=>{throw Error("zstd worker aborted");},n.log_from_wasm=n.console_log_from_wasm=(r,t)=>{console.log(String.fromCharCode(...(new Uint8Array(d.exports.memory.buffer,r,t))))},n.dbg_trace_from_wasm=()=>console.trace(),d=new WebAssembly.Instance(new WebAssembly.Module(e.data),{env:n})}}.toString()+")()"],{type:"text/javascript"}));this.zstd_worker=new Worker(c);URL.revokeObjectURL(c);this.zstd_worker.postMessage(this.wasm_source,
713
+ [this.wasm_source])}return new Promise(c=>{const d=this.zstd_worker_request_id++,e=async f=>{f.data.id===d&&(this.zstd_worker.removeEventListener("message",e),m(a===f.data.result.byteLength),c(f.data.result))};this.zstd_worker.addEventListener("message",e);this.zstd_worker.postMessage({src:b,decompressed_size:a,id:d},[b.buffer])})};Z.prototype.get_bzimage_initrd_from_filesystem=function(a){const b=(a.read_dir("/")||[]).map(e=>"/"+e);a=(a.read_dir("/boot/")||[]).map(e=>"/boot/"+e);let c,d;for(const e of[].concat(b,
714
+ a)){const f=/old/i.test(e)||/fallback/i.test(e),h=/vmlinuz/i.test(e)||/bzimage/i.test(e),l=/initrd/i.test(e)||/initramfs/i.test(e);!h||d&&f||(d=e);!l||c&&f||(c=e)}c&&d||(console.log("Failed to find bzimage or initrd in filesystem. Files:"),console.log(b.join(" ")),console.log(a.join(" ")));return{initrd_path:c,bzimage_path:d}};Z.prototype.run=async function(){this.v86.run()};g.exportProperty(Z.prototype,"run",Z.prototype.run);Z.prototype.stop=async function(){this.cpu_is_running&&await new Promise(a=>
715
+ {const b=()=>{this.remove_listener("emulator-stopped",b);a()};this.add_listener("emulator-stopped",b);this.v86.stop()})};g.exportProperty(Z.prototype,"stop",Z.prototype.stop);Z.prototype.destroy=async function(){await this.stop();this.v86.destroy();this.keyboard_adapter&&this.keyboard_adapter.destroy();this.network_adapter&&this.network_adapter.destroy();this.mouse_adapter&&this.mouse_adapter.destroy();this.screen_adapter&&this.screen_adapter.destroy();this.serial_adapter&&this.serial_adapter.destroy();
716
+ this.speaker_adapter&&this.speaker_adapter.destroy()};g.exportProperty(Z.prototype,"destroy",Z.prototype.destroy);Z.prototype.restart=function(){this.v86.restart()};g.exportProperty(Z.prototype,"restart",Z.prototype.restart);Z.prototype.add_listener=function(a,b){this.bus.register(a,b,this)};g.exportProperty(Z.prototype,"add_listener",Z.prototype.add_listener);Z.prototype.remove_listener=function(a,b){this.bus.unregister(a,b)};g.exportProperty(Z.prototype,"remove_listener",Z.prototype.remove_listener);
717
+ Z.prototype.restore_state=async function(a){m(1===arguments.length);this.v86.restore_state(a)};g.exportProperty(Z.prototype,"restore_state",Z.prototype.restore_state);Z.prototype.save_state=async function(){m(0===arguments.length);return this.v86.save_state()};g.exportProperty(Z.prototype,"save_state",Z.prototype.save_state);Z.prototype.get_instruction_counter=function(){return this.v86?this.v86.cpu.instruction_counter[0]>>>0:0};g.exportProperty(Z.prototype,"get_instruction_counter",Z.prototype.get_instruction_counter);
718
+ Z.prototype.is_running=function(){return this.cpu_is_running};g.exportProperty(Z.prototype,"is_running",Z.prototype.is_running);Z.prototype.set_fda=async function(a){if(a.url&&!a.async)va(a.url,{done:b=>{this.v86.cpu.devices.fdc.set_fda(new Aa(b))}});else{const b=Ga(a,this.zstd_decompress_worker.bind(this));b.onload=()=>{this.v86.cpu.devices.fdc.set_fda(b)};await b.load()}};g.exportProperty(Z.prototype,"set_fda",Z.prototype.set_fda);Z.prototype.eject_fda=function(){this.v86.cpu.devices.fdc.eject_fda()};
719
+ g.exportProperty(Z.prototype,"eject_fda",Z.prototype.eject_fda);Z.prototype.keyboard_send_scancodes=function(a){for(var b=0;b<a.length;b++)this.bus.send("keyboard-code",a[b])};g.exportProperty(Z.prototype,"keyboard_send_scancodes",Z.prototype.keyboard_send_scancodes);Z.prototype.keyboard_send_keys=function(a){for(var b=0;b<a.length;b++)this.keyboard_adapter.simulate_press(a[b])};g.exportProperty(Z.prototype,"keyboard_send_keys",Z.prototype.keyboard_send_keys);Z.prototype.keyboard_send_text=function(a){for(var b=
720
+ 0;b<a.length;b++)this.keyboard_adapter.simulate_char(a[b])};g.exportProperty(Z.prototype,"keyboard_send_text",Z.prototype.keyboard_send_text);Z.prototype.screen_make_screenshot=function(){return this.screen_adapter?this.screen_adapter.make_screenshot():null};g.exportProperty(Z.prototype,"screen_make_screenshot",Z.prototype.screen_make_screenshot);Z.prototype.screen_set_scale=function(a,b){this.screen_adapter&&this.screen_adapter.set_scale(a,b)};g.exportProperty(Z.prototype,"screen_set_scale",Z.prototype.screen_set_scale);
721
+ Z.prototype.screen_go_fullscreen=function(){if(this.screen_adapter){var a=document.getElementById("screen_container");if(a){var b=a.requestFullScreen||a.webkitRequestFullscreen||a.mozRequestFullScreen||a.msRequestFullScreen;b&&(b.call(a),(a=document.getElementsByClassName("phone_keyboard")[0])&&a.focus());try{navigator.keyboard.lock()}catch(c){}this.lock_mouse()}}};g.exportProperty(Z.prototype,"screen_go_fullscreen",Z.prototype.screen_go_fullscreen);Z.prototype.lock_mouse=function(){var a=document.body,
722
+ b=a.requestPointerLock||a.mozRequestPointerLock||a.webkitRequestPointerLock;b&&b.call(a)};g.exportProperty(Z.prototype,"lock_mouse",Z.prototype.lock_mouse);Z.prototype.mouse_set_status=function(a){this.mouse_adapter&&(this.mouse_adapter.emu_enabled=a)};Z.prototype.keyboard_set_status=function(a){this.keyboard_adapter&&(this.keyboard_adapter.emu_enabled=a)};g.exportProperty(Z.prototype,"keyboard_set_status",Z.prototype.keyboard_set_status);Z.prototype.serial0_send=function(a){for(var b=0;b<a.length;b++)this.bus.send("serial0-input",
723
+ a.charCodeAt(b))};g.exportProperty(Z.prototype,"serial0_send",Z.prototype.serial0_send);Z.prototype.serial_send_bytes=function(a,b){for(var c=0;c<b.length;c++)this.bus.send("serial"+a+"-input",b[c])};g.exportProperty(Z.prototype,"serial_send_bytes",Z.prototype.serial_send_bytes);Z.prototype.serial_set_modem_status=function(a,b){this.bus.send("serial"+a+"-modem-status-input",b)};Z.prototype.serial_set_carrier_detect=function(a,b){this.bus.send("serial"+a+"-carrier-detect-input",b)};Z.prototype.serial_set_ring_indicator=
724
+ function(a,b){this.bus.send("serial"+a+"-ring-indicator-input",b)};Z.prototype.serial_set_data_set_ready=function(a,b){this.bus.send("serial"+a+"-data-set-ready-input",b)};Z.prototype.serial_set_clear_to_send=function(a,b){this.bus.send("serial"+a+"-clear-to-send-input",b)};Z.prototype.mount_fs=async function(a,b,c){var d=new hc;b&&(d=new ic(d,b));d=new Y(d,this.fs9p.qidcounter);b&&(m("object"===typeof c,"Filesystem: basefs must be a JSON object"),d.load_from_json(c));a=this.fs9p.Mount(a,d);if(-2===
725
+ a)throw new bd;if(-17===a)throw new cd;if(0>a)throw m(!1,"Unexpected error code: "+-a),Error("Failed to mount. Error number: "+-a);};g.exportProperty(Z.prototype,"mount_fs",Z.prototype.mount_fs);Z.prototype.create_file=async function(a,b){m(2===arguments.length);var c=this.fs9p;if(c){var d=a.split("/");d=d[d.length-1];var e=c.SearchPath(a).parentid;if(""!==d&&-1!==e)await c.CreateBinaryFile(d,e,b);else return Promise.reject(new bd)}};g.exportProperty(Z.prototype,"create_file",Z.prototype.create_file);
726
+ Z.prototype.read_file=async function(a){m(1===arguments.length);var b=this.fs9p;if(b)return(b=await b.read_file(a))?b:Promise.reject(new bd)};g.exportProperty(Z.prototype,"read_file",Z.prototype.read_file);Z.prototype.automatically=function(a){const b=c=>{const d=c[0];if(d){var e=c.slice(1);d.sleep?setTimeout(()=>b(e),1E3*d.sleep):d.vga_text?this.wait_until_vga_screen_contains(d.vga_text).then(()=>b(e)):d.keyboard_send?(Array.isArray(d.keyboard_send)?this.keyboard_send_scancodes(d.keyboard_send):
727
+ (m("string"===typeof d.keyboard_send),this.keyboard_send_text(d.keyboard_send)),b(e)):d.call?(d.call(),b(e)):m(!1,d)}};b(a)};Z.prototype.wait_until_vga_screen_contains=function(a){return new Promise(b=>{function c(h){return"string"===typeof a?h.includes(a):a.test(h)}function d(h){[h]=h;e.add(h)}for(const h of this.screen_adapter.get_text_screen())if(c(h)){b(!0);return}const e=new Set,f=()=>{for(const h of e){const l=this.screen_adapter.get_text_row(h);if(c(l)){this.remove_listener("screen-put-char",
728
+ d);b();return}}e.clear();setTimeout(f,100)};f();this.add_listener("screen-put-char",d)})};Z.prototype.read_memory=function(a,b){return this.v86.cpu.read_blob(a,b)};Z.prototype.write_memory=function(a,b){this.v86.cpu.write_blob(a,b)};Z.prototype.set_serial_container_xtermjs=function(a){this.serial_adapter&&this.serial_adapter.destroy&&this.serial_adapter.destroy();this.serial_adapter=new Cc(a,this.bus);this.serial_adapter.show()};function cd(a){this.message=a||"File already exists"}cd.prototype=Error.prototype;
729
+ function bd(a){this.message=a||"File not found"}bd.prototype=Error.prototype;"undefined"!==typeof module&&"undefined"!==typeof module.exports&&(module.exports.V86=Z,module.exports.print_stats=Ec);export{};; export default module.exports.V86; export let {V86, CPU} = module.exports;