@viz-js/viz
Version:
WebAssembly build of Graphviz with a simple wrapper for using it on the web
9 lines (8 loc) • 1.39 MB
JavaScript
/*!
Viz.js 3.12.0
Copyright (c) 2023 Michael Daines
This distribution contains other software in object code form:
Graphviz https://www.graphviz.org
Expat https://libexpat.github.io
*/
!function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).Viz={})}(this,(function(A){"use strict";var I=function(){var A,I,g,C,Q,B,E,D,w,i,o,G=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},M=new Promise(((I,g)=>{A=I})),R=A=>console.log(A);function F(A){throw A}function y(){var A=o.buffer;g=new Int8Array(A),C=new Int16Array(A),B=new Uint8Array(A),Q=new Int32Array(A),E=new Uint32Array(A),D=new Float32Array(A),w=new Float64Array(A),i=new BigInt64Array(A),new BigUint64Array(A)}G.agerrMessages=[],G.stderrMessages=[],I=A=>G.stderrMessages.push(A);var h="undefined"!=typeof TextDecoder?new TextDecoder:void 0,s=function(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;for(var g=I+(arguments.length>2&&void 0!==arguments[2]?arguments[2]:NaN),C=I;A[C]&&!(C>=g);)++C;if(C-I>16&&A.buffer&&h)return h.decode(A.subarray(I,C));for(var Q="";I<C;){var B=A[I++];if(128&B){var E=63&A[I++];if(192!=(224&B)){var D=63&A[I++];if((B=224==(240&B)?(15&B)<<12|E<<6|D:(7&B)<<18|E<<12|D<<6|63&A[I++])<65536)Q+=String.fromCharCode(B);else{var w=B-65536;Q+=String.fromCharCode(55296|w>>10,56320|1023&w)}}else Q+=String.fromCharCode((31&B)<<6|E)}else Q+=String.fromCharCode(B)}return Q},K=(A,I)=>A?s(B,A,I):"";class N{constructor(A){this.excPtr=A,this.ptr=A-24}set_type(A){E[this.ptr+4>>2]=A}get_type(){return E[this.ptr+4>>2]}set_destructor(A){E[this.ptr+8>>2]=A}get_destructor(){return E[this.ptr+8>>2]}set_caught(A){A=A?1:0,g[this.ptr+12]=A}get_caught(){return 0!=g[this.ptr+12]}set_rethrown(A){A=A?1:0,g[this.ptr+13]=A}get_rethrown(){return 0!=g[this.ptr+13]}init(A,I){this.set_adjusted_ptr(0),this.set_type(A),this.set_destructor(I)}set_adjusted_ptr(A){E[this.ptr+16>>2]=A}get_adjusted_ptr(){return E[this.ptr+16>>2]}}var k={isAbs:A=>"/"===A.charAt(0),splitPath:A=>/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(A).slice(1),normalizeArray:(A,I)=>{for(var g=0,C=A.length-1;C>=0;C--){var Q=A[C];"."===Q?A.splice(C,1):".."===Q?(A.splice(C,1),g++):g&&(A.splice(C,1),g--)}if(I)for(;g;g--)A.unshift("..");return A},normalize:A=>{var I=k.isAbs(A),g="/"===A.substr(-1);return(A=k.normalizeArray(A.split("/").filter((A=>!!A)),!I).join("/"))||I||(A="."),A&&g&&(A+="/"),(I?"/":"")+A},dirname:A=>{var I=k.splitPath(A),g=I[0],C=I[1];return g||C?(C&&(C=C.substr(0,C.length-1)),g+C):"."},basename:A=>{if("/"===A)return"/";var I=(A=(A=k.normalize(A)).replace(/\/$/,"")).lastIndexOf("/");return-1===I?A:A.substr(I+1)},join:function(){for(var A=arguments.length,I=new Array(A),g=0;g<A;g++)I[g]=arguments[g];return k.normalize(I.join("/"))},join2:(A,I)=>k.normalize(A+"/"+I)},L=A=>(L=(()=>{if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues)return A=>crypto.getRandomValues(A);F("initRandomDevice")})())(A),U={resolve:function(){for(var A="",I=!1,g=arguments.length-1;g>=-1&&!I;g--){var C=g>=0?g<0||arguments.length<=g?void 0:arguments[g]:r.cwd();if("string"!=typeof C)throw new TypeError("Arguments to path.resolve must be strings");if(!C)return"";A=C+"/"+A,I=k.isAbs(C)}return(I?"/":"")+(A=k.normalizeArray(A.split("/").filter((A=>!!A)),!I).join("/"))||"."},relative:(A,I)=>{function g(A){for(var I=0;I<A.length&&""===A[I];I++);for(var g=A.length-1;g>=0&&""===A[g];g--);return I>g?[]:A.slice(I,g-I+1)}A=U.resolve(A).substr(1),I=U.resolve(I).substr(1);for(var C=g(A.split("/")),Q=g(I.split("/")),B=Math.min(C.length,Q.length),E=B,D=0;D<B;D++)if(C[D]!==Q[D]){E=D;break}var w=[];for(D=E;D<C.length;D++)w.push("..");return(w=w.concat(Q.slice(E))).join("/")}},Y=[],J=A=>{for(var I=0,g=0;g<A.length;++g){var C=A.charCodeAt(g);C<=127?I++:C<=2047?I+=2:C>=55296&&C<=57343?(I+=4,++g):I+=3}return I},S=(A,I,g,C)=>{if(!(C>0))return 0;for(var Q=g,B=g+C-1,E=0;E<A.length;++E){var D=A.charCodeAt(E);if(D>=55296&&D<=57343)D=65536+((1023&D)<<10)|1023&A.charCodeAt(++E);if(D<=127){if(g>=B)break;I[g++]=D}else if(D<=2047){if(g+1>=B)break;I[g++]=192|D>>6,I[g++]=128|63&D}else if(D<=65535){if(g+2>=B)break;I[g++]=224|D>>12,I[g++]=128|D>>6&63,I[g++]=128|63&D}else{if(g+3>=B)break;I[g++]=240|D>>18,I[g++]=128|D>>12&63,I[g++]=128|D>>6&63,I[g++]=128|63&D}}return I[g]=0,g-Q};function c(A,I,g){var C=g>0?g:J(A)+1,Q=new Array(C),B=S(A,Q,0,Q.length);return I&&(Q.length=B),Q}var a={ttys:[],init(){},shutdown(){},register(A,I){a.ttys[A]={input:[],output:[],ops:I},r.registerDevice(A,a.stream_ops)},stream_ops:{open(A){var I=a.ttys[A.node.rdev];if(!I)throw new r.ErrnoError(43);A.tty=I,A.seekable=!1},close(A){A.tty.ops.fsync(A.tty)},fsync(A){A.tty.ops.fsync(A.tty)},read(A,I,g,C,Q){if(!A.tty||!A.tty.ops.get_char)throw new r.ErrnoError(60);for(var B=0,E=0;E<C;E++){var D;try{D=A.tty.ops.get_char(A.tty)}catch(A){throw new r.ErrnoError(29)}if(void 0===D&&0===B)throw new r.ErrnoError(6);if(null==D)break;B++,I[g+E]=D}return B&&(A.node.timestamp=Date.now()),B},write(A,I,g,C,Q){if(!A.tty||!A.tty.ops.put_char)throw new r.ErrnoError(60);try{for(var B=0;B<C;B++)A.tty.ops.put_char(A.tty,I[g+B])}catch(A){throw new r.ErrnoError(29)}return C&&(A.node.timestamp=Date.now()),B}},default_tty_ops:{get_char:A=>(()=>{if(!Y.length){var A=null;if("undefined"!=typeof window&&"function"==typeof window.prompt&&null!==(A=window.prompt("Input: "))&&(A+="\n"),!A)return null;Y=c(A,!0)}return Y.shift()})(),put_char(A,I){null===I||10===I?(R(s(A.output)),A.output=[]):0!=I&&A.output.push(I)},fsync(A){A.output&&A.output.length>0&&(R(s(A.output)),A.output=[])},ioctl_tcgets:A=>({c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}),ioctl_tcsets:(A,I,g)=>0,ioctl_tiocgwinsz:A=>[24,80]},default_tty1_ops:{put_char(A,g){null===g||10===g?(I(s(A.output)),A.output=[]):0!=g&&A.output.push(g)},fsync(A){A.output&&A.output.length>0&&(I(s(A.output)),A.output=[])}}},H=(A,I)=>Math.ceil(A/I)*I,Z=A=>{A=H(A,65536);var I=f(65536,A);return I&&((A,I)=>{B.fill(0,A,A+I)})(I,A),I},d={ops_table:null,mount:A=>d.createNode(null,"/",16895,0),createNode(A,I,g,C){if(r.isBlkdev(g)||r.isFIFO(g))throw new r.ErrnoError(63);d.ops_table||={dir:{node:{getattr:d.node_ops.getattr,setattr:d.node_ops.setattr,lookup:d.node_ops.lookup,mknod:d.node_ops.mknod,rename:d.node_ops.rename,unlink:d.node_ops.unlink,rmdir:d.node_ops.rmdir,readdir:d.node_ops.readdir,symlink:d.node_ops.symlink},stream:{llseek:d.stream_ops.llseek}},file:{node:{getattr:d.node_ops.getattr,setattr:d.node_ops.setattr},stream:{llseek:d.stream_ops.llseek,read:d.stream_ops.read,write:d.stream_ops.write,allocate:d.stream_ops.allocate,mmap:d.stream_ops.mmap,msync:d.stream_ops.msync}},link:{node:{getattr:d.node_ops.getattr,setattr:d.node_ops.setattr,readlink:d.node_ops.readlink},stream:{}},chrdev:{node:{getattr:d.node_ops.getattr,setattr:d.node_ops.setattr},stream:r.chrdev_stream_ops}};var Q=r.createNode(A,I,g,C);return r.isDir(Q.mode)?(Q.node_ops=d.ops_table.dir.node,Q.stream_ops=d.ops_table.dir.stream,Q.contents={}):r.isFile(Q.mode)?(Q.node_ops=d.ops_table.file.node,Q.stream_ops=d.ops_table.file.stream,Q.usedBytes=0,Q.contents=null):r.isLink(Q.mode)?(Q.node_ops=d.ops_table.link.node,Q.stream_ops=d.ops_table.link.stream):r.isChrdev(Q.mode)&&(Q.node_ops=d.ops_table.chrdev.node,Q.stream_ops=d.ops_table.chrdev.stream),Q.timestamp=Date.now(),A&&(A.contents[I]=Q,A.timestamp=Q.timestamp),Q},getFileDataAsTypedArray:A=>A.contents?A.contents.subarray?A.contents.subarray(0,A.usedBytes):new Uint8Array(A.contents):new Uint8Array(0),expandFileStorage(A,I){var g=A.contents?A.contents.length:0;if(!(g>=I)){I=Math.max(I,g*(g<1048576?2:1.125)>>>0),0!=g&&(I=Math.max(I,256));var C=A.contents;A.contents=new Uint8Array(I),A.usedBytes>0&&A.contents.set(C.subarray(0,A.usedBytes),0)}},resizeFileStorage(A,I){if(A.usedBytes!=I)if(0==I)A.contents=null,A.usedBytes=0;else{var g=A.contents;A.contents=new Uint8Array(I),g&&A.contents.set(g.subarray(0,Math.min(I,A.usedBytes))),A.usedBytes=I}},node_ops:{getattr(A){var I={};return I.dev=r.isChrdev(A.mode)?A.id:1,I.ino=A.id,I.mode=A.mode,I.nlink=1,I.uid=0,I.gid=0,I.rdev=A.rdev,r.isDir(A.mode)?I.size=4096:r.isFile(A.mode)?I.size=A.usedBytes:r.isLink(A.mode)?I.size=A.link.length:I.size=0,I.atime=new Date(A.timestamp),I.mtime=new Date(A.timestamp),I.ctime=new Date(A.timestamp),I.blksize=4096,I.blocks=Math.ceil(I.size/I.blksize),I},setattr(A,I){void 0!==I.mode&&(A.mode=I.mode),void 0!==I.timestamp&&(A.timestamp=I.timestamp),void 0!==I.size&&d.resizeFileStorage(A,I.size)},lookup(A,I){throw r.genericErrors[44]},mknod:(A,I,g,C)=>d.createNode(A,I,g,C),rename(A,I,g){if(r.isDir(A.mode)){var C;try{C=r.lookupNode(I,g)}catch(A){}if(C)for(var Q in C.contents)throw new r.ErrnoError(55)}delete A.parent.contents[A.name],A.parent.timestamp=Date.now(),A.name=g,I.contents[g]=A,I.timestamp=A.parent.timestamp},unlink(A,I){delete A.contents[I],A.timestamp=Date.now()},rmdir(A,I){var g=r.lookupNode(A,I);for(var C in g.contents)throw new r.ErrnoError(55);delete A.contents[I],A.timestamp=Date.now()},readdir(A){var I=[".",".."];for(var g of Object.keys(A.contents))I.push(g);return I},symlink(A,I,g){var C=d.createNode(A,I,41471,0);return C.link=g,C},readlink(A){if(!r.isLink(A.mode))throw new r.ErrnoError(28);return A.link}},stream_ops:{read(A,I,g,C,Q){var B=A.node.contents;if(Q>=A.node.usedBytes)return 0;var E=Math.min(A.node.usedBytes-Q,C);if(E>8&&B.subarray)I.set(B.subarray(Q,Q+E),g);else for(var D=0;D<E;D++)I[g+D]=B[Q+D];return E},write(A,I,C,Q,B,E){if(I.buffer===g.buffer&&(E=!1),!Q)return 0;var D=A.node;if(D.timestamp=Date.now(),I.subarray&&(!D.contents||D.contents.subarray)){if(E)return D.contents=I.subarray(C,C+Q),D.usedBytes=Q,Q;if(0===D.usedBytes&&0===B)return D.contents=I.slice(C,C+Q),D.usedBytes=Q,Q;if(B+Q<=D.usedBytes)return D.contents.set(I.subarray(C,C+Q),B),Q}if(d.expandFileStorage(D,B+Q),D.contents.subarray&&I.subarray)D.contents.set(I.subarray(C,C+Q),B);else for(var w=0;w<Q;w++)D.contents[B+w]=I[C+w];return D.usedBytes=Math.max(D.usedBytes,B+Q),Q},llseek(A,I,g){var C=I;if(1===g?C+=A.position:2===g&&r.isFile(A.node.mode)&&(C+=A.node.usedBytes),C<0)throw new r.ErrnoError(28);return C},allocate(A,I,g){d.expandFileStorage(A.node,I+g),A.node.usedBytes=Math.max(A.node.usedBytes,I+g)},mmap(A,I,C,Q,B){if(!r.isFile(A.node.mode))throw new r.ErrnoError(43);var E,D,w=A.node.contents;if(2&B||!w||w.buffer!==g.buffer){if(D=!0,!(E=Z(I)))throw new r.ErrnoError(48);w&&((C>0||C+I<w.length)&&(w=w.subarray?w.subarray(C,C+I):Array.prototype.slice.call(w,C,C+I)),g.set(w,E))}else D=!1,E=w.byteOffset;return{ptr:E,allocated:D}},msync:(A,I,g,C,Q)=>(d.stream_ops.write(A,I,0,C,g,!1),0)}},q=(A,I)=>{var g=0;return A&&(g|=365),I&&(g|=146),g},r={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,ErrnoError:class{constructor(A){this.name="ErrnoError",this.errno=A}},genericErrors:{},filesystems:null,syncFSRequests:0,FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(A){this.node=A}get isRead(){return 1!=(2097155&this.flags)}get isWrite(){return!!(2097155&this.flags)}get isAppend(){return 1024&this.flags}get flags(){return this.shared.flags}set flags(A){this.shared.flags=A}get position(){return this.shared.position}set position(A){this.shared.position=A}},FSNode:class{constructor(A,I,g,C){A||(A=this),this.parent=A,this.mount=A.mount,this.mounted=null,this.id=r.nextInode++,this.name=I,this.mode=g,this.node_ops={},this.stream_ops={},this.rdev=C,this.readMode=365,this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(A){A?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(A){A?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return r.isDir(this.mode)}get isDevice(){return r.isChrdev(this.mode)}},lookupPath(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(A=U.resolve(A)))return{path:"",node:null};if(I=Object.assign({follow_mount:!0,recurse_count:0},I),I.recurse_count>8)throw new r.ErrnoError(32);for(var g=A.split("/").filter((A=>!!A)),C=r.root,Q="/",B=0;B<g.length;B++){var E=B===g.length-1;if(E&&I.parent)break;if(C=r.lookupNode(C,g[B]),Q=k.join2(Q,g[B]),r.isMountpoint(C)&&(!E||E&&I.follow_mount)&&(C=C.mounted.root),!E||I.follow)for(var D=0;r.isLink(C.mode);){var w=r.readlink(Q);if(Q=U.resolve(k.dirname(Q),w),C=r.lookupPath(Q,{recurse_count:I.recurse_count+1}).node,D++>40)throw new r.ErrnoError(32)}}return{path:Q,node:C}},getPath(A){for(var I;;){if(r.isRoot(A)){var g=A.mount.mountpoint;return I?"/"!==g[g.length-1]?`${g}/${I}`:g+I:g}I=I?`${A.name}/${I}`:A.name,A=A.parent}},hashName(A,I){for(var g=0,C=0;C<I.length;C++)g=(g<<5)-g+I.charCodeAt(C)|0;return(A+g>>>0)%r.nameTable.length},hashAddNode(A){var I=r.hashName(A.parent.id,A.name);A.name_next=r.nameTable[I],r.nameTable[I]=A},hashRemoveNode(A){var I=r.hashName(A.parent.id,A.name);if(r.nameTable[I]===A)r.nameTable[I]=A.name_next;else for(var g=r.nameTable[I];g;){if(g.name_next===A){g.name_next=A.name_next;break}g=g.name_next}},lookupNode(A,I){var g=r.mayLookup(A);if(g)throw new r.ErrnoError(g);for(var C=r.hashName(A.id,I),Q=r.nameTable[C];Q;Q=Q.name_next){var B=Q.name;if(Q.parent.id===A.id&&B===I)return Q}return r.lookup(A,I)},createNode(A,I,g,C){var Q=new r.FSNode(A,I,g,C);return r.hashAddNode(Q),Q},destroyNode(A){r.hashRemoveNode(A)},isRoot:A=>A===A.parent,isMountpoint:A=>!!A.mounted,isFile:A=>32768==(61440&A),isDir:A=>16384==(61440&A),isLink:A=>40960==(61440&A),isChrdev:A=>8192==(61440&A),isBlkdev:A=>24576==(61440&A),isFIFO:A=>4096==(61440&A),isSocket:A=>!(49152&~A),flagsToPermissionString(A){var I=["r","w","rw"][3&A];return 512&A&&(I+="w"),I},nodePermissions:(A,I)=>r.ignorePermissions||(!I.includes("r")||292&A.mode)&&(!I.includes("w")||146&A.mode)&&(!I.includes("x")||73&A.mode)?0:2,mayLookup(A){if(!r.isDir(A.mode))return 54;var I=r.nodePermissions(A,"x");return I||(A.node_ops.lookup?0:2)},mayCreate(A,I){try{r.lookupNode(A,I);return 20}catch(A){}return r.nodePermissions(A,"wx")},mayDelete(A,I,g){var C;try{C=r.lookupNode(A,I)}catch(A){return A.errno}var Q=r.nodePermissions(A,"wx");if(Q)return Q;if(g){if(!r.isDir(C.mode))return 54;if(r.isRoot(C)||r.getPath(C)===r.cwd())return 10}else if(r.isDir(C.mode))return 31;return 0},mayOpen:(A,I)=>A?r.isLink(A.mode)?32:r.isDir(A.mode)&&("r"!==r.flagsToPermissionString(I)||512&I)?31:r.nodePermissions(A,r.flagsToPermissionString(I)):44,MAX_OPEN_FDS:4096,nextfd(){for(var A=0;A<=r.MAX_OPEN_FDS;A++)if(!r.streams[A])return A;throw new r.ErrnoError(33)},getStreamChecked(A){var I=r.getStream(A);if(!I)throw new r.ErrnoError(8);return I},getStream:A=>r.streams[A],createStream(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;return A=Object.assign(new r.FSStream,A),-1==I&&(I=r.nextfd()),A.fd=I,r.streams[I]=A,A},closeStream(A){r.streams[A]=null},dupStream(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;var g=r.createStream(A,I);return g.stream_ops?.dup?.(g),g},chrdev_stream_ops:{open(A){var I=r.getDevice(A.node.rdev);A.stream_ops=I.stream_ops,A.stream_ops.open?.(A)},llseek(){throw new r.ErrnoError(70)}},major:A=>A>>8,minor:A=>255&A,makedev:(A,I)=>A<<8|I,registerDevice(A,I){r.devices[A]={stream_ops:I}},getDevice:A=>r.devices[A],getMounts(A){for(var I=[],g=[A];g.length;){var C=g.pop();I.push(C),g.push(...C.mounts)}return I},syncfs(A,g){"function"==typeof A&&(g=A,A=!1),r.syncFSRequests++,r.syncFSRequests>1&&I(`warning: ${r.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var C=r.getMounts(r.root.mount),Q=0;function B(A){return r.syncFSRequests--,g(A)}function E(A){if(A)return E.errored?void 0:(E.errored=!0,B(A));++Q>=C.length&&B(null)}C.forEach((I=>{if(!I.type.syncfs)return E(null);I.type.syncfs(I,A,E)}))},mount(A,I,g){var C,Q="/"===g,B=!g;if(Q&&r.root)throw new r.ErrnoError(10);if(!Q&&!B){var E=r.lookupPath(g,{follow_mount:!1});if(g=E.path,C=E.node,r.isMountpoint(C))throw new r.ErrnoError(10);if(!r.isDir(C.mode))throw new r.ErrnoError(54)}var D={type:A,opts:I,mountpoint:g,mounts:[]},w=A.mount(D);return w.mount=D,D.root=w,Q?r.root=w:C&&(C.mounted=D,C.mount&&C.mount.mounts.push(D)),w},unmount(A){var I=r.lookupPath(A,{follow_mount:!1});if(!r.isMountpoint(I.node))throw new r.ErrnoError(28);var g=I.node,C=g.mounted,Q=r.getMounts(C);Object.keys(r.nameTable).forEach((A=>{for(var I=r.nameTable[A];I;){var g=I.name_next;Q.includes(I.mount)&&r.destroyNode(I),I=g}})),g.mounted=null;var B=g.mount.mounts.indexOf(C);g.mount.mounts.splice(B,1)},lookup:(A,I)=>A.node_ops.lookup(A,I),mknod(A,I,g){var C=r.lookupPath(A,{parent:!0}).node,Q=k.basename(A);if(!Q||"."===Q||".."===Q)throw new r.ErrnoError(28);var B=r.mayCreate(C,Q);if(B)throw new r.ErrnoError(B);if(!C.node_ops.mknod)throw new r.ErrnoError(63);return C.node_ops.mknod(C,Q,I,g)},create:(A,I)=>(I=void 0!==I?I:438,I&=4095,I|=32768,r.mknod(A,I,0)),mkdir:(A,I)=>(I=void 0!==I?I:511,I&=1023,I|=16384,r.mknod(A,I,0)),mkdirTree(A,I){for(var g=A.split("/"),C="",Q=0;Q<g.length;++Q)if(g[Q]){C+="/"+g[Q];try{r.mkdir(C,I)}catch(A){if(20!=A.errno)throw A}}},mkdev:(A,I,g)=>(void 0===g&&(g=I,I=438),I|=8192,r.mknod(A,I,g)),symlink(A,I){if(!U.resolve(A))throw new r.ErrnoError(44);var g=r.lookupPath(I,{parent:!0}).node;if(!g)throw new r.ErrnoError(44);var C=k.basename(I),Q=r.mayCreate(g,C);if(Q)throw new r.ErrnoError(Q);if(!g.node_ops.symlink)throw new r.ErrnoError(63);return g.node_ops.symlink(g,C,A)},rename(A,I){var g,C,Q=k.dirname(A),B=k.dirname(I),E=k.basename(A),D=k.basename(I);if(g=r.lookupPath(A,{parent:!0}).node,C=r.lookupPath(I,{parent:!0}).node,!g||!C)throw new r.ErrnoError(44);if(g.mount!==C.mount)throw new r.ErrnoError(75);var w,i=r.lookupNode(g,E),o=U.relative(A,B);if("."!==o.charAt(0))throw new r.ErrnoError(28);if("."!==(o=U.relative(I,Q)).charAt(0))throw new r.ErrnoError(55);try{w=r.lookupNode(C,D)}catch(A){}if(i!==w){var G=r.isDir(i.mode),M=r.mayDelete(g,E,G);if(M)throw new r.ErrnoError(M);if(M=w?r.mayDelete(C,D,G):r.mayCreate(C,D))throw new r.ErrnoError(M);if(!g.node_ops.rename)throw new r.ErrnoError(63);if(r.isMountpoint(i)||w&&r.isMountpoint(w))throw new r.ErrnoError(10);if(C!==g&&(M=r.nodePermissions(g,"w")))throw new r.ErrnoError(M);r.hashRemoveNode(i);try{g.node_ops.rename(i,C,D),i.parent=C}catch(A){throw A}finally{r.hashAddNode(i)}}},rmdir(A){var I=r.lookupPath(A,{parent:!0}).node,g=k.basename(A),C=r.lookupNode(I,g),Q=r.mayDelete(I,g,!0);if(Q)throw new r.ErrnoError(Q);if(!I.node_ops.rmdir)throw new r.ErrnoError(63);if(r.isMountpoint(C))throw new r.ErrnoError(10);I.node_ops.rmdir(I,g),r.destroyNode(C)},readdir(A){var I=r.lookupPath(A,{follow:!0}).node;if(!I.node_ops.readdir)throw new r.ErrnoError(54);return I.node_ops.readdir(I)},unlink(A){var I=r.lookupPath(A,{parent:!0}).node;if(!I)throw new r.ErrnoError(44);var g=k.basename(A),C=r.lookupNode(I,g),Q=r.mayDelete(I,g,!1);if(Q)throw new r.ErrnoError(Q);if(!I.node_ops.unlink)throw new r.ErrnoError(63);if(r.isMountpoint(C))throw new r.ErrnoError(10);I.node_ops.unlink(I,g),r.destroyNode(C)},readlink(A){var I=r.lookupPath(A).node;if(!I)throw new r.ErrnoError(44);if(!I.node_ops.readlink)throw new r.ErrnoError(28);return U.resolve(r.getPath(I.parent),I.node_ops.readlink(I))},stat(A,I){var g=r.lookupPath(A,{follow:!I}).node;if(!g)throw new r.ErrnoError(44);if(!g.node_ops.getattr)throw new r.ErrnoError(63);return g.node_ops.getattr(g)},lstat:A=>r.stat(A,!0),chmod(A,I,g){var C;"string"==typeof A?C=r.lookupPath(A,{follow:!g}).node:C=A;if(!C.node_ops.setattr)throw new r.ErrnoError(63);C.node_ops.setattr(C,{mode:4095&I|-4096&C.mode,timestamp:Date.now()})},lchmod(A,I){r.chmod(A,I,!0)},fchmod(A,I){var g=r.getStreamChecked(A);r.chmod(g.node,I)},chown(A,I,g,C){var Q;"string"==typeof A?Q=r.lookupPath(A,{follow:!C}).node:Q=A;if(!Q.node_ops.setattr)throw new r.ErrnoError(63);Q.node_ops.setattr(Q,{timestamp:Date.now()})},lchown(A,I,g){r.chown(A,I,g,!0)},fchown(A,I,g){var C=r.getStreamChecked(A);r.chown(C.node,I,g)},truncate(A,I){if(I<0)throw new r.ErrnoError(28);var g;"string"==typeof A?g=r.lookupPath(A,{follow:!0}).node:g=A;if(!g.node_ops.setattr)throw new r.ErrnoError(63);if(r.isDir(g.mode))throw new r.ErrnoError(31);if(!r.isFile(g.mode))throw new r.ErrnoError(28);var C=r.nodePermissions(g,"w");if(C)throw new r.ErrnoError(C);g.node_ops.setattr(g,{size:I,timestamp:Date.now()})},ftruncate(A,I){var g=r.getStreamChecked(A);if(!(2097155&g.flags))throw new r.ErrnoError(28);r.truncate(g.node,I)},utime(A,I,g){var C=r.lookupPath(A,{follow:!0}).node;C.node_ops.setattr(C,{timestamp:Math.max(I,g)})},open(A,I,g){if(""===A)throw new r.ErrnoError(44);var C;if(g=64&(I="string"==typeof I?(A=>{var I={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[A];if(void 0===I)throw new Error(`Unknown file open mode: ${A}`);return I})(I):I)?4095&(g=void 0===g?438:g)|32768:0,"object"==typeof A)C=A;else{A=k.normalize(A);try{C=r.lookupPath(A,{follow:!(131072&I)}).node}catch(A){}}var Q=!1;if(64&I)if(C){if(128&I)throw new r.ErrnoError(20)}else C=r.mknod(A,g,0),Q=!0;if(!C)throw new r.ErrnoError(44);if(r.isChrdev(C.mode)&&(I&=-513),65536&I&&!r.isDir(C.mode))throw new r.ErrnoError(54);if(!Q){var B=r.mayOpen(C,I);if(B)throw new r.ErrnoError(B)}512&I&&!Q&&r.truncate(C,0),I&=-131713;var E=r.createStream({node:C,path:r.getPath(C),flags:I,seekable:!0,position:0,stream_ops:C.stream_ops,ungotten:[],error:!1});return E.stream_ops.open&&E.stream_ops.open(E),E},close(A){if(r.isClosed(A))throw new r.ErrnoError(8);A.getdents&&(A.getdents=null);try{A.stream_ops.close&&A.stream_ops.close(A)}catch(A){throw A}finally{r.closeStream(A.fd)}A.fd=null},isClosed:A=>null===A.fd,llseek(A,I,g){if(r.isClosed(A))throw new r.ErrnoError(8);if(!A.seekable||!A.stream_ops.llseek)throw new r.ErrnoError(70);if(0!=g&&1!=g&&2!=g)throw new r.ErrnoError(28);return A.position=A.stream_ops.llseek(A,I,g),A.ungotten=[],A.position},read(A,I,g,C,Q){if(C<0||Q<0)throw new r.ErrnoError(28);if(r.isClosed(A))throw new r.ErrnoError(8);if(1==(2097155&A.flags))throw new r.ErrnoError(8);if(r.isDir(A.node.mode))throw new r.ErrnoError(31);if(!A.stream_ops.read)throw new r.ErrnoError(28);var B=void 0!==Q;if(B){if(!A.seekable)throw new r.ErrnoError(70)}else Q=A.position;var E=A.stream_ops.read(A,I,g,C,Q);return B||(A.position+=E),E},write(A,I,g,C,Q,B){if(C<0||Q<0)throw new r.ErrnoError(28);if(r.isClosed(A))throw new r.ErrnoError(8);if(!(2097155&A.flags))throw new r.ErrnoError(8);if(r.isDir(A.node.mode))throw new r.ErrnoError(31);if(!A.stream_ops.write)throw new r.ErrnoError(28);A.seekable&&1024&A.flags&&r.llseek(A,0,2);var E=void 0!==Q;if(E){if(!A.seekable)throw new r.ErrnoError(70)}else Q=A.position;var D=A.stream_ops.write(A,I,g,C,Q,B);return E||(A.position+=D),D},allocate(A,I,g){if(r.isClosed(A))throw new r.ErrnoError(8);if(I<0||g<=0)throw new r.ErrnoError(28);if(!(2097155&A.flags))throw new r.ErrnoError(8);if(!r.isFile(A.node.mode)&&!r.isDir(A.node.mode))throw new r.ErrnoError(43);if(!A.stream_ops.allocate)throw new r.ErrnoError(138);A.stream_ops.allocate(A,I,g)},mmap(A,I,g,C,Q){if(2&C&&!(2&Q)&&2!=(2097155&A.flags))throw new r.ErrnoError(2);if(1==(2097155&A.flags))throw new r.ErrnoError(2);if(!A.stream_ops.mmap)throw new r.ErrnoError(43);if(!I)throw new r.ErrnoError(28);return A.stream_ops.mmap(A,I,g,C,Q)},msync:(A,I,g,C,Q)=>A.stream_ops.msync?A.stream_ops.msync(A,I,g,C,Q):0,ioctl(A,I,g){if(!A.stream_ops.ioctl)throw new r.ErrnoError(59);return A.stream_ops.ioctl(A,I,g)},readFile(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(I.flags=I.flags||0,I.encoding=I.encoding||"binary","utf8"!==I.encoding&&"binary"!==I.encoding)throw new Error(`Invalid encoding type "${I.encoding}"`);var g,C=r.open(A,I.flags),Q=r.stat(A).size,B=new Uint8Array(Q);return r.read(C,B,0,Q,0),"utf8"===I.encoding?g=s(B):"binary"===I.encoding&&(g=B),r.close(C),g},writeFile(A,I){let g=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};g.flags=g.flags||577;var C=r.open(A,g.flags,g.mode);if("string"==typeof I){var Q=new Uint8Array(J(I)+1),B=S(I,Q,0,Q.length);r.write(C,Q,0,B,void 0,g.canOwn)}else{if(!ArrayBuffer.isView(I))throw new Error("Unsupported data type");r.write(C,I,0,I.byteLength,void 0,g.canOwn)}r.close(C)},cwd:()=>r.currentPath,chdir(A){var I=r.lookupPath(A,{follow:!0});if(null===I.node)throw new r.ErrnoError(44);if(!r.isDir(I.node.mode))throw new r.ErrnoError(54);var g=r.nodePermissions(I.node,"x");if(g)throw new r.ErrnoError(g);r.currentPath=I.path},createDefaultDirectories(){r.mkdir("/tmp"),r.mkdir("/home"),r.mkdir("/home/web_user")},createDefaultDevices(){r.mkdir("/dev"),r.registerDevice(r.makedev(1,3),{read:()=>0,write:(A,I,g,C,Q)=>C}),r.mkdev("/dev/null",r.makedev(1,3)),a.register(r.makedev(5,0),a.default_tty_ops),a.register(r.makedev(6,0),a.default_tty1_ops),r.mkdev("/dev/tty",r.makedev(5,0)),r.mkdev("/dev/tty1",r.makedev(6,0));var A=new Uint8Array(1024),I=0,g=()=>(0===I&&(I=L(A).byteLength),A[--I]);r.createDevice("/dev","random",g),r.createDevice("/dev","urandom",g),r.mkdir("/dev/shm"),r.mkdir("/dev/shm/tmp")},createSpecialDirectories(){r.mkdir("/proc");var A=r.mkdir("/proc/self");r.mkdir("/proc/self/fd"),r.mount({mount(){var I=r.createNode(A,"fd",16895,73);return I.node_ops={lookup(A,I){var g=+I,C=r.getStreamChecked(g),Q={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>C.path}};return Q.parent=Q,Q}},I}},{},"/proc/self/fd")},createStandardStreams(A,I,g){A?r.createDevice("/dev","stdin",A):r.symlink("/dev/tty","/dev/stdin"),I?r.createDevice("/dev","stdout",null,I):r.symlink("/dev/tty","/dev/stdout"),g?r.createDevice("/dev","stderr",null,g):r.symlink("/dev/tty1","/dev/stderr"),r.open("/dev/stdin",0),r.open("/dev/stdout",1),r.open("/dev/stderr",1)},staticInit(){[44].forEach((A=>{r.genericErrors[A]=new r.ErrnoError(A),r.genericErrors[A].stack="<generic error, no stack>"})),r.nameTable=new Array(4096),r.mount(d,{},"/"),r.createDefaultDirectories(),r.createDefaultDevices(),r.createSpecialDirectories(),r.filesystems={MEMFS:d}},init(A,I,g){r.initialized=!0,r.createStandardStreams(A,I,g)},quit(){r.initialized=!1;for(var A=0;A<r.streams.length;A++){var I=r.streams[A];I&&r.close(I)}},findObject(A,I){var g=r.analyzePath(A,I);return g.exists?g.object:null},analyzePath(A,I){try{A=(C=r.lookupPath(A,{follow:!I})).path}catch(A){}var g={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var C=r.lookupPath(A,{parent:!0});g.parentExists=!0,g.parentPath=C.path,g.parentObject=C.node,g.name=k.basename(A),C=r.lookupPath(A,{follow:!I}),g.exists=!0,g.path=C.path,g.object=C.node,g.name=C.node.name,g.isRoot="/"===C.path}catch(A){g.error=A.errno}return g},createPath(A,I,g,C){A="string"==typeof A?A:r.getPath(A);for(var Q=I.split("/").reverse();Q.length;){var B=Q.pop();if(B){var E=k.join2(A,B);try{r.mkdir(E)}catch(A){}A=E}}return E},createFile(A,I,g,C,Q){var B=k.join2("string"==typeof A?A:r.getPath(A),I),E=q(C,Q);return r.create(B,E)},createDataFile(A,I,g,C,Q,B){var E=I;A&&(A="string"==typeof A?A:r.getPath(A),E=I?k.join2(A,I):A);var D=q(C,Q),w=r.create(E,D);if(g){if("string"==typeof g){for(var i=new Array(g.length),o=0,G=g.length;o<G;++o)i[o]=g.charCodeAt(o);g=i}r.chmod(w,146|D);var M=r.open(w,577);r.write(M,g,0,g.length,0,B),r.close(M),r.chmod(w,D)}},createDevice(A,I,g,C){var Q=k.join2("string"==typeof A?A:r.getPath(A),I),B=q(!!g,!!C);r.createDevice.major??=64;var E=r.makedev(r.createDevice.major++,0);return r.registerDevice(E,{open(A){A.seekable=!1},close(A){C?.buffer?.length&&C(10)},read(A,I,C,Q,B){for(var E=0,D=0;D<Q;D++){var w;try{w=g()}catch(A){throw new r.ErrnoError(29)}if(void 0===w&&0===E)throw new r.ErrnoError(6);if(null==w)break;E++,I[C+D]=w}return E&&(A.node.timestamp=Date.now()),E},write(A,I,g,Q,B){for(var E=0;E<Q;E++)try{C(I[g+E])}catch(A){throw new r.ErrnoError(29)}return Q&&(A.node.timestamp=Date.now()),E}}),r.mkdev(Q,B,E)},forceLoadFile(A){if(A.isDevice||A.isFolder||A.link||A.contents)return!0;if("undefined"!=typeof XMLHttpRequest)throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");try{A.contents=readBinary(A.url),A.usedBytes=A.contents.length}catch(A){throw new r.ErrnoError(29)}},createLazyFile(A,I,C,Q,B){class E{constructor(){this.lengthKnown=!1,this.chunks=[]}get(A){if(!(A>this.length-1||A<0)){var I=A%this.chunkSize,g=A/this.chunkSize|0;return this.getter(g)[I]}}setDataGetter(A){this.getter=A}cacheLength(){var A=new XMLHttpRequest;if(A.open("HEAD",C,!1),A.send(null),!(A.status>=200&&A.status<300||304===A.status))throw new Error("Couldn't load "+C+". Status: "+A.status);var I,g=Number(A.getResponseHeader("Content-length")),Q=(I=A.getResponseHeader("Accept-Ranges"))&&"bytes"===I,B=(I=A.getResponseHeader("Content-Encoding"))&&"gzip"===I,E=1048576;Q||(E=g);var D=this;D.setDataGetter((A=>{var I=A*E,Q=(A+1)*E-1;if(Q=Math.min(Q,g-1),void 0===D.chunks[A]&&(D.chunks[A]=((A,I)=>{if(A>I)throw new Error("invalid range ("+A+", "+I+") or no bytes requested!");if(I>g-1)throw new Error("only "+g+" bytes available! programmer error!");var Q=new XMLHttpRequest;if(Q.open("GET",C,!1),g!==E&&Q.setRequestHeader("Range","bytes="+A+"-"+I),Q.responseType="arraybuffer",Q.overrideMimeType&&Q.overrideMimeType("text/plain; charset=x-user-defined"),Q.send(null),!(Q.status>=200&&Q.status<300||304===Q.status))throw new Error("Couldn't load "+C+". Status: "+Q.status);return void 0!==Q.response?new Uint8Array(Q.response||[]):c(Q.responseText||"",!0)})(I,Q)),void 0===D.chunks[A])throw new Error("doXHR failed!");return D.chunks[A]})),!B&&g||(E=g=1,g=this.getter(0).length,E=g,R("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=g,this._chunkSize=E,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if("undefined"!=typeof XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var D={isDevice:!1,contents:new E}}else D={isDevice:!1,url:C};var w=r.createFile(A,I,D,Q,B);D.contents?w.contents=D.contents:D.url&&(w.contents=null,w.url=D.url),Object.defineProperties(w,{usedBytes:{get:function(){return this.contents.length}}});var i={};function o(A,I,g,C,Q){var B=A.node.contents;if(Q>=B.length)return 0;var E=Math.min(B.length-Q,C);if(B.slice)for(var D=0;D<E;D++)I[g+D]=B[Q+D];else for(D=0;D<E;D++)I[g+D]=B.get(Q+D);return E}return Object.keys(w.stream_ops).forEach((A=>{var I=w.stream_ops[A];i[A]=function(){return r.forceLoadFile(w),I(...arguments)}})),i.read=(A,I,g,C,Q)=>(r.forceLoadFile(w),o(A,I,g,C,Q)),i.mmap=(A,I,C,Q,B)=>{r.forceLoadFile(w);var E=Z(I);if(!E)throw new r.ErrnoError(48);return o(A,g,E,I,C),{ptr:E,allocated:!0}},w.stream_ops=i,w}},t={DEFAULT_POLLMASK:5,calculateAt(A,I,g){if(k.isAbs(I))return I;var C;-100===A?C=r.cwd():C=t.getStreamFromFD(A).path;if(0==I.length){if(!g)throw new r.ErrnoError(44);return C}return k.join2(C,I)},doStat(A,I,g){var C=A(I);Q[g>>2]=C.dev,Q[g+4>>2]=C.mode,E[g+8>>2]=C.nlink,Q[g+12>>2]=C.uid,Q[g+16>>2]=C.gid,Q[g+20>>2]=C.rdev,i[g+24>>3]=BigInt(C.size),Q[g+32>>2]=4096,Q[g+36>>2]=C.blocks;var B=C.atime.getTime(),D=C.mtime.getTime(),w=C.ctime.getTime();return i[g+40>>3]=BigInt(Math.floor(B/1e3)),E[g+48>>2]=B%1e3*1e3*1e3,i[g+56>>3]=BigInt(Math.floor(D/1e3)),E[g+64>>2]=D%1e3*1e3*1e3,i[g+72>>3]=BigInt(Math.floor(w/1e3)),E[g+80>>2]=w%1e3*1e3*1e3,i[g+88>>3]=BigInt(C.ino),0},doMsync(A,I,g,C,Q){if(!r.isFile(I.node.mode))throw new r.ErrnoError(43);if(2&C)return 0;var E=B.slice(A,A+g);r.msync(I,E,Q,g,C)},getStreamFromFD:A=>r.getStreamChecked(A),varargs:void 0,getStr:A=>K(A)};function W(){var A=Q[+t.varargs>>2];return t.varargs+=4,A}var b=W;var x=A=>A<-9007199254740992||A>9007199254740992?NaN:Number(A);var l=(A,I,g)=>S(A,B,I,g),n=A=>{var I=(A-o.buffer.byteLength+65535)/65536|0;try{return o.grow(I),y(),1}catch(A){}},m={},O=()=>{if(!O.strings){var A={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:"./this.program"};for(var I in m)void 0===m[I]?delete A[I]:A[I]=m[I];var g=[];for(var I in A)g.push(`${I}=${A[I]}`);O.strings=g}return O.strings},V=A=>{throw`exit(${A})`};var z=A=>X(A);r.createPreloadedFile=(A,I,g,C,Q,B,E,D,w,i)=>{var o=I?U.resolve(k.join2(A,I)):A,G=getUniqueRunDependency(`cp ${o}`);function M(g){!function(g){i?.(),D||((A,I,g,C,Q,B)=>{r.createDataFile(A,I,g,C,Q,B)})(A,I,g,C,Q,w),B?.(),removeRunDependency(G)}(g)}addRunDependency(G),"string"==typeof g?((A,I,g,C)=>{var Q=C?"":getUniqueRunDependency(`al ${A}`);readAsync(A).then((A=>{I(new Uint8Array(A)),Q&&removeRunDependency(Q)}),(I=>{if(!g)throw`Loading data file "${A}" failed.`;g()})),Q&&addRunDependency(Q)})(g,M,E):M(g)},r.staticInit();var f,P,X,v,e={a:(A,I,g,C)=>{F(`Assertion failed: ${K(A)}, at: `+[I?K(I):"unknown filename",g,C?K(C):"unknown function"])},b:(A,I,g)=>{throw new N(A).init(I,g),A},v:function(A,I,g,C){try{if(I=t.getStr(I),I=t.calculateAt(A,I),-8&g)return-28;var Q=r.lookupPath(I,{follow:!0}).node;if(!Q)return-44;var B="";return 4&g&&(B+="r"),2&g&&(B+="w"),1&g&&(B+="x"),B&&r.nodePermissions(Q,B)?-2:0}catch(A){if(void 0===r||"ErrnoError"!==A.name)throw A;return-A.errno}},f:function(A,I,g){t.varargs=g;try{var Q=t.getStreamFromFD(A);switch(I){case 0:if((B=W())<0)return-28;for(;r.streams[B];)B++;return r.dupStream(Q,B).fd;case 1:case 2:case 13:case 14:return 0;case 3:return Q.flags;case 4:var B=W();return Q.flags|=B,0;case 12:B=b();return C[B+0>>1]=2,0}return-28}catch(A){if(void 0===r||"ErrnoError"!==A.name)throw A;return-A.errno}},u:function(A,I){try{var g=t.getStreamFromFD(A);return t.doStat(r.stat,g.path,I)}catch(A){if(void 0===r||"ErrnoError"!==A.name)throw A;return-A.errno}},j:function(A,I,B){t.varargs=B;try{var E=t.getStreamFromFD(A);switch(I){case 21509:case 21510:case 21511:case 21512:case 21524:case 21515:return E.tty?0:-59;case 21505:if(!E.tty)return-59;if(E.tty.ops.ioctl_tcgets){var D=E.tty.ops.ioctl_tcgets(E),w=b();Q[w>>2]=D.c_iflag||0,Q[w+4>>2]=D.c_oflag||0,Q[w+8>>2]=D.c_cflag||0,Q[w+12>>2]=D.c_lflag||0;for(var i=0;i<32;i++)g[w+i+17]=D.c_cc[i]||0;return 0}return 0;case 21506:case 21507:case 21508:if(!E.tty)return-59;if(E.tty.ops.ioctl_tcsets){w=b();var o=Q[w>>2],G=Q[w+4>>2],M=Q[w+8>>2],R=Q[w+12>>2],F=[];for(i=0;i<32;i++)F.push(g[w+i+17]);return E.tty.ops.ioctl_tcsets(E.tty,I,{c_iflag:o,c_oflag:G,c_cflag:M,c_lflag:R,c_cc:F})}return 0;case 21519:if(!E.tty)return-59;w=b();return Q[w>>2]=0,0;case 21520:return E.tty?-28:-59;case 21531:w=b();return r.ioctl(E,I,w);case 21523:if(!E.tty)return-59;if(E.tty.ops.ioctl_tiocgwinsz){var y=E.tty.ops.ioctl_tiocgwinsz(E.tty);w=b();C[w>>1]=y[0],C[w+2>>1]=y[1]}return 0;default:return-28}}catch(A){if(void 0===r||"ErrnoError"!==A.name)throw A;return-A.errno}},s:function(A,I,g,C){try{I=t.getStr(I);var Q=256&C,B=4096&C;return C&=-6401,I=t.calculateAt(A,I,B),t.doStat(Q?r.lstat:r.stat,I,g)}catch(A){if(void 0===r||"ErrnoError"!==A.name)throw A;return-A.errno}},m:function(A,I,g,C){t.varargs=C;try{I=t.getStr(I),I=t.calculateAt(A,I);var Q=C?W():0;return r.open(I,g,Q).fd}catch(A){if(void 0===r||"ErrnoError"!==A.name)throw A;return-A.errno}},t:function(A,I){try{return A=t.getStr(A),t.doStat(r.stat,A,I)}catch(A){if(void 0===r||"ErrnoError"!==A.name)throw A;return-A.errno}},i:()=>{F("")},n:function(A,I,g,C,B,D,w){B=x(B);try{if(isNaN(B))return 61;var i=t.getStreamFromFD(C),o=r.mmap(i,A,B,I,g),G=o.ptr;return Q[D>>2]=o.allocated,E[w>>2]=G,0}catch(A){if(void 0===r||"ErrnoError"!==A.name)throw A;return-A.errno}},o:function(A,I,g,C,Q,B){B=x(B);try{var E=t.getStreamFromFD(Q);2&g&&t.doMsync(A,E,I,C,B)}catch(A){if(void 0===r||"ErrnoError"!==A.name)throw A;return-A.errno}},k:(A,I,g,C)=>{var B=(new Date).getFullYear(),D=new Date(B,0,1),w=new Date(B,6,1),i=D.getTimezoneOffset(),o=w.getTimezoneOffset(),G=Math.max(i,o);E[A>>2]=60*G,Q[I>>2]=Number(i!=o);var M=A=>{var I=A>=0?"-":"+",g=Math.abs(A);return`UTC${I}${String(Math.floor(g/60)).padStart(2,"0")}${String(g%60).padStart(2,"0")}`},R=M(i),F=M(o);o<i?(l(R,g,17),l(F,C,17)):(l(R,C,17),l(F,g,17))},h:()=>Date.now(),l:A=>{var I=B.length,g=2147483648;if((A>>>=0)>g)return!1;for(var C=1;C<=4;C*=2){var Q=I*(1+.2/C);Q=Math.min(Q,A+100663296);var E=Math.min(g,H(Math.max(A,Q),65536));if(n(E))return!0}return!1},q:(A,I)=>{var C=0;return O().forEach(((Q,B)=>{var D=I+C;E[A+4*B>>2]=D,((A,I)=>{for(var C=0;C<A.length;++C)g[I++]=A.charCodeAt(C);g[I]=0})(Q,D),C+=Q.length+1})),0},r:(A,I)=>{var g=O();E[A>>2]=g.length;var C=0;return g.forEach((A=>C+=A.length+1)),E[I>>2]=C,0},g:V,e:function(A){try{var I=t.getStreamFromFD(A);return r.close(I),0}catch(A){if(void 0===r||"ErrnoError"!==A.name)throw A;return A.errno}},d:function(A,I,C,Q){try{var B=((A,I,C,Q)=>{for(var B=0,D=0;D<C;D++){var w=E[I>>2],i=E[I+4>>2];I+=8;var o=r.read(A,g,w,i,Q);if(o<0)return-1;if(B+=o,o<i)break;void 0!==Q&&(Q+=o)}return B})(t.getStreamFromFD(A),I,C);return E[Q>>2]=B,0}catch(A){if(void 0===r||"ErrnoError"!==A.name)throw A;return A.errno}},p:function(A,I,g,C){I=x(I);try{if(isNaN(I))return 61;var Q=t.getStreamFromFD(A);return r.llseek(Q,I,g),i[C>>3]=BigInt(Q.position),Q.getdents&&0===I&&0===g&&(Q.getdents=null),0}catch(A){if(void 0===r||"ErrnoError"!==A.name)throw A;return A.errno}},c:function(A,I,C,Q){try{var B=((A,I,C,Q)=>{for(var B=0,D=0;D<C;D++){var w=E[I>>2],i=E[I+4>>2];I+=8;var o=r.write(A,g,w,i,Q);if(o<0)return-1;if(B+=o,o<i)break;void 0!==Q&&(Q+=o)}return B})(t.getStreamFromFD(A),I,C);return E[Q>>2]=B,0}catch(A){if(void 0===r||"ErrnoError"!==A.name)throw A;return A.errno}},w:function(A){return G.agerrMessages.push(K(A)),0}};G.ccall=(A,I,C,Q,B)=>{var E={string:A=>{var I=0;return null!=A&&0!==A&&(I=(A=>{var I=J(A)+1,g=z(I);return l(A,g,I),g})(A)),I},array:A=>{var I,C,Q=z(A.length);return I=A,C=Q,g.set(I,C),Q}};var D=(A=>G["_"+A])(A),w=[],i=0;if(Q)for(var o=0;o<Q.length;o++){var M=E[C[o]];M?(0===i&&(i=v()),w[o]=M(Q[o])):w[o]=Q[o]}var R=D(...w);return R=function(A){return 0!==i&&P(i),function(A){return"string"===I?K(A):"boolean"===I?Boolean(A):A}(A)}(R)},G.getValue=function(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"i8";switch(I.endsWith("*")&&(I="*"),I){case"i1":case"i8":return g[A];case"i16":return C[A>>1];case"i32":return Q[A>>2];case"i64":return i[A>>3];case"float":return D[A>>2];case"double":return w[A>>3];case"*":return E[A>>2];default:F(`invalid type for getValue: ${I}`)}},G.PATH=k,G.UTF8ToString=K,G.stringToUTF8=l,G.lengthBytesUTF8=J,G.FS=r;var T={a:e};return WebAssembly.instantiate(G.wasm,T).then((I=>{var g=I.instance.exports;G._viz_set_y_invert=g.z,G._viz_set_reduce=g.A,G._viz_get_graphviz_version=g.B,G._viz_get_plugin_list=g.C,G._viz_create_graph=g.D,G._viz_read_one_graph=g.E,G._viz_string_dup=g.F,G._viz_string_dup_html=g.G,G._viz_string_free=g.H,G._viz_add_node=g.I,G._viz_add_edge=g.J,G._viz_add_subgraph=g.K,G._viz_set_default_graph_attribute=g.L,G._viz_set_default_node_attribute=g.M,G._viz_set_default_edge_attribute=g.N,G._viz_set_attribute=g.O,G._viz_free_graph=g.P,G._viz_create_context=g.Q,G._viz_free_context=g.R,G._viz_layout=g.S,G._viz_free_layout=g.T,G._viz_reset_errors=g.U,G._viz_render=g.V,G._free=g.X,G._malloc=g.Y,f=g.Z,P=g._,X=g.$,v=g.aa,o=g.x,y(),function(A){A.y(),G.noFSInit||r.initialized||r.init(),r.ignorePermissions=!1}(g),A(G)})),M};const g=[[/^Error: (.*)/,"error"],[/^Warning: (.*)/,"warning"]];function C(A,I){const g=A.ccall("viz_get_plugin_list","number",["string"],[I]);if(0==g)throw new Error(`couldn't get plugin list: ${I}`);const C=[];let Q,B=g;for(;Q=A.getValue(B,"*");)C.push(A.UTF8ToString(Q)),A.ccall("free","number",["number"],[Q]),B+=4;return A.ccall("free","number",["number"],[g]),C}function Q(A,I,g,C){let Q,w,i,o;try{if(A.agerrMessages=[],A.stderrMessages=[],o=function(A,I){if(!I)return[];return I.map((I=>{if("string"!=typeof I.name)throw new Error("image name must be a string");if("number"!=typeof I.width&&"string"!=typeof I.width)throw new Error("image width must be a number or string");if("number"!=typeof I.height&&"string"!=typeof I.height)throw new Error("image height must be a number or string");const g=A.PATH.join("/",I.name),C=`<?xml version="1.0" encoding="UTF-8"?>\n<svg xmlns="http://www.w3.org/2000/svg" width="${I.width}" height="${I.height}"></svg>\n`;return A.FS.createPath("/",A.PATH.dirname(g)),A.FS.writeFile(g,C),g}))}(A,C.images),"string"==typeof I)Q=function(A,I){let g;try{const C=A.lengthBytesUTF8(I);return g=A.ccall("malloc","number",["number"],[C+1]),A.stringToUTF8(I,g,C+1),A.ccall("viz_read_one_graph","number",["number"],[g])}finally{g&&A.ccall("free","number",["number"],[g])}}(A,I);else{if("object"!=typeof I)throw new Error("input must be a string or object");Q=function(A,I){const g=A.ccall("viz_create_graph","number",["string","number","number"],[I.name,void 0===I.directed||I.directed,void 0!==I.strict&&I.strict]);return E(A,g,I),g}(A,I)}if(0===Q)return{status:"failure",output:void 0,errors:B(A)};if(D(A,Q,C),A.ccall("viz_set_y_invert","number",["number"],[C.yInvert?1:0]),A.ccall("viz_set_reduce","number",["number"],[C.reduce?1:0]),w=A.ccall("viz_create_context"),A.ccall("viz_reset_errors"),0!==A.ccall("viz_layout","number",["number","number","string"],[w,Q,C.engine]))return{status:"failure",output:void 0,errors:B(A)};let G={};for(let I of g){if(i=A.ccall("viz_render","number",["number","number","string"],[w,Q,I]),0===i)return{status:"failure",output:void 0,errors:B(A)};G[I]=A.UTF8ToString(i),A.ccall("free","number",["number"],[i]),i=0}return{status:"success",output:G,errors:B(A)}}catch(I){if(/^exit\(\d+\)/.test(I))return{status:"failure",output:void 0,errors:B(A)};throw I}finally{w&&Q&&A.ccall("viz_free_layout","number",["number"],[w,Q]),Q&&A.ccall("viz_free_graph","number",["number"],[Q]),w&&A.ccall("viz_free_context","number",["number"],[w]),i&&A.ccall("free","number",["number"],[i]),o&&function(A,I){for(const g of I)A.FS.analyzePath(g).exists&&A.FS.unlink(g)}(A,o)}}function B(A){return function(A){const I=[];let g;for(let C=0;C<A.length;C++)"Error"==A[C]&&": "==A[C+1]?(g="error",C+=1):"Warning"==A[C]&&": "==A[C+1]?(g="warning",C+=1):I.push({message:A[C].trimEnd(),level:g});return I}(A.agerrMessages).concat(A.stderrMessages.map((A=>{for(let I=0;I<g.length;I++){const[C,Q]=g[I];let B;if(null!==(B=C.exec(A)))return{message:B[1].trimEnd(),level:Q}}return{message:A.trimEnd()}})))}function E(A,I,g){D(A,I,g),g.nodes&&g.nodes.forEach((g=>{const C=A.ccall("viz_add_node","number",["number","string"],[I,String(g.name)]);g.attributes&&w(A,I,C,g.attributes)})),g.edges&&g.edges.forEach((g=>{const C=A.ccall("viz_add_edge","number",["number","string","string"],[I,String(g.tail),String(g.head)]);g.attributes&&w(A,I,C,g.attributes)})),g.subgraphs&&g.subgraphs.forEach((g=>{const C=A.ccall("viz_add_subgraph","number",["number","string"],[I,String(g.name)]);E(A,C,g)}))}function D(A,I,g){if(g.graphAttributes)for(const[C,Q]of Object.entries(g.graphAttributes))i(A,I,Q,(g=>{A.ccall("viz_set_default_graph_attribute","number",["number","string","number"],[I,C,g])}));if(g.nodeAttributes)for(const[C,Q]of Object.entries(g.nodeAttributes))i(A,I,Q,(g=>{A.ccall("viz_set_default_node_attribute","number",["number","string","number"],[I,C,g])}));if(g.edgeAttributes)for(const[C,Q]of Object.entries(g.edgeAttributes))i(A,I,Q,(g=>{A.ccall("viz_set_default_edge_attribute","number",["number","string","number"],[I,C,g])}))}function w(A,I,g,C){for(const[Q,B]of Object.entries(C))i(A,I,B,(I=>{A.ccall("viz_set_attribute","number",["number","string","number"],[g,Q,I])}))}function i(A,I,g,C){let Q;if(Q="object"==typeof g&&"html"in g?A.ccall("viz_string_dup_html","number",["number","string"],[I,String(g.html)]):A.ccall("viz_string_dup","number",["number","string"],[I,String(g)]),0==Q)throw new Error("couldn't dup string");C(Q),A.ccall("viz_string_free","number",["number","number"],[I,Q])}class o{constructor(A){this.module=A}get graphvizVersion(){return function(A){const I=A.ccall("viz_get_graphviz_version","number",[],[]);return A.UTF8ToString(I)}(this.module)}get formats(){return C(this.module,"device")}get engines(){return C(this.module,"layout")}renderFormats(A,I){let g=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return Q(this.module,A,I,{engine:"dot",...g})}render(A){let I,g=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};I=void 0===g.format?"dot":g.format;let C=Q(this.module,A,[I],{engine:"dot",...g});return"success"===C.status&&(C.output=C.output[I]),C}renderString(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const g=this.render(A,I);if("success"!==g.status)throw new Error(g.errors.find((A=>"error"==A.level))?.message||"render failed");return g.output}renderSVGElement(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const g=this.renderString(A,{...I,format:"svg"});return(new DOMParser).parseFromString(g,"image/svg+xml").documentElement}renderJSON(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const g=this.renderString(A,{...I,format:"json"});return JSON.parse(g)}}function G(){const A=atob("AGFzbQEAAAABmwd0YAJ/fwF/YAF/AGABfwF/YAJ/fwBgA39/fwF/YAN/f38AYAR/f39/AX9gBX9/f39/AX9gBH9/f38AYAZ/f39/f38Bf2AFf39/f38AYAZ/f39/f38AYAAAYAABf2AIf39/f39/f38Bf2AHf39/f39/fwF/YAJ/fwF8YAF8AXxgAX8BfGAHf39/f39/fwBgA39/fwF8YAd/f39/fHx/AGACf3wAYAR8fHx/AXxgAnx8AXxgA398fABgA39/fgF/YAl/f39/f39/f38AYAV/fn5+fgBgBH9/f3wAYAR/f3x8AX9gCn9/f39/f39/f38Bf2ADfHx8AXxgA39/fgBgAAF8YAR/f39/AXxgA39+fwF+YAN/f3wAYAV/f39/fgF/YAR/fn5/AGAEf398fwBgAnx/AXxgBH9/f3wBf2ACf34Bf2ADfHx/AXxgA398fwBgAn19AX1gCH9/f39/f39/AGACf3wBf2AFf39/f3wBf2ALf39/f39/f39/f38Bf2AFf39+f38AYAR/f3x/AX9gAn9+AGAFf39/f3wAYAN/f3wBf2ABfwF+YAZ/fHx8fHwBfGAHf39/fHx/fwBgBX9/fH9/AX9gA39/fwF+YAx/f39/f39/f39/f38Bf2ACf38BfmAGf39/fH9/AGAGf39/f35/AX9gD39/f39/f39/f39/f39/fwBgCn9/f39/f39/f38AYAR/f39/AX5gBn98f39/fwF/YAd/f39/f35+AX9gBn9/f39+fgF/YAd/f39/fn9/AX9gBn9/f39/fgF/YAR/fn9/AX9gBH9/fHwBfGAFf398f38AYAl/f39/f39/f38Bf2AEf398fABgBn9/f3x/fwF/YAJ/fQF/YAR+fn5+AX9gCH9/f398fHx/AGADf31/AGACfn8Bf2ABfAF/YAZ/fX9/f38AYAR/f31/AGACfn4BfWACf30AYAR/f39+AX5gA39+fwF/YAZ8fHx/f38AYAR/fHx8AGACfn4BfGACfH8Bf2AFf39/fH8AYAZ/f398fH8AYAN/fHwBf2AHf3x8fHx8fABgBH98f38Bf2AKf3x/f39/f39/fwBgBX9/f39/AXxgB39/f398f38Bf2AFf399f38AYAN8fHwBf2AFf398fHwAYAN/f38BfWADfn5+AX9gBH9+fn4AYAABfmABfwF9YAN/fn4B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